WhiteJack |
11-10-2011 01:58:54 |
Hola, seriea algo asi pero no es 25 en raya sino 5, pero queda en un ciclo infinito!
Código PHP:
//---------------------------------------------------------------------------
#include <vcl.h> #pragma hdrstop #include <iostream> using namespace std; #define GRANDE 100;
#define MAX 1 #define MIN 2
#define NADIE '-' #define JUGADOR 'O' #define COMPUTADOR 'X'
//---------------------------------------------------------------------------
#pragma argsused
void impTablero(void); int bt(int); int eval(void);
char t[][5]={ {NADIE,NADIE,NADIE,NADIE,NADIE}, {NADIE,NADIE,NADIE,NADIE,NADIE}, {NADIE,NADIE,NADIE,NADIE,NADIE}, {NADIE,NADIE,NADIE,NADIE,NADIE}, {NADIE,NADIE,NADIE,NADIE,NADIE} }; int mejorFila,mejorCol; int profundida;
int main(int argc, char* argv[]){ int f,c,ganador; mejorFila=0; mejorCol=0; profundida=0; impTablero(); do{ do{ cout << "Su Turno:" << endl; cout << "Fila? "; cin >> f; cout << "Columna? "; cin >> c; }while((f<0||f>=5 || c<0 || c>=5)||t[f][c]!=NADIE); t[f][c]=JUGADOR; impTablero(); bt(MAX); cout << "Computador:" << endl; cout << "Fila: " << mejorFila << endl; cout << "Columna: " << mejorCol << endl; t[mejorFila][mejorCol]=COMPUTADOR; impTablero(); ganador=eval(); profundida=0; }while(ganador==2);
if(ganador==-1) cout << "***Ud. Gana***"; else if(ganador==1) cout << "***Computador gana***"; else cout << "***Empate!***"; cout << endl; system("pause"); return 0; }
int bt(int modo){ int i,j,val,mfLocal=0,mcLocal=0; int valor=eval(); if(valor!=2){ return valor; } if(modo==MAX){ valor=-GRANDE; }else{ valor=GRANDE; }
for(i=0;i<5;i++){ for(j=0;j<5;j++){ if(t[i][j]==NADIE){ if(modo==MAX){ t[i][j]=COMPUTADOR; val=bt(MIN); if(valor<val){ valor=val; mfLocal=i; mcLocal=j; } }else{ t[i][j]=JUGADOR; val=bt(MAX); if(valor>val){ valor=val; mfLocal=i; mcLocal=j; } } t[i][j]=NADIE; } } } mejorFila=mfLocal; mejorCol=mcLocal; return valor; }
int eval(void){ profundida++; int i,j,ganador=NADIE; for(i=0;i<5;i++) if(t[i][0]!=NADIE && t[i][0]==t[i][1] && t[i][1]==t[i][2] && t[i][2]==t[i][3] && t[i][3]==t[i][4]) ganador=t[i][0];
for(j=0;j<5;j++) if(t[0][j]!=NADIE && t[0][j]==t[1][j] && t[1][j]==t[2][j] && t[2][j]==t[3][j] && t[3][j]==t[4][j]) ganador=t[0][j];
if(t[0][0]!=NADIE && t[0][0]==t[1][1] && t[1][1]==t[2][2] && t[2][2]==t[3][3] && t[3][3]==t[4][4]) ganador=t[0][0];
if(t[0][4]!=NADIE && t[0][4]==t[1][3] && t[1][3]==t[2][2] && t[2][2]==t[3][1] && t[3][1]==t[4][0]) ganador=t[0][4];
if(ganador==JUGADOR) return -1;
if(ganador==COMPUTADOR) return 1;
for(i=0;i<5;i++) for(j=0;j<5;j++) if(t[i][j]==NADIE) return 2; return 0; }
void impTablero(void){ int i,j; cout << endl; for(i=0;i<5;i++){ for(j=0;j<5;j++) cout << t[i][j]; cout << endl; } cout << endl; }
|