/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problema con juego de 3 en raya en C

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Anuled



Registrado: 24 Oct 2012
Mensajes: 21

MensajePublicado: 24/11/2012 6:52 am
Título: Problema con juego de 3 en raya en C

Hola, con lo conocimientos que he ido adquiriendo en la programación en C me he decidido por hacer por mi cuenta un juego del 3 en raya, algo "simple" para empezar. Lo que llevo hecho está muy cutre, pero tenéis que entender que llevo poco tiempo programando.

En lo que es a la estructura algorítmica tengo una duda, ahora os la comento. Dejo primero lo que llevo hecho de código (aun no está acabado):

Código:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

/*3 en raya*/

int main (void){
   
    int matriz[3][3], i, j, opcion1, opcion2, opDescartada1;
   
    srand(time(NULL));
   
    system ("cls");
   
    for(i=0; i<3; i++){
                       for(j=0; j<3; j++){
                                          matriz[i][j]=0;
                                         }
                      }
   
    printf("\tBIENVENIDO A LA PARTIDA");
    printf("\n\nEstas son las posiciones que hay en el tablero,"); //Introducción al juego.
    printf("\npara elegir una casilla escribe su numero.");
   
    printf("\n\nEstos son los numeros de cada casilla:"); //Muestra cómo seleccionar una casilla.
    printf("\n\n\t1 2 3\n\t4 5 6\n\t7 8 9");
    printf("\n\nEn la casilla que selecciones se escribira un 1,");
    printf("\nmientras que donde seleccione el ordenador habra un 2");
       
    printf("\n\nEl tablero ahora mismo esta asi:");
    printf("\n\n\t%i %i %i", matriz[0][0], matriz[0][1], matriz[0][2]); //Muestra por pantalla tablero vacío.
    printf("\n\t%i %i %i", matriz[1][0], matriz[1][1], matriz[1][2]);
    printf("\n\t%i %i %i", matriz[2][0], matriz[2][1], matriz[2][2]);
   
    do{
        printf("\n\nQue casilla seleccionas para mover?:"); //Primera elección jugador 1.
        scanf("%i", &opcion1);
      }while((opcion1<1)||(opcion1>9));
       
        switch(opcion1){
                        case(1): matriz[0][0]=1;
                                 break;
                        case(2): matriz[0][1]=1;
                                 break;
                        case(3): matriz[0][2]=1;
                                 break;
                        case(4): matriz[1][0]=1;
                                 break;
                        case(5): matriz[1][1]=1;
                                 break;
                        case(6): matriz[1][2]=1;
                                 break;
                        case(7): matriz[2][0]=1;
                                 break;
                        case(8): matriz[2][1]=1;
                                 break;
                        case(9): matriz[2][2]=1;
                                 break;     
                       }
   
    opDescartada1=opcion1; //Descarta la casilla del jugador para que no la seleccione la máquina.
   
    do{ //Turno de la maquina, la elección de la primera casilla sera absolutamente azarosa.
       opcion2=(1+rand()%(9-1+1)); //(x+rand()%y) genera un numero aleatorio en el rango [x, y-1+x]
      }while(opcion2=opDescartada1);

        switch(opcion2){
                        case(1): matriz[0][0]=2;
                                 break;
                        case(2): matriz[0][1]=2;
                                 break;
                        case(3): matriz[0][2]=2;
                                 break;
                        case(4): matriz[1][0]=2;
                                 break;
                        case(5): matriz[1][1]=2;
                                 break;
                        case(6): matriz[1][2]=2;
                                 break;
                        case(7): matriz[2][0]=2;
                                 break;
                        case(8): matriz[2][1]=2;
                                 break;
                        case(9): matriz[2][2]=2;
                                 break;     
                       }
                     
    printf("\nHa pasado el primer turno de partida.");
    printf("\nEl tablero esta ahora mismo asi:"); //Muestra tablero.
    printf("\n\n\t%i %i %i", matriz[0][0], matriz[0][1], matriz[0][2]);
    printf("\n\t%i %i %i", matriz[1][0], matriz[1][1], matriz[1][2]);
    printf("\n\t%i %i %i", matriz[2][0], matriz[2][1], matriz[2][2]);





                       
                       system ("pause");
                       
                       return 0;
                       
                       }


Me voy a centrar en esta parte del código:

Código:
 do{ //Turno de la maquina, la elección de la primera casilla sera absolutamente azarosa.
       opcion2=(1+rand()%(9-1+1)); //(x+rand()%y) genera un numero aleatorio en el rango [x, y-1+x]
      }while(opcion2=opDescartada1);


Si compiláis el programa en DevC++ y lo ejecutáis veréis lo que ocurre. El jugador hace la elección de una casilla. Esa casilla se descarta para que el ordenador no la seleccione, pero tras la decisión de casilla del jugador 1, la máquina no decide nada. No se si el problema está en el do{-------}while(-----); o en otra cosa. A ver si me podéis echar una mano para arreglar ese fragmento del código por favor.

Un saludo y muchas gracias. Smile
Volver arriba
Masakre



Registrado: 06 Jun 2012
Mensajes: 245

MensajePublicado: 24/11/2012 8:20 am
Título: Re: Problema con juego de 3 en raya en C

Cita:
do{ //Turno de la maquina, la elección de la primera casilla sera absolutamente azarosa.
opcion2=(1+rand()%(9-1+1)); //(x+rand()%y) genera un numero aleatorio en el rango [x, y-1+x]
}while(opcion2==opDescartada1);

Es algo que a mí me ocurría muy seguido jeje
Volver arriba
Anuled



Registrado: 24 Oct 2012
Mensajes: 21

MensajePublicado: 24/11/2012 2:05 pm
Título:

Muchas gracias por la ayuda, ya terminé el código y me ha surgido otro problema: la inteligencia artificial la he diseñado para que siempre que hayan dos fichas alineadas, el ordenador rellene el tercer hueco para evitar que el usuario gane. Si el usuario no pone 2 fichas alineadas, por ejemplo, la partida esta asi

- 1 -
2 - -
- - 1

y le tocase al ordenador poner un 2. no sabria donde ponerlo. Lo puse para que lo pusiese con un rand, pero no va, se queda sin mover. Os dejo el codigo entero (0,46k lineas) y abajo dónde creo que está el problema.

Código:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

/*3 en raya*/

int main (void){
   
    int matriz[3][3], i, j, opcion1, opcion2, opcion3, opcion4, opcion5, opcion6, opcion7, opcion8;
   
    srand(time(NULL));
   
    system ("cls");
   
    for(i=0; i<3; i++){
                       for(j=0; j<3; j++){
                                          matriz[i][j]=0;
                                         }
                      }
   
    printf("\tBIENVENIDO A LA PARTIDA");
    printf("\n\nEstas son las posiciones que hay en el tablero,"); //Introducción al juego.
    printf("\npara elegir una casilla escribe su numero.");
   
    printf("\n\nEstos son los numeros de cada casilla:"); //Muestra cómo seleccionar una casilla.
    printf("\n\n\t1 2 3\n\t4 5 6\n\t7 8 9");
    printf("\n\nEn la casilla que selecciones se escribira un 1,");
    printf("\nmientras que donde seleccione el ordenador habra un 2");
       
    printf("\n\nEl tablero ahora mismo esta asi:");
    printf("\n\n\t%i %i %i", matriz[0][0], matriz[0][1], matriz[0][2]); //Muestra por pantalla tablero vacío.
    printf("\n\t%i %i %i", matriz[1][0], matriz[1][1], matriz[1][2]);
    printf("\n\t%i %i %i", matriz[2][0], matriz[2][1], matriz[2][2]);
   
    do{
        printf("\n\nQue casilla seleccionas para mover?:"); //Primera elección jugador 1.
        scanf("%i", &opcion1);
      }while((opcion1<1)||(opcion1>9));
       
        switch(opcion1){
                        case(1): matriz[0][0]=1;
                                 break;
                        case(2): matriz[0][1]=1;
                                 break;
                        case(3): matriz[0][2]=1;
                                 break;
                        case(4): matriz[1][0]=1;
                                 break;
                        case(5): matriz[1][1]=1;
                                 break;
                        case(6): matriz[1][2]=1;
                                 break;
                        case(7): matriz[2][0]=1;
                                 break;
                        case(8): matriz[2][1]=1;
                                 break;
                        case(9): matriz[2][2]=1;
                                 break;     
                       }
   
    do{ //Turno de la maquina, la elección de la primera casilla sera absolutamente azarosa.
       opcion2=(1+rand()%(9-1+1)); //(x+rand()%y) genera un numero aleatorio en el rango [x, y-1+x]
      }while(opcion2==opcion1);

        switch(opcion2){
                        case(1): matriz[0][0]=2;
                                 break;
                        case(2): matriz[0][1]=2;
                                 break;
                        case(3): matriz[0][2]=2;
                                 break;
                        case(4): matriz[1][0]=2;
                                 break;
                        case(5): matriz[1][1]=2;
                                 break;
                        case(6): matriz[1][2]=2;
                                 break;
                        case(7): matriz[2][0]=2;
                                 break;
                        case(8): matriz[2][1]=2;
                                 break;
                        case(9): matriz[2][2]=2;
                                 break;     
                       }
                     
    printf("\nHa pasado el primer turno de partida.");
    printf("\nEl tablero esta ahora mismo asi:"); //Muestra tablero.
    printf("\n\n\t%i %i %i", matriz[0][0], matriz[0][1], matriz[0][2]);
    printf("\n\t%i %i %i", matriz[1][0], matriz[1][1], matriz[1][2]);
    printf("\n\t%i %i %i", matriz[2][0], matriz[2][1], matriz[2][2]);
    printf("\n");
   
    do{
        printf("\nQue casilla seleccionas para mover?:"); //Segunda elección jugador 1.
        scanf("%i", &opcion3);
      }while(((opcion3<1)||(opcion3>9))||((opcion3==opcion2)||(opcion3==opcion1)));
     
        switch(opcion3){
                        case(1): matriz[0][0]=1;
                                 break;
                        case(2): matriz[0][1]=1;
                                 break;
                        case(3): matriz[0][2]=1;
                                 break;
                        case(4): matriz[1][0]=1;
                                 break;
                        case(5): matriz[1][1]=1;
                                 break;
                        case(6): matriz[1][2]=1;
                                 break;
                        case(7): matriz[2][0]=1;
                                 break;
                        case(8): matriz[2][1]=1;
                                 break;
                        case(9): matriz[2][2]=1;
                                 break;     
                       } 
   
    if((matriz[0][0]==1)&&(matriz[1][0]==1)) //IA columnas.
                                            opcion4=7;
    else if((matriz[0][1]==1)&&(matriz[1][1]==1))
                                                 opcion4=8;
         else if((matriz[0][2]==1)&&(matriz[1][2]==1))
                                                      opcion4=9;                 
              else if((matriz[1][0]==1)&&(matriz[2][0]==1))
                                                           opcion4=1;   
                   else if((matriz[1][1]==1)&&(matriz[2][1]==1))
                                                                opcion4=2;
                        else if((matriz[1][2]==1)&&(matriz[2][2]==1))
                                                                     opcion4=3;   
                             else if((matriz[0][0]==1)&&(matriz[0][1]==1)) //IA filas.
                                                                          opcion4=3;
                                  else if((matriz[1][0]==1)&&(matriz[1][1]==1))
                                                                               opcion4=6;             
                                       else if((matriz[2][0]==1)&&(matriz[2][1]==1))
                                                                                    opcion4=9;
                                            else if((matriz[0][1]==1)&&(matriz[0][2]==1))
                                                                                         opcion4=1;
                                                 else if((matriz[1][2]==1)&&(matriz[1][1]==1))
                                                                                              opcion4=4;                                         
                                                      else if((matriz[2][1]==1)&&(matriz[2][2]==1))
                                                                                                   opcion4=7;
                                                           else if((matriz[0][0]==1)&&(matriz[1][1]==1)) //IA diagonales.
                                                                                                        opcion4=9;       
                                                                else if((matriz[2][2]==1)&&(matriz[1][1]==1))
                                                                                                             opcion4=1;
                                                                     else if((matriz[0][2]==1)&&(matriz[1][1]==1))
                                                                                                                  opcion4=7;                                                                                   
                                                                          else if((matriz[2][0]==1)&&(matriz[1][1]==1))
                                                                                                                       opcion4=3;
                                                                               else if((matriz[0][0]==1)&&(matriz[2][2]==1)) //IA entre espacios diagonales.
                                                                                                                            opcion4=5;                                       
                                                                                    else if((matriz[0][2]==1)&&(matriz[2][0]==1))
                                                                                                                                 opcion4=5; 
                                                                                         else if((matriz[0][0]==1)&&(matriz[2][0]==1)) //IA entre espacios columnas.
                                                                                                                                      opcion4=4;
                                                                                              else if((matriz[0][1]==1)&&(matriz[2][1]==1))
                                                                                                                                           opcion4=5; 
                                                                                                   else if((matriz[0][2]==1)&&(matriz[2][2]==1))
                                                                                                                                                opcion4=6;
                                                                                                        else if((matriz[0][0]==1)&&(matriz[0][2]==1)) //IA espacios filas.
                                                                                                                                                     opcion4=2;
                                                                                                             else if((matriz[1][0]==1)&&(matriz[1][2]==1))
                                                                                                                                                          opcion4=5;
                                                                                                                  else if((matriz[2][0]==1)&&(matriz[2][2]==1))
                                                                                                                                                               opcion4=8;
                                                                                                                       else{
                                                                                                                            do{
                                                                                                                               opcion4=(1+rand()%(9-1+1));
                                                                                                                              }while((opcion4==opcion1)||(opcion4==opcion2)||(opcion4==opcion3));   
                                                                                                                           }                                                                                                                                                 
        switch(opcion4){
                        case(1): matriz[0][0]=2;
                                 break;
                        case(2): matriz[0][1]=2;
                                 break;
                        case(3): matriz[0][2]=2;
                                 break;
                        case(4): matriz[1][0]=2;
                                 break;
                        case(5): matriz[1][1]=2;
                                 break;
                        case(6): matriz[1][2]=2;
                                 break;
                        case(7): matriz[2][0]=2;
                                 break;
                        case(8): matriz[2][1]=2;
                                 break;
                        case(9): matriz[2][2]=2;
                                 break;     
                       }         
                       
    printf("\nHa pasado el segundo turno de partida.");
    printf("\nEl tablero esta ahora mismo asi:"); //Muestra tablero.
    printf("\n\n\t%i %i %i", matriz[0][0], matriz[0][1], matriz[0][2]);
    printf("\n\t%i %i %i", matriz[1][0], matriz[1][1], matriz[1][2]);
    printf("\n\t%i %i %i", matriz[2][0], matriz[2][1], matriz[2][2]);
    printf("\n");   
   
    do{
        printf("\nQue casilla seleccionas para mover?:");
        scanf("%i", &opcion5);
      }while(((opcion3<1)||(opcion3>9))||((opcion5==opcion2)||(opcion5==opcion1)||(opcion5==opcion3)||(opcion5==opcion4)));                                                                 
                       
        switch(opcion5){
                        case(1): matriz[0][0]=1;
                                 break;
                        case(2): matriz[0][1]=1;
                                 break;
                        case(3): matriz[0][2]=1;
                                 break;
                        case(4): matriz[1][0]=1;
                                 break;
                        case(5): matriz[1][1]=1;
                                 break;
                        case(6): matriz[1][2]=1;
                                 break;
                        case(7): matriz[2][0]=1;
                                 break;
                        case(8): matriz[2][1]=1;
                                 break;
                        case(9): matriz[2][2]=1;
                                 break;     
                       }
                                     
    if((matriz[0][0]==1)&&(matriz[1][0]==1)) //IA columnas.
                                            opcion6=7;
    else if((matriz[0][1]==1)&&(matriz[1][1]==1))
                                                 opcion6=8;
         else if((matriz[0][2]==1)&&(matriz[1][2]==1))
                                                      opcion6=9;                 
              else if((matriz[1][0]==1)&&(matriz[2][0]==1))
                                                           opcion6=1;   
                   else if((matriz[1][1]==1)&&(matriz[2][1]==1))
                                                                opcion6=2;
                        else if((matriz[1][2]==1)&&(matriz[2][2]==1))
                                                                     opcion6=3;   
                             else if((matriz[0][0]==1)&&(matriz[0][1]==1)) //IA filas.
                                                                          opcion6=3;
                                  else if((matriz[1][0]==1)&&(matriz[1][1]==1))
                                                                               opcion6=6;             
                                       else if((matriz[2][0]==1)&&(matriz[2][1]==1))
                                                                                    opcion6=9;
                                            else if((matriz[0][1]==1)&&(matriz[0][2]==1))
                                                                                         opcion6=1;
                                                 else if((matriz[1][2]==1)&&(matriz[1][1]==1))
                                                                                              opcion6=4;                                         
                                                      else if((matriz[2][1]==1)&&(matriz[2][2]==1))
                                                                                                   opcion6=7;
                                                           else if((matriz[0][0]==1)&&(matriz[1][1]==1)) //IA diagonales.
                                                                                                        opcion6=9;       
                                                                else if((matriz[2][2]==1)&&(matriz[1][1]==1))
                                                                                                             opcion6=1;
                                                                     else if((matriz[0][2]==1)&&(matriz[1][1]==1))
                                                                                                                  opcion6=7;                                                                                   
                                                                          else if((matriz[2][0]==1)&&(matriz[1][1]==1))
                                                                                                                       opcion6=3;
                                                                               else if((matriz[0][0]==1)&&(matriz[2][2]==1)) //IA entre espacios diagonales.
                                                                                                                            opcion6=5;                                       
                                                                                    else if((matriz[0][2]==1)&&(matriz[2][0]==1))
                                                                                                                                 opcion6=5; 
                                                                                         else if((matriz[0][0]==1)&&(matriz[2][0]==1)) //IA entre espacios columnas.
                                                                                                                                      opcion6=4;
                                                                                              else if((matriz[0][1]==1)&&(matriz[2][1]==1))
                                                                                                                                           opcion6=5; 
                                                                                                   else if((matriz[0][2]==1)&&(matriz[2][2]==1))
                                                                                                                                                opcion6=6;
                                                                                                        else if((matriz[0][0]==1)&&(matriz[0][2]==1)) //IA espacios filas.
                                                                                                                                                     opcion6=2;
                                                                                                             else if((matriz[1][0]==1)&&(matriz[1][2]==1))
                                                                                                                                                          opcion6=5;
                                                                                                                  else if((matriz[2][0]==1)&&(matriz[2][2]==1))
                                                                                                                                                               opcion6=8;   
                                                                                                                       else{
                                                                                                                            do{
                                                                                                                               opcion6=(1+rand()%(9-1+1));
                                                                                                                              }while((opcion6==opcion1)||(opcion6==opcion2)||(opcion6==opcion3)||(opcion6==opcion4)||(opcion6==opcion5));
                                                                                                                           }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
        switch(opcion6){
                        case(1): matriz[0][0]=2;
                                 break;
                        case(2): matriz[0][1]=2;
                                 break;
                        case(3): matriz[0][2]=2;
                                 break;
                        case(4): matriz[1][0]=2;
                                 break;
                        case(5): matriz[1][1]=2;
                                 break;
                        case(6): matriz[1][2]=2;
                                 break;
                        case(7): matriz[2][0]=2;
                                 break;
                        case(8): matriz[2][1]=2;
                                 break;
                        case(9): matriz[2][2]=2;
                                 break;     
                       }             
   
    printf("\nHa pasado el tercer turno de partida.");
    printf("\nEl tablero esta ahora mismo asi:"); //Muestra tablero.
    printf("\n\n\t%i %i %i", matriz[0][0], matriz[0][1], matriz[0][2]);
    printf("\n\t%i %i %i", matriz[1][0], matriz[1][1], matriz[1][2]);
    printf("\n\t%i %i %i", matriz[2][0], matriz[2][1], matriz[2][2]);
    printf("\n");
   
    do{
        printf("\nQue casilla seleccionas para mover?:");
        scanf("%i", &opcion5);
      }while(((opcion3<1)||(opcion3>9))||((opcion7==opcion2)||(opcion7==opcion1)||(opcion7==opcion3)||(opcion7==opcion4)||(opcion7==opcion5)||(opcion7==opcion6)));
   
        switch(opcion7){
                        case(1): matriz[0][0]=1;
                                 break;
                        case(2): matriz[0][1]=1;
                                 break;
                        case(3): matriz[0][2]=1;
                                 break;
                        case(4): matriz[1][0]=1;
                                 break;
                        case(5): matriz[1][1]=1;
                                 break;
                        case(6): matriz[1][2]=1;
                                 break;
                        case(7): matriz[2][0]=1;
                                 break;
                        case(8): matriz[2][1]=1;
                                 break;
                        case(9): matriz[2][2]=1;
                                 break;     
                       }   
   
    if((matriz[0][0]==1)&&(matriz[1][0]==1)) //IA columnas.
                                            opcion8=7;
    else if((matriz[0][1]==1)&&(matriz[1][1]==1))
                                                 opcion8=8;
         else if((matriz[0][2]==1)&&(matriz[1][2]==1))
                                                      opcion8=9;                 
              else if((matriz[1][0]==1)&&(matriz[2][0]==1))
                                                           opcion8=1;   
                   else if((matriz[1][1]==1)&&(matriz[2][1]==1))
                                                                opcion8=2;
                        else if((matriz[1][2]==1)&&(matriz[2][2]==1))
                                                                     opcion8=3;   
                             else if((matriz[0][0]==1)&&(matriz[0][1]==1)) //IA filas.
                                                                          opcion8=3;
                                  else if((matriz[1][0]==1)&&(matriz[1][1]==1))
                                                                               opcion8=6;             
                                       else if((matriz[2][0]==1)&&(matriz[2][1]==1))
                                                                                    opcion8=9;
                                            else if((matriz[0][1]==1)&&(matriz[0][2]==1))
                                                                                         opcion8=1;
                                                 else if((matriz[1][2]==1)&&(matriz[1][1]==1))
                                                                                              opcion8=4;                                         
                                                      else if((matriz[2][1]==1)&&(matriz[2][2]==1))
                                                                                                   opcion8=7;
                                                           else if((matriz[0][0]==1)&&(matriz[1][1]==1)) //IA diagonales.
                                                                                                        opcion8=9;       
                                                                else if((matriz[2][2]==1)&&(matriz[1][1]==1))
                                                                                                             opcion8=1;
                                                                     else if((matriz[0][2]==1)&&(matriz[1][1]==1))
                                                                                                                  opcion8=7;                                                                                   
                                                                          else if((matriz[2][0]==1)&&(matriz[1][1]==1))
                                                                                                                       opcion8=3;
                                                                               else if((matriz[0][0]==1)&&(matriz[2][2]==1)) //IA entre espacios diagonales.
                                                                                                                            opcion8=5;                                       
                                                                                    else if((matriz[0][2]==1)&&(matriz[2][0]==1))
                                                                                                                                 opcion8=5; 
                                                                                         else if((matriz[0][0]==1)&&(matriz[2][0]==1)) //IA entre espacios columnas.
                                                                                                                                      opcion8=4;
                                                                                              else if((matriz[0][1]==1)&&(matriz[2][1]==1))
                                                                                                                                           opcion8=5; 
                                                                                                   else if((matriz[0][2]==1)&&(matriz[2][2]==1))
                                                                                                                                                opcion8=6;
                                                                                                        else if((matriz[0][0]==1)&&(matriz[0][2]==1)) //IA espacios filas.
                                                                                                                                                     opcion8=2;
                                                                                                             else if((matriz[1][0]==1)&&(matriz[1][2]==1))
                                                                                                                                                          opcion8=5;
                                                                                                                  else if((matriz[2][0]==1)&&(matriz[2][2]==1))
                                                                                                                                                               opcion8=8;   
                                                                                                                       else{
                                                                                                                            do{
                                                                                                                               opcion8=(1+rand()%(9-1+1));
                                                                                                                              }while((opcion8==opcion1)||(opcion8==opcion2)||(opcion8==opcion3)||(opcion8==opcion4)||(opcion8==opcion5)||(opcion8==opcion6)||(opcion8==opcion7)); 
                                                                                                                           }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
        switch(opcion8){
                        case(1): matriz[0][0]=2;
                                 break;
                        case(2): matriz[0][1]=2;
                                 break;
                        case(3): matriz[0][2]=2;
                                 break;
                        case(4): matriz[1][0]=2;
                                 break;
                        case(5): matriz[1][1]=2;
                                 break;
                        case(6): matriz[1][2]=2;
                                 break;
                        case(7): matriz[2][0]=2;
                                 break;
                        case(8): matriz[2][1]=2;
                                 break;
                        case(9): matriz[2][2]=2;
                                 break;     
                       }
                       
    printf("\nHa pasado el cuarto turno de partida.");
    printf("\nEl tablero esta ahora mismo asi:"); //Muestra tablero.
    printf("\n\n\t%i %i %i", matriz[0][0], matriz[0][1], matriz[0][2]);
    printf("\n\t%i %i %i", matriz[1][0], matriz[1][1], matriz[1][2]);
    printf("\n\t%i %i %i", matriz[2][0], matriz[2][1], matriz[2][2]);
    printf("\n");               
   
    for(i=0; i<3; i++){ //Asignar automaticamente el valor a la casilla que sobra.
                       for(j=0; j<3; j++){
                                          if(matriz[i][j]==0)
                                                             matriz[i][j]=1;
                                         }
                      }
                     
    //Ver qioén ha ganado.                   
    if((matriz[0][0]==1)&&((matriz[0][0]==matriz[0][1])||(matriz[0][0]==matriz[0][2]))) //¿Victoria jugador 1?
                                                                                       printf("\n\tHAS GANADO.\n");
    else if((matriz[1][0]==1)&&((matriz[1][0]==matriz[1][1])||(matriz[1][0]==matriz[1][2])))
                                                                                       printf("\n\tHAS GANADO.\n");
    else if((matriz[2][0]==1)&&((matriz[2][0]==matriz[2][1])||(matriz[2][0]==matriz[2][2])))
                                                                                       printf("\n\tHAS GANADO.\n");                                                                                 
    else if((matriz[0][0]==1)&&((matriz[0][0]==matriz[1][0])||(matriz[0][0]==matriz[2][0])))
                                                                                       printf("\n\tHAS GANADO.\n");                                                                                   
    else if((matriz[0][1]==1)&&((matriz[0][1]==matriz[1][1])||(matriz[0][1]==matriz[2][1])))
                                                                                       printf("\n\tHAS GANADO.\n");                                                                                 
    else if((matriz[0][2]==1)&&((matriz[0][2]==matriz[1][2])||(matriz[0][2]==matriz[2][2])))
                                                                                       printf("\n\tHAS GANADO.\n");
    else if((matriz[0][0]==1)&&((matriz[0][0]==matriz[1][1])||(matriz[0][0]==matriz[2][2])))
                                                                                       printf("\n\tHAS GANADO.\n");                                                                                                                                                                     
    else if((matriz[2][0]==1)&&((matriz[0][0]==matriz[1][1])||(matriz[0][0]==matriz[0][2])))
                                                                                       printf("\n\tHAS GANADO.\n");                                                                                 
    else if((matriz[0][0]==2)&&((matriz[0][0]==matriz[0][1])||(matriz[0][0]==matriz[0][2])))
                                                                                       printf("\n\tORDENADOR GANA.\n");
    else if((matriz[1][0]==2)&&((matriz[1][0]==matriz[1][1])||(matriz[1][0]==matriz[1][2])))
                                                                                       printf("\n\tORDENADOR GANA.\n");
    else if((matriz[2][0]==2)&&((matriz[2][0]==matriz[2][1])||(matriz[2][0]==matriz[2][2])))
                                                                                       printf("\n\tORDENADOR GANA.\n");                                                                                   
    else if((matriz[0][0]==2)&&((matriz[0][0]==matriz[1][0])||(matriz[0][0]==matriz[2][0])))
                                                                                       printf("\n\tORDENADOR GANA.\n");                                                                                   
    else if((matriz[0][1]==2)&&((matriz[0][1]==matriz[1][1])||(matriz[0][1]==matriz[2][1])))
                                                                                       printf("\n\tORDENADOR GANA.\n");                                                                                 
    else if((matriz[0][2]==2)&&((matriz[0][2]==matriz[1][2])||(matriz[0][2]==matriz[2][2])))
                                                                                       printf("\n\tORDENADOR GANA.\n");
    else if((matriz[0][0]==2)&&((matriz[0][0]==matriz[1][1])||(matriz[0][0]==matriz[2][2])))
                                                                                       printf("\n\tORDENADOR GANA.\n");                                                                                                                                                                     
    else if((matriz[2][0]==2)&&((matriz[0][0]==matriz[1][1])||(matriz[0][0]==matriz[0][2])))
                                                                                       printf("\n\tORDENADOR GANA.\n"); 
    else
                                                                                       printf("\n\tNADIE GANA.\n");
                                                                                       
    printf("\n\n\t*****************\n\tCREADO POR ANULED\n\t*****************\a\a\a\a\a\n");                                                                                                                                                                                                                                                     
                                                                                                         
   
system ("pause");

return 0;

}


Creo que el problema se centra en este else, a ver si me podéis echar una mano, gracias por vuestro tiempo y espero que os guste el 3 en raya, si tenéis sugerencias para mejorarlo decidlo por favor.

Código:
else{
                                                                                                                            do{
                                                                                                                               opcion6=(1+rand()%(9-1+1));
                                                                                                                              }while((opcion6==opcion1)||(opcion6==opcion2)||(opcion6==opcion3)||(opcion6==opcion4)||(opcion6==opcion5));
                                                                                                                           }
[/code]
Volver arriba
leosan



Registrado: 19 Abr 2012
Mensajes: 730
Ubicación: GRAN CANARIA

MensajePublicado: 25/11/2012 4:27 am
Título:

Anuled escribió:
ya terminé el código y me ha surgido otro problema: la inteligencia artificial la he diseñado para que siempre que hayan dos fichas alineadas, el ordenador rellene el tercer hueco para evitar que el usuario gane. Si el usuario no pone 2 fichas alineadas, por ejemplo, la partida esta asi

- 1 -
2 - -
- - 1

y le tocase al ordenador poner un 2. no sabria donde ponerlo. Lo puse para que lo pusiese con un rand, pero no va, se queda sin mover

Pues a mí si me mueve la ficha en ese caso, otra cosa sería si debe ser aleatorio ese movimiento o no, ya que el movimiento de la máquina a la casilla 3 sería interesante porque le "fastidia" al usuario las linea primera, última, la última linea y la diagonal secundaria..y si elige la casilla 7 gana ya que el usuario tendría que mover a la casilla 1, la máquina lo haría a la 5, el usuario tendría que ir a la 6 y la máquina a 3 y gana la máquina.
Saluditos!.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7520
Ubicación: Mexico

MensajePublicado: 25/11/2012 8:17 am
Título:

Si apenas empiezas tu aprendizaje en el lenguaje C te recomendaría que dejaras el desarrollo de programas ligeramente complicados (como este) para después. De no hacerlo te vas a meter en problemas realizando operaciones de una forma mas larga y complicada.

Por ejemplo en el programa tienes varios bloques como este:
Código:
switch (opcion1){
case (1) :
   matriz[0][0] = 1;
   break;
case (2) :
   matriz[0][1] = 1;
   break;
case (3) :
   matriz[0][2] = 1;
   break;
case (4) :
   matriz[1][0] = 1;
   break;
case (5) :
   matriz[1][1] = 1;
   break;
case (6) :
   matriz[1][2] = 1;
   break;
case (7) :
   matriz[2][0] = 1;
   break;
case (8) :
   matriz[2][1] = 1;
   break;
case (9) :
   matriz[2][2] = 1;
   break;
}

Para empezar se deben evitar nombres como "opcion1", "opcion2". etc. ya que no indican el uso de la variable, mas todavía, el mismo uso sugiere utilizar un array para almacenar todos los valores. También hay que eliminar los paréntesis de las literales en "case (1) :", "case (2) :", etc. ya que no son necesarios.

Y ese bloque si lo revisas con cuidado se puede reducir a:
Código:
matriz[(opcion1 - 1) / 3][(opcion1 - 1) % 3] = 1;

Mismo caso con todos los bloques similares.

Y los turnos se deben colocar en un bucle: primero el turno inicial y a continuación iteras un máximo de cuatro veces (ocho jugadas, la mitad para cada jugador). Para verificar si alguien gano puedes colocar el proceso en una función.

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
Anuled



Registrado: 24 Oct 2012
Mensajes: 21

MensajePublicado: 25/11/2012 9:45 am
Título:

Muchas gracias por los consejos y las correcciones. Leosna tiene razón, la IA se debe mejorar mucho, y rir tiene razón respecto a que un programa asi se me viene grande. Por ahora lo dejaré apartado, espero coger más práctica en C, o acabar mi formacion académica y lo retomaré pero desde 0, para hacerlo lo más optimizado posible. Un saludo y gracias Smile
Volver arriba
Masakre



Registrado: 06 Jun 2012
Mensajes: 245

MensajePublicado: 18/12/2012 11:58 am
Título:

Bueno, al ver este tema hace unas semanas me animé por crear mi versión del juego de "3 en raya", en consola también.
Como estuve en exámenes, ya casi me olvidaba de comentarlo acá jeje.

Estuve probando los etiquetas spoiler y hide, pero al parecer no están disponibles.
Entonces he buscado un sitio donde subir el código y me encontré con pastebin:
Cita:
http://pastebin.com/P89kseKF


Espero te sirva de algo Anuled.
Volver arriba
untio



Registrado: 17 Sep 2008
Mensajes: 380
Ubicación: MICA S.A.

MensajePublicado: 28/12/2012 7:40 am
Título:

Hola,

Perdonadme si me paso de la raya, pero sólo quiero deciros que en los juegos perfectos (cuando se saben todos los posibles movimientos), se suele implementar un árbol maximin (ó minimax).

Hay varias páginas que explican el algoritmo. Por ejemplo:

http://ai-depot.com/articles/minimax-explained/

ó aquí:

http://beej.us/blog/data/minimax/

De nuevo, perdonadme si no estoy en lo cierto.

Feliz año.
_________________
Hago algo muy raro: primero leo las instrucciones.
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com