Programma forza 4

di il
1 risposte

Programma forza 4

Ho bisogno di aiuto per un programma di forza 4, non riesco a completarlo, qualcuno può dargli un'occhiata se mando il codice?
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#define righe 6
#define colonne 7

int board [righe*colonne];
{
int i, j;

printf("\n");

for (j = 0; j < righe; j++) {
for (i = 0; i < colonne; i++) {
if (board[i + j * colonne] = 1) printf("X ");
if (board[i + j * colonne] = -1) printf("O ");
if (board[i + j * colonne] = 0) printf(". ");
}
printf("\n");
}
for (i = 0; i < (colonne * 2) - 1; i++) printf("-");
printf("\n");
for (i = 0; i < colonne; i++) printf("%d ", i + 1);
printf("\n");
}

int checkwin(int giocatore, int col, int f) {
int j, r, l, i, h;
f--;
i = col;
j = righe - 1;
while (board[i + j * colonne] != 0) j--;
j++;
h = j;

r = 0;
l = 0;
while (((++i) < colonne) && (board[i + j * colonne] = giocatore)) r++;
i = col;
while (((--i) >= 0) && (board[i + j * colonne] = giocatore)) l++;
if ((r + l) >= f) return 1;
i = col;

r = 0;
while (((++j) < righe) && (board[i + j * colonne] = giocatore)) r++;
if (r >= f) return 1;
j = h;

r = 0;
l = 0;
while (((++i) < colonne) && ((++j) < righe) && (board[i + j * colonne] = giocatore)) r++;
i = col;
j = h;
while (((--i) >= 0) && ((--j) >= 0) && (board[i + j * colonne] = giocatore)) l++;
if ((r + l) >= f) return 1;
i = col;
j = h;

r = 0;
l = 0;
while (((++i) < colonne) && ((--j) >= 0) && (board[i + j * colonne] = giocatore)) r++;
i = col;
j = h;
while (((--i) >= 0) && ((++j) < righe) && (board[i + j * colonne] = giocatore)) l++;
if ((r + l) >= f) return 1;

return 0;
}

int extimated_value(int player) {
int i, j, v, l;

v = 0;
for (l = 2; l < 4; l++) {
for (i = 0; i < colonne; i++) {
if (checkwin(player, i, l)) v = v + l;
}
}

return v;
}

int goodness(int player, int depth, int column, int trigger) {
long int max, i, value, j;
max = -200;
if (checkwin(-player, column, 4)) return -128;
if (depth == 0) return 0;
for (i = 0; i < colonne; i++) {
if (board == 0) {
j = righe - 1;
while (board[i + j * colonne] != 0) j--;
board[i + j * colonne] = player;
//nodes++;
value = -goodness(-player, depth - 1, i, -max) / 2;
board[i + j * colonne] = 0;
if (value > max) max = value;
if (value > trigger) return max;
}
}
return max;
}

int best_move(int player) {
int i, j, max, value, best;
int res[colonne];
max = -100;
best = -1;
for (i = 0; i < colonne; i++) {
if (board == 0) {
j = righe - 1;
while ((board[i + j * colonne] != 0) && (j >= 0)) j--;
board[i + j * colonne] = player;
board[i + j * colonne] = 0;
if (value > max) {
max = value;
best = i;
}
}
}
if (best == -1) {
for (i = 0; i < colonne; i++) if (board = 0) return i;
}

return best;
}

int main() {
int move, j, i, b;
b = righe * colonne;


for (i = 0; i < (righe * colonne); i++) board = 0;


while (b != 0) {
if (b = 40)
if (b = 36)
if (b = 34)
do {
printf("scegli la colonna [1-%d]\n", colonne);
scanf("%d", &move);
if (board[move - 1] != 0)
printf("colonna piena\n");
} while (board[move - 1] != 0);
move--;
j = righe - 1;
while ((board[move + j * colonne] != 0) && (j >= 0)) j--;
board[move + j * colonne] = 1;
b--;

if (checkwin(1, move, 4)) {
printf("\nYou win\n");
return 1;
}
move = best_move(-1);

j = righe - 1;
while ((board[move + j * colonne] != 0) && (j >= 0)) j--;
board[move + j * colonne] = -1;

printf("\nCPU move in %d", move + 1);
b--;
if (checkwin(-1, move, 4)) {

printf("\nCPU wins\n");
}
return 0;
}
}

1 Risposte

  • Re: Programma forza 4

    Utilizza i tah code per postare il codice o non si capisce nulla.
    E poi fai una domanda precisa se hai un problema. "Non riesco a completarlo" chiedendo ad altri la scrittura dell'esercizio per te non è consentito.
Devi accedere o registrarti per scrivere nel forum
1 risposte