Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-10-2011
WhiteJack WhiteJack is offline
Registrado
NULL
 
Registrado: ago 2011
Posts: 7
Poder: 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 Notevi fecha: 11-10-2011 a las 01:52:59.
Responder Con Cita
  #2  
Antiguo 11-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No veo la modificación para que sea de 25 en raya
Responder Con Cita
  #3  
Antiguo 11-10-2011
WhiteJack WhiteJack is offline
Registrado
NULL
 
Registrado: ago 2011
Posts: 7
Poder: 0
WhiteJack Va por buen camino
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 argccharargv[]){
    
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>=|| c<|| 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==-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<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;

Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
El arroz que está llegando a nuestras mesas no está autorizado para consumo humano sakuragi La Taberna 5 13-10-2013 00:07:14
Raya en c++ builder vivamotos C++ Builder 2 01-07-2010 08:20:01
Puntero Humano vtdeleon La Taberna 14 16-02-2007 21:41:10
El Ser Humano no tiene LIMITES vtdeleon La Taberna 5 26-09-2006 17:18:36


La franja horaria es GMT +2. Ahora son las 22:15:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi