Juego Gato: definir ganador y repetir coordenada

Iniciado por daichi21, 30 Noviembre 2016, 15:31 PM

0 Miembros y 1 Visitante están viendo este tema.

daichi21

Hola! tengo este proyecto de crear un juego gato. Tengo listo lo de ir seleccionando casillas, nombre de jugador, etc. Lo que se me dificulta o falta es cómo validar al ganador, o sea, en qué parte o cómo o con qué hacer la comparación de casillas para definir al ganador, tenía una idea con un if, pero no me funciona. También en el momento en que el jugador seleccione una casilla ocupada, lo regrese al paso en donde selecciona casilla, había pensado en un do-while con un switch, pero tampoco funciona. si me pudieran ayudar gracias, esto es lo que llevo:
#include <stdio.h>
#include <stdlib.h>

char gato[3][3];

struct jugador{
char nombre[50]
}j1,j2;

int main (){
int x, y, i;
printf("Jugador X ingresa tu nombre:");
scanf("%s", &j1);
printf("Jugador O ingresa tu nombre:");
scanf("%s", &j2);
system("cls");
for(i=0; i<100; i++){
    printf("*****GATO*****\n");
printf("|%c| |%c| |%c|\n", gato[0][0], gato[0][1], gato[0][2]);
printf("-----------\n");
printf("|%c| |%c| |%c|\n", gato[1][0], gato[1][1], gato[1][2]);
printf("-----------\n");
printf("|%c| |%c| |%c|\n", gato[2][0], gato[2][1], gato[2][2]);
    if(i%2!=0){
        printf("%s, elige tu casilla en coordenadas x y y: \n", &j2);
printf("Coordenada x:\n");
scanf("%d", &x);
printf("\n coordenada y:\n");
scanf("%d", &y);
y=y-1;
x=x-1;
if (gato[y][x]==' ',gato[y][x]==0){
    gato[y][x]= 'O';}
    else{
        printf("elige otra casilla\n");
        system("pause");
    }
system("cls");
    }
    else{
        printf("%s, elige tu casilla en coordenadas x y y: \n", &j1);
printf("Coordenada x:\n");
scanf("%d", &x);
printf("\n coordenada y:\n");
scanf("%d", &y);
y=y-1;
x=x-1;
if (gato[y][x]==' ',gato[y][x]==0){
    gato[y][x]= 'X';
    }
    else{
        printf("elige otra casilla\n");
        system("pause");
    }
    system("cls");
}
}
printf("Ganó el jugador");
system("pause");
return 0;
}


MOD: etiqueta GeSHi.


KINGARZA

#2
Hola que tal, hace poco me encargaron en el colegio un proyecto y opte por hacer un gato, eso de usar coordenadas (al momento de ingresarlas) en lo personal es un poco incomodo, espero y te ayude:
Código (cpp) [Seleccionar]

/**
   Alumno: Luis Eduardo Garza Medina
   programa: Juego
   Nombre: Gato

   El juego posee un menu amigable con el usuario, entendible
   para cualquier usuario.

   para el menu solo se usan las teclas: 'i', 'e' y 's';
   y para jugar son los numeros, donde para acceder a una casilla debe presionarse
   el siguiente numero:

   1 2 3
   4 5 6
   7 8 9

   el jugador uno es representado por un '1' equivalente a X
   el jugador dos es representado por un '2' equivalente a O

   Al finalizar el programa, este indica los resultados finales de cada jugador.
*/
#include <stdio.h>
#include<windows.h>
#define uno    gato[0][0]
#define dos    gato[0][1]
#define tres   gato[0][2]
#define cuatro gato[1][0]
#define cinco  gato[1][1]
#define seis   gato[1][2]
#define siete  gato[2][0]
#define ocho   gato[2][1]
#define nueve  gato[2][2]
//el compilador sustituye la cadena en #define
short gato[3][3] ={{0,0,0}, //definimos matriz
                  {0,0,0},
                  {0,0,0}};
short won[2]; //definimos array

int verifica(){ //comprobamos si un jugador ya ganó
   if(uno == dos && dos == tres)
       return uno;
   if(uno == cuatro && cuatro == siete)
       return uno;
   if(uno == cinco && cinco == nueve)
       return uno;
   if(tres == cinco && cinco == siete)
       return tres;
   if(tres == seis && seis == nueve)
       return tres;
   if(cuatro == cinco && cinco == seis)
       return cuatro;
   if(siete == ocho && ocho == nueve)
       return siete;
   if(dos == cinco && cinco == ocho)
       return dos;
   return 0;
}

void mostrar(){ //ponemos en pantalla el gato
   system("cls");
   for(int i = 0; i < 3; i++){
       for(int j = 0; j < 3; j++)
           if(j < 2)
               printf("%d|", gato[i][j]);
           else
               printf("%d", gato[i][j]);
       if(i < 2)
           printf("\n-----\n");
       else
           printf("\n");
   }
}

void instrucciones(){ //funcion que muestra las instrucciones del jueo
   system("cls");
   printf("Los controles son los numeros del 1 al 9, por ejemplo:\n\n");
   printf("para acceder a la casilla superior izquierda se presiona 1\n\n");
   printf("para acceder a la casilla inferorior intermedia se presiona 8\n\n");
   system("pause");
}

int main (){
   short numero, k;
   char opcion;
   while(1){//while infinito
       system("cls"); //limpia la pantalla
       printf("JUEGO DEL GATO\n\n");
       printf("Menu\n\n");
       printf("presiona 'i' para ver instrucciones:\n");
       printf("Presiona 'e' para comenzar\n");
       printf("Presiona 's' para salir\n\n");
       scanf("%s", &opcion);
       switch(opcion){
           case 'i':
               instrucciones();
           break;
           case 'e':
               memset(gato, 0, sizeof(gato));//inicializa la matriz con valores de 0
               for(k = 1; k <= 9; k++){ //este for se repite 9 veces porque son 9 casillas
                   mostrar();
                   scanf("%d", &numero);
                   if(numero == 1)
                       if(k % 2 == 0) //la operacion del modulo ayuda a determinar de quien es el turno
                           uno = 2;
                       else
                           uno = 1;
                   else if(numero == 2)
                       if(k % 2 == 0)
                           dos = 2;
                       else
                           dos = 1;
                   else if(numero == 3)
                       if(k % 2 == 0)
                           tres = 2;
                       else
                           tres = 1;
                   else if(numero == 4)
                       if(k % 2 == 0)
                           cuatro = 2;
                       else
                           cuatro = 1;
                   else if(numero == 5)
                       if(k % 2 == 0)
                           cinco = 2;
                       else
                           cinco = 1;
                   else if(numero == 6)
                       if(k % 2 == 0)
                           seis = 2;
                       else
                           seis = 1;
                   else if(numero == 7)
                       if(k % 2 == 0)
                           siete = 2;
                       else
                           siete = 1;
                   else if(numero == 8)
                       if(k % 2 == 0)
                           ocho = 2;
                       else
                           ocho = 1;
                   else if(numero == 9)
                       if(k % 2 == 0)
                           nueve = 2;
                       else
                           nueve = 1;
                   int ganador = verifica();//le asignamos a ganador el valor que retorne la funcion verifica
                   if(ganador > 0){
                       mostrar();
                       printf("\nEl jugador %d es el GANADOR", ganador);
                       won[ganador - 1]++; //aumentamos en 1 el contador del ganador
                       break;
                   }
               }
               system("pause>null");
           break;
           case 's':
               system("cls");
               printf("El jugador 1 gano: %d partidas\n", won[0]);
               printf("El jugador 2 gano: %d partidas\n", won[1]);
               printf("Gracias por jugar!\n\n");
               return 0;
           break;
           default:
           break;
       }
   }
}