Ver Mensaje Individual
  #1  
Antiguo 11-10-2011
WhiteJack WhiteJack is offline
Registrado
NULL
 
Registrado: ago 2011
Posts: 7
Reputación: 0
WhiteJack Va por buen camino
N en Raya - HUMANO vs PC

Hola amigos, he estado estudiando un algoritmo de un 3 en raya, el cual funciona HUMANO vs PC, no es muy complicado pero ahora quiero realizar la modificación para un tablero de 25 celdas pero el algoritmo deja de funcionar por completo entra en un ciclo infinito y no veo luz, ojala alguien pudiera echarle un ojo a ver y dar con lo que yo no veo.

Gracias, adjunto el código de la versión funcional, la modificación que no van en este serian agregar mas celdas a la matriz 5x5, aumentar los limites de los ciclos y modificar los condicionales respectivos.

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[][3]={
{
NADIE,NADIE,NADIE},
{
NADIE,NADIE,NADIE},
{
NADIE,NADIE,NADIE}
};
int mejorFila,mejorCol;

int main(int argccharargv[]){
    
int f,c,ganador;
        
mejorFila=0;
        
mejorCol=0;
    
impTablero();
    do{
        do{
            
cout << "Su Turno:" << endl;
            
cout << "Fila? "cin >> f;
            
cout << "Columna? "cin >> c;
        }while((
f<0||f>=|| c<|| c>=3)||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();
    }while(
ganador==2);

    if(
ganador==-1cout << "***Ud. Gana***";
    else if(
ganador==1cout << "***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<3;i++){
        for(
j=0;j<3;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){
    
int i,j,ganador=NADIE;
    for(
i=0;i<3;i++)    
        if(
t[i][0]!=NADIE && t[i][0]==t[i][1] && t[i][1]==t[i][2])
            
ganador=t[i][0];

    for(
j=0;j<3;j++)    
        if(
t[0][j]!=NADIE && t[0][j]==t[1][j] && t[1][j]==t[2][j])
            
ganador=t[0][j];

    if(
t[0][0]!=NADIE && t[0][0]==t[1][1] && t[1][1]==t[2][2])
        
ganador=t[0][0];

    if(
t[0][2]!=NADIE && t[0][2]==t[1][1] && t[1][1]==t[2][0])
        
ganador=t[0][2];

    if(
ganador==JUGADOR)
                return -
1;

    if(
ganador==COMPUTADOR)
                return 
1;

    for(
i=0;i<3;i++)
        for(
j=0;j<3;j++)
            if(
t[i][j]==NADIE)
                                return 
2;
    return 
0;
}

void impTablero(void){
    
int i,j;
    
cout << endl;
    for(
i=0;i<3;i++){
        for(
j=0;j<3;j++)
            
cout << t[i][j];
        
cout << endl;
    }
    
cout << endl;


Última edición por Casimiro Noteví fecha: 11-10-2011 a las 01:52:59.
Responder Con Cita