Juego del Gato en C
Juego del Gato en C.
/*Juego de Gato Heur铆stico Autor:Jes煤s M.Olivares Ceja Desarrollado para prop贸sitos did谩cticos de Ingenier铆a del Conocimiento Su copia es libre, si lo utiliza para prop贸sitos no lucrativos. */ #include "stdio.h" #include "dos.h" #define SI 1 #define NO 0 // TIPOS typedef struct { char tablero[9]; int f; } TipoTablero; //VARIABLES struct { TipoTablero Tm; int g; int UTc; TipoTablero Tc[7]; } arbol[8]; int UTiradaMaq; TipoTablero juego; char Linea[100]; // PROTOTIPOS void desplegaTablero (void); int esValida (int tirada); void generaTiradasMaq (void); void generaTiradasContrario (int iTiradaMaq); void creaTiradaMaq (int i); void creaTc (int iTiradaMaq, int i); void CalculaF (TipoTablero * t); int revisaFin (int max); void main (void) { int fin, valida, tiradaContrario, i; int iTiradaMaq, iTiradaContrario; int min, max, cualTm, vacias; // INICIALIZA EL TABLERO DE JUEGO for (i = 0; i < 9; i++) juego.tablero[i] = ' '; // MIENTRAS NO SEA FIN JUEGA fin = NO; while (fin == NO) { desplegaTablero (); // TOMA LA TIRADA DEL CONTRARIO HASTA QUE SEA VALIDA valida = NO; while (valida == NO) { printf ("驴Donde tiras? [1..9] 0 = salir?\n"); gets (Linea); tiradaContrario = atoi (Linea) - 1; valida = esValida (tiradaContrario); switch (valida) { case 0: fin = SI; valida = SI; break; case 1: valida = SI; break; case 2: printf ("Posici贸n Ocupada, indica otra\n"); valida = NO; break; case 3: printf ("Posici贸n Erronea, indica otra [1..9]\n"); valida = NO; break; } } // SI DECIDIO聽 TERMINAR, SALIRSE if (fin == SI) continue; // COLOCA LA TIRADA DEL CONTRARIO juego.tablero[tiradaContrario] = ' '; desplegaTablero (); CalculaF (&juego); if (juego.f < -9000) { printf ("Ganaste\n"); fin = SI; continue; } // GENERA POSIBLES TIRADAS DE LA MAQUINA UTiradaMaq = 0; generaTiradasMaq (); // PARA CADA TIRADA DE LA MAQUINA for (iTiradaMaq = 0; iTiradaMaq < UTiradaMaq; iTiradaMaq++) { // GENERA POSIBLES TIRADAS DEL CONTRARIO arbol[iTiradaMaq].UTc = 0; generaTiradasContrario (iTiradaMaq); min = 15000; // PARA CADA TIRADA DEL CONTRARIO for (iTiradaContrario = 0; iTiradaContrario < arbol[iTiradaMaq].UTc; iTiradaContrario++) { // CALCULA F CalculaF (&arbol[iTiradaMaq].Tc[iTiradaContrario]); // ENCUENTRA LA F MINIMA if (min > arbol[iTiradaMaq].Tc[iTiradaContrario].f) min = arbol[iTiradaMaq].Tc[iTiradaContrario].f; } // CALCULA F' CalculaF (&arbol[iTiradaMaq].Tm); // CALCULA G arbol[iTiradaMaq].g = arbol[iTiradaMaq].Tm.f + min; } max = -15000; // ELIGE TM MEDIANTE EL CRITERIO G MAXIMA cualTm = -1; for (iTiradaMaq = 0; iTiradaMaq < UTiradaMaq; iTiradaMaq++) { if (arbol[iTiradaMaq].g > max) { cualTm = iTiradaMaq; max = arbol[iTiradaMaq].g; } } // SI LA MAQUINA TIRO if (cualTm > -1) { printf ("voy a tirar...\n"); delay (1000); // COPIA EL TABLERO CON LA JUGADA DESEADA for (i = 0; i < 9; i++) juego.tablero[i] = arbol[cualTm].Tm.tablero[i]; } // DETERMINA LA SITUACION ACTUAL DEL JUEGO CalculaF (&juego); switch (revisaFin (juego.f)) { case 0: break; // CONTINUA case 1: desplegaTablero (); printf ("LO SIENTO, Gane!!!!\n"); fin = SI; break; case 2: desplegaTablero (); printf ("Ganaste\n"); fin = SI; break; case 3: printf ("Quedamos G a t o, hagamos otro intento\n"); fin = SI; break; } } } void desplegaTablero (void) { int r, c; for (r = 0; r < 3; r++) { for (c = 0; c < 3; c++) if (juego.tablero[3 * r + c] == 32) printf ("%d ", 3 * r + c + 1); else printf ("%c ", juego.tablero[3 * r + c]); printf ("\n\n"); } } int esValida (int tirada) { if (tirada == -1) return 0; // NO CONTINUAR if ((tirada > -1) && (tirada < 9)) if (juego.tablero[tirada] == ' ') return 1; else return 2; // POSICION OCUPADA else return 3; // POSICION INVALIDA } void generaTiradasMaq (void) { int i; for (i = 0; i < 9; i++) if (juego.tablero[i] == ' ') creaTiradaMaq (i); } void generaTiradasContrario (int iTiradaMaq) { int i; for (i = 0; i < 9; i++) if (arbol[iTiradaMaq].Tm.tablero[i] == ' ') creaTc (iTiradaMaq, i); } void creaTiradaMaq (int i) { int k; for (k = 0; k < 9; k++) arbol[UTiradaMaq].Tm.tablero[k] = juego.tablero[k]; arbol[UTiradaMaq].Tm.tablero[i] = 'o'; UTiradaMaq++; } void creaTc (int iTiradaMaq, int i) { int k; for (k = 0; k < 9; k++) arbol[iTiradaMaq].Tc[arbol[iTiradaMaq].UTc].tablero[k] = arbol[iTiradaMaq].Tm.tablero[k]; arbol[iTiradaMaq].Tc[arbol[iTiradaMaq].UTc].tablero[i] = 'x'; arbol[iTiradaMaq].UTc++; } void CalculaF (TipoTablero * t) { int v, h, d; int r, c, ctaO, ctaE, ctaX; // SUMA LAS VERTICALES MAQUINA v = 0; for (c = 0; c < 3; c++) { ctaO = 0; ctaE = 0; for (r = 0; r < 3; r++) { if (t->tablero[3 * r + c] == 'o') ctaO++; if (t->tablero[3 * r + c] == ' ') ctaE++; } if (ctaO == 3) { t->f = 9999; return; } if ((ctaO + ctaE) == 3) v++; } h = 0; for (r = 0; r < 3; r++) { ctaO = 0; ctaE = 0; for (c = 0; c < 3; c++) { if (t->tablero[3 * r + c] == 'o') ctaO++; if (t->tablero[3 * r + c] == ' ') ctaE++; } if (ctaO == 3) { t->f = 9999; return; } if ((ctaO + ctaE) == 3) h++; } // SUMA LAS DIAGONALES MAQUINA d = 0; ctaO = 0; ctaE = 0; for (c = 0; c < 9; c += 4) { if (t->tablero[c] == 'o') ctaO++; if (t->tablero[c] == ' ') ctaE++; } if (ctaO == 3) { t->f = 9999; return; } if ((ctaO + ctaE) == 3) d++; ctaO = 0; ctaE = 0; for (c = 2; c < 7; c += 2) { if (t->tablero[c] == 'o') ctaO++; if (t->tablero[c] == ' ') ctaE++; } if (ctaO == 3) { t->f = 9999; return; } if ((ctaO + ctaE) == 3) d++; // SUMA LAS VERTICALES CONTRARIO for (c = 0; c < 3; c++) { ctaX = 0; ctaE = 0; for (r = 0; r < 3; r++) { if (t->tablero[3 * r + c] == 'x') ctaX++; if (t->tablero[3 * r + c] == ' ') ctaE++; } if (ctaX == 3) { t->f = -9999; return; } if ((ctaX + ctaE) == 3) v--; } // SUMA LAS HORIZONTALES CONTRARIO for (r = 0; r < 3; r++) { ctaX = 0; ctaE = 0; for (c = 0; c < 3; c++) { if (t->tablero[3 * r + c] == 'x') ctaX++; if (t->tablero[3 * r + c] == ' ') ctaE++; } if (ctaX == 3) { t->f = -9999; return; } if ((ctaX + ctaE) == 3) h--; } // SUMA LAS DIAGXNALES CONTRARIO ctaX = 0; ctaE = 0; for (c = 0; c < 9; c += 4) { if (t->tablero[c] == 'x') ctaX++; if (t->tablero[c] == ' ') ctaE++; } if (ctaX == 3) { t->f = -9999; return; } if ((ctaX + ctaE) == 3) d--; ctaX = 0; ctaE = 0; for (c = 2; c < 7; c += 2) { if (t->tablero[c] == 'x') ctaX++; if (t->tablero[c] == ' ') ctaE++; } if (ctaX == 3) { t->f = -9999; return; } if ((ctaX + ctaE) == 3) d--; // ASIGNA F t->f = v + h + d; } int revisaFin (int max) { int i, vacias; if (max > 9000) return 1; // GANO LA MAQUINA if (max < -9000) return 2; // GANO EL CONTRARIO vacias = 0; for (i = 0; i < 9; i++) if (juego.tablero[i] == ' ') vacias++; if (vacias > 0) return 0; // PUEDEN CONTINUAR return 3; // SE ACABO EL JUEGO FUE GATO } // fin del archivo
Quiz谩 te interese :
#include "stdio.h" #include "conio.h" #include "string.h" #include "math.h" #include "stdl ...
$N = 8; for ($i = 0; $i < $N; $i++) { for ($j = 0; $j < $N; $j++) { $tablero ...
脕rbol fractal en BorlandC para DOS /*arbol3*/ /*Fernando Galindo Soria*/ #include #incl ...






Hola amigo, me tira los siguientes errores el codigo;
33 C:\Documents and Settings\Administrador\Escritorio\main.cpp `main’ must return `int’
C:\Documents and Settings\Administrador\Escritorio\main.cpp In function `int main(…)’:
52 C:\Documents and Settings\Administrador\Escritorio\main.cpp `atoi’ undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
123 C:\Documents and Settings\Administrador\Escritorio\main.cpp `delay’ undeclared (first use this function)
C:\Documents and Settings\Administrador\Escritorio\Makefile.win [Build Error] [main.o] Error 1
Que tengo que arreglar?
no entiendo mucho
Saludos Carlos
El c贸digo es para BorlandC para DOS, creo que lo quieres compilar para gcc.
Para que sea compatible tendr铆as que hacerle los siguientes cambios:
Espero te ayude
?