elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Juego tres en raya
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Juego tres en raya  (Leído 3,299 veces)
carl221

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Juego tres en raya
« en: 15 Mayo 2014, 21:47 pm »

Hola tengo que entregar el juego para este domingo y aun no sé porque me da error al devolver las estadísiticas de las partidas.

Seríais muy amables si me echarais una mano en el programa al menos para que devuelva los contadores de partida correctamente. Tienen que ser justamente esas funciones en el proyecto que he puesto,está en catalán pero supongo que no es problema.

El problema está a la hora de devolver las partidas ganadas y empatadas me devuelve siempre cero y antes me devolvía basura, no sé sacar el error y eso que he escrito yo el código.

Gracias por adelantado añado el código igual está un poco desordenado pero debe ser con esas funciones pasadas por referencia.

Código:
//Llibreries
 
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
#include <windows.h>
 
//Defines per fer servir el tipus bool
 
#define bool int
#define true 1
#define false 2
 
 
 
//PROJECTE JOC TRES EN RATLLA.
/*
    1.Establir  variables per inici partida : startgame()
    2.Turn jugador 1 jugador1()
    3.Turn jugador 2 jugador2()
    4.Marcacasella marcacasella() comprova si es correcte la casella.
    5.Ganarempatarperdre comprobar()
    6.Tornar a jugar tornarjugar().
    7.Tornar les estadístiques del joc estadistiques()
*/
 
void startgame(char caselles[9],bool *jugador,int *error,int *empat,int *guanyar,char *c1,char *c2,
               char *c3,char *c4,char *c5,char *c6,char *c7,char *c8,
               char *c9,char *tirada,char *marca,char *resposta;);
 
 
void jugador1(char *marca,bool *jugador,char *tirada,int *error,char *c1,char *c2,char *c3,char *c4,char *c5,char *c6,char *c7,char *c8,char *c9);
 
void jugador2(char *marca,bool *jugador,char *tirada,int *error,char *c1,char *c2,char *c3,char *c4,char *c5,char *c6,char *c7,char *c8,char *c9);
 
void marcacasella(char *marca,char *tirada,int *error,char *c1,char *c2,
                  char *c3,char *c4,char *c5,char *c6,char *c7,char *c8,
                  char *c9);
 
 
void guanyarempatarperdre(char *marca,bool *jugador,char *tirada,int *error,char *c1,char *c2,char *c3,char *c4,char *c5,char *c6,char *c7,char *c8,char *c9,int *guanyar,int *empat);
 
 
 
void tornarjugar(bool *jugador,int *error,int *empat,int *guanyar,char *c1,char *c2,
               char *c3,char *c4,char *c5,char *c6,char *c7,char *c8,
               char *c9,char *tirada,char *marca,char *resposta);
 
 
void estadistiques(int *jug1,int *jug2,int *empatades);
 
 
 
//Declaracio variables main
 
 
int main (void){
 
 
        bool jugador;
        int error=0,empat=0,guanyar=0;
        char c1,c2,c3,c4,c5,c6,c7,c8,c9,tirada,marca,resposta,caselles[9];
        int jug1=0,jug2=0,empatades=0;
 
 
startgame(caselles,&jugador,&error,&empat,&guanyar,&c1,&c2,&c3,&c4,&c5,&c6,&c7,&c8,&c9,&tirada,&marca,&resposta);
 
 
    do{
 
 
 
 
 
 
                  error=1;
 
                  system("cls");
 
 
        printf("\n \n \n");
 
        printf("\n\n\t\t\t");        printf("JOC TRES EN RATLLA\n\n\n");
        printf("\t\t\t");            printf("\n \t\t\t\t %c | %c | %c\n",c1,c2,c3);
        printf("\t\t\t\t");          printf("---+---+---\n");
        printf("\t\t\t\t");          printf("\n \t\t\t\t %c | %c | %c\n",c4,c5,c6);
        printf("\t\t\t\t");          printf("---+---+---\n");
        printf("\t\t\t\t");          printf("\n \t\t\t\t %c | %c | %c\n\n",c7,c8,c9);
 
 
        if(guanyar==0 && empat==0)
 
        {
 
            jugador=true;
            jugador1(&marca,&jugador,&tirada,&error,&c1,&c2,&c3,&c4,&c5,&c6,&c7,&c8,&c9);
 
 
        }
 
        system("cls");
 
        guanyarempatarperdre(&marca,&jugador,&tirada,&error,&c1,&c2,&c3,&c4,&c5,&c6,&c7,&c8,&c9,&empat,&guanyar);
 
 
        printf("\n \n \n");
 
        printf("\n\n\t\t\t");        printf("JOC TRES EN RATLLA\n\n\n");
 
        printf("\t\t\t");            printf("\n \t\t\t\t %c | %c | %c\n",c1,c2,c3);
        printf("\t\t\t\t");          printf("---+---+---\n");
        printf("\t\t\t\t");          printf("\n \t\t\t\t %c | %c | %c\n",c4,c5,c6);
        printf("\t\t\t\t");          printf("---+---+---\n");
        printf("\t\t\t\t");          printf("\n \t\t\t\t %c | %c | %c\n\n",c7,c8,c9);
 
 
        if(guanyar==0 && empat==0 )
 
        {
 
            jugador=false;
            jugador2(&marca,&jugador,&tirada,&error,&c1,&c2,&c3,&c4,&c5,&c6,&c7,&c8,&c9);
 
        }
 
        guanyarempatarperdre(&marca,&jugador,&tirada,&error,&c1,&c2,&c3,&c4,&c5,&c6,&c7,&c8,&c9,&empat,&guanyar);
 
 
        system("cls");
 
 
        printf("\n \n \n");
 
        printf("\n\n\t\t\t");        printf("JOC TRES EN RATLLA\n\n\n");
        printf("\t\t\t");            printf("\n \t\t\t\t %c | %c | %c\n",c1,c2,c3);
        printf("\t\t\t\t");          printf("---+---+---\n");
        printf("\t\t\t\t");          printf("\n \t\t\t\t %c | %c | %c\n",c4,c5,c6);
        printf("\t\t\t\t");          printf("---+---+---\n");
        printf("\t\t\t\t");          printf("\n \t\t\t\t %c | %c | %c\n\n",c7,c8,c9);
 
       // guanyarempatarperdre(&marca,&jugador,&tirada,&error,&c1,&c2,&c3,&c4,&c5,&c6,&c7,&c8,&c9,&empat,&guanyar);
 
 
 
 
 
 
        if(guanyar==1 || empat==1){
 
            if(jugador==true && guanyar>0 && empat<=0) jug1++;
            if(jugador==false && guanyar>0 && empat<=0) jug2++;
            if(empat>0) empatades++;
 
            estadistiques(&jug1,&jug2,&empatades);
 
            tornarjugar(&jugador,&error,&empat,&guanyar,&c1,&c2,&c3,&c4,&c5,&c6,&c7,&c8,&c9,&tirada,&marca,&resposta);
 
 
        }
 
 
 
 
 
    }while(resposta=='S'|| resposta=='s');
 
system("cls");
 
//gotoxy(20,20);
printf("\n\n\n\n\t\t\tJoc finalitzat\n");
system("pause");
 
return 0;
 
 
 
}
 
 
 
 
void startgame(char caselles[9],bool *jugador,int *error,int *empat,int *guanyar,char *c1,char *c2,
               char *c3,char *c4,char *c5,char *c6,char *c7,char *c8,
               char *c9,char *tirada,char *marca,char *resposta)
 
{
 
 
 
        *c1='1';
        *c2='2';
        *c3='3';
        *c4='4';
        *c5='5';
        *c6='6';
        *c7='7';
        *c8='8';
        *c9='9';
        *resposta='S';
        *jugador=true;
        *empat=0;
        *guanyar=0;
        *error=0;
 
 
 
       //caselles[9]={'0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9'};
 
 
 
 
 
};
 
 
 
void jugador1(char *marca,bool *jugador,char *tirada,int *error,char *c1,char *c2,char *c3,char *c4,char *c5,char *c6,char *c7,char *c8,char *c9)
 
{
 
    *marca='X';
    printf("Torn del jugador 1\n ");
    printf("\nEscriu la possicio on vols la marca: ");
 
    fflush(stdin);
 
    scanf("%c",&*tirada);
 
 
    marcacasella(&*marca,&*tirada,&*error,&*c1,&*c2,&*c3,&*c4,&*c5,&*c6,&*c7,&*c8,&*c9);
 
while(*error==2){
    system("cls");
        printf("\n \n \n");
 
        printf("\n\n\t\t\t");        printf("JOC TRES EN RATLLA\n\n\n");
        printf("\t\t\t");            printf("\n \t\t\t\t %c | %c | %c\n",*c1,*c2,*c3);
        printf("\t\t\t\t");          printf("---+---+---\n");
        printf("\t\t\t\t");          printf("\n \t\t\t\t %c | %c | %c\n",*c4,*c5,*c6);
        printf("\t\t\t\t");          printf("---+---+---\n");
        printf("\t\t\t\t");          printf("\n \t\t\t\t %c | %c | %c\n\n",*c7,*c8,*c9);
    *marca='X';
    printf("Torn del jugador 1\n ");
    printf("\nEscriu la possició on vols la marca: ");
    //while(error>)
    fflush(stdin);
 
    scanf("%c",&*tirada);
 
 
    marcacasella(&*marca,&*tirada,&*error,&*c1,&*c2,&*c3,&*c4,&*c5,&*c6,&*c7,&*c8,&*c9);
}
 
};
 
 
void jugador2(char *marca,bool *jugador,char *tirada,int *error,char *c1,char *c2,char *c3,char *c4,char *c5,char *c6,char *c7,char *c8,char *c9)
 
{
    *marca='O';
    printf("Turno del Jugador 2\n");
    printf("\nEscriu la possicio on vols la marca: ");
 
    fflush(stdin);
 
    scanf("%c",&*tirada);
 
    marcacasella(&*marca,&*tirada,&*error,&*c1,&*c2,&*c3,&*c4,&*c5,&*c6,&*c7,&*c8,&*c9);
 
    while(*error==2){
        system("cls");
        printf("\n\n\t\t\t");        printf("JOC TRES EN RATLLA\n\n\n");
        printf("\t\t\t");            printf("\n \t\t\t\t %c | %c | %c\n",*c1,*c2,*c3);
        printf("\t\t\t\t");          printf("---+---+---\n");
        printf("\t\t\t\t");          printf("\n \t\t\t\t %c | %c | %c\n",*c4,*c5,*c6);
        printf("\t\t\t\t");          printf("---+---+---\n");
        printf("\t\t\t\t");          printf("\n \t\t\t\t %c | %c | %c\n\n",*c7,*c8,*c9);
        *marca='O';
        printf("Turno del Jugador 2\n");
        printf("\nEscriu la possició on vols la marca: ");
 
        fflush(stdin);
 
        scanf("%c",&*tirada);
 
        marcacasella(&*marca,&*tirada,&*error,&*c1,&*c2,&*c3,&*c4,&*c5,&*c6,&*c7,&*c8,&*c9);
 
    }
 
}
 
void marcacasella(char *marca,char *tirada,int *error,char *c1,char *c2,
                  char *c3,char *c4,char *c5,char *c6,char *c7,char *c8,
                  char *c9)
{
 
 
 
 
              if (*tirada=='1' && *c1=='1') {*c1=*marca;}
              else if (*tirada=='2' && *c2=='2') {*c2=*marca; *error=0;}
              else if (*tirada=='3' && *c3=='3') {*c3=*marca; *error=0;}
              else if (*tirada=='4' && *c4=='4') {*c4=*marca; *error=0;}
              else if (*tirada=='5' && *c5=='5') {*c5=*marca; *error=0;}
              else if (*tirada=='6' && *c6=='6') {*c6=*marca; *error=0;}
              else if (*tirada=='7' && *c7=='7') {*c7=*marca; *error=0;}
              else if (*tirada=='8' && *c8=='8') {*c8=*marca; *error=0;}
              else if (*tirada=='9' && *c9=='9') {*c9=*marca; *error=0;}
              else {
 
                    printf("Error! Moviment invalid, marca una altre casella\n");
                    *error=2;
                    system("pause");
              }
 
 
 
}
 
 
void guanyarempatarperdre(char *marca,bool *jugador,char *tirada,int *error,char *c1,char *c2,char *c3,char *c4,char *c5,char *c6,char *c7,char *c8,char *c9,int *guanyar,int *empat)
{
 
          if(*c1=='X'||*c1=='O')
 
          {
 
            if(*c2==*c1&&*c3==*c1)
             {
              *guanyar=1;
             }
 
            if(c4==c1&&c7==c1)
             {
              *guanyar=1;
             }
          }
 
          if(*c5=='X'||*c5=='O')
          {
                   if (*c1 == *c5 && *c9 == *c5)
                           {*guanyar=1;}
                   if (*c2 == *c5 && *c8 == *c5)
                           {*guanyar=1;}
                   if (*c4 == *c5 && *c6 == *c5)
                           {*guanyar=1;}
                   if (*c3 == *c5 && *c7 == *c5)
                           {*guanyar=1;}
          }
 
          if(*c9=='X'||*c9=='O')
          {
                     if (*c6 == *c9 && *c3 == *c9)
                             {*guanyar=1;}
                     if (*c7 == *c9 && *c8 == *c9)
                            {*guanyar=1;}
          }
 
          if ((*c1!= '1' && *c2 != '2' && *c3 != '3' &&
              *c4 != '4' && *c5 != '5' && *c6 != '6' &&
              *c7 != '7' && *c8 != '8' && *c9 != '9') &&
              *guanyar == 0)
          {
              *empat=1;
          }
 
          if (*guanyar==1||*empat==1)
          {
              system("cls");
              if (*guanyar==1)
              {
 
                  printf("\n \n \n");
 
                  printf("\n\n\t\t\t");printf("JUGADOR: %d GUANYA!\n\n",*jugador);
                  printf("\t\t\t\t");   printf("\n \t\t\t\t %c | %c | %c\n",*c1,*c2,*c3);
                  printf("\t\t\t\t");   printf("---+---+---\n");
                  printf("\t\t\t\t");   printf("\n \t\t\t\t %c | %c | %c\n",*c4,*c5,*c6);
                  printf("\t\t\t\t");   printf("---+---+---\n");
                  printf("\t\t\t\t");   printf("\n \t\t\t\t %c | %c | %c\n\n",*c7,*c8,*c9);
                  system("pause");
                  system("cls");
              }
 
              if (*empat==1)
              {
                  printf("\n \n \n");
 
                  printf("\n\n\t\t\t");
                  printf("EMPAT!\n",*jugador);
                  printf("\t\t\t\t");printf(" %c | %c | %c\n",*c1,*c2,*c3);
                  printf("\t\t\t\t");printf("---+---+---\n");
                  printf("\t\t\t\t");printf(" %c | %c | %c\n",*c4,*c5,*c6);
                  printf("\t\t\t\t");printf("---+---+---\n");
                  printf("\t\t\t\t");printf(" %c | %c | %c\n",*c7,*c8,*c9);
                  system("pause");
                  system("cls");
              }
 
 
 
 
          }
 
}
 
void tornarjugar(bool *jugador,int *error,int *empat,int *guanyar,char *c1,char *c2,
               char *c3,char *c4,char *c5,char *c6,char *c7,char *c8,
               char *c9,char *tirada,char *marca,char *resposta){
 
   printf("Vol tornar a jugar?: SI/NO \n");
 
              fflush(stdin);
 
              scanf("%c",*&resposta);
 
              if (*resposta=='S'||*resposta=='s')
              {
                      *empat=0;
                      if(*jugador==true)*jugador=false;
                      if(*jugador==false)*jugador=true;
                      if(*guanyar>0)*guanyar=0;
                      *c1='1';
                      *c2='2';
                      *c3='3';
                      *c4='4';
                      *c5='5';
                      *c6='6';
                      *c7='7';
                      *c8='8';
                      *c9='9';
              }
 
          if(*error==1)
          {
              if (*jugador==true)
              {
               *jugador=false;
              }
              else
              {
               *jugador=true;
              }
          }
 
 
 
}
 
 
void estadistiques(int *jug1,int *jug2,int *empatades){
 
 
printf("\t\t\tEstadistiques\n\n");
 
printf("\nEl jugador 1 porta guanyades %d partides \n ",*jug1);
 
printf("\nEl jugador 2 porta guanyades %d partides \n ",*jug2);
 
printf("\n S'han empatat %d partides\n",*empatades);
 
}


En línea

crazykenny


Desconectado Desconectado

Mensajes: 4.223



Ver Perfil WWW
Re: Juego tres en raya
« Respuesta #1 en: 15 Mayo 2014, 22:16 pm »

Hola, carl221; reconozco que yo entiendo de programacion se "lo basico", pero he visto variables en plan referencia para partidas ganadas/empatadas; entonces, creo que lo mas simple seria aumentar el valor de estas en 1 dependiendo de como acabe la partida.
Por otra parte, y, en lo del catalan; veras, no has de preocuparte porque, bueno, yo y "no me gusta utilizar la expresion" mas de uno en este foro entendemos el catalan debido a que vivimos en Cataluña (aunque en mi caso otra cosa es que lo utilice normalmente o como norma).
No obstante, creo que no es el caso de otros usuarios que viven fuera de Cataluña (ya sea dentro o fuera de España), aunque tampoco hay problemas por hablar en catalan, creo recordar.
Muchas gracias por vuestra atencion.
Saludos.


En línea

A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
https://informaticayotrostemas.blogspot.com/

Mi canal de Youtube:

https://www.youtube.com/@crazykenny
carl221

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Juego tres en raya
« Respuesta #2 en: 15 Mayo 2014, 22:29 pm »

Está puesto para que aumente la variable dependiendo de si está ganada o perdida aumenta el contador de jug1 o jug2 cuando sale de la funcion "guanyarempatarperdre".

Luego en el main mira cual es el jugador actual y le sube el contador pero al sacar por pantalla me sale siempre 0 @_@ estoy desquiciado pq no me sale y no sé ver dnd está el problema en realidad no tiene nada solamente mira si el jugador es tal y está ganada y no está empatada suma al jugador y con el otro igual , si está empatada suma en empatada.
En línea

carl221

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Juego tres en raya
« Respuesta #3 en: 15 Mayo 2014, 22:34 pm »

Las variables para las puntuaciones son:

guanyar --> booleano que dice si esa partida está ganada o perdida.

empat --> booleano que dice si esta empatada.

jug1--> registro de partidas ganadas del jugador 1

jug2-->registro de partidas ganadas del jugador 2

empatades--> registro de partidas empatadas.

Al acabar la partida vuelve las variables guanyar y empat a 0 para jugar otra partida.

Las variables jug1 , jug2 y empatades se mantienen siempre para devolver las estadisiticas de juego.

Es solamente tres ifs y poco más por lo demás el juego funciona correctamente.
 
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Juego tres en raya
« Respuesta #4 en: 16 Mayo 2014, 00:13 am »

Con esto arreglas el problema del contador de ganadas .....pero tendrás que solucionar el nuevo que aparece en las partidas empatadas:

Código
  1. if(guanyar==1 || empat==1){
  2.            if(jugador==true && guanyar>=0  || empat<=0) jug1++;
  3.            if(jugador==false && guanyar>=0 || empat<=0) jug2++;

¡¡¡¡ Saluditos! ..... !!!!


En línea

carl221

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Juego tres en raya
« Respuesta #5 en: 16 Mayo 2014, 01:27 am »

Estamos con lo mismo hehe me las cuenta como empatadas, a ver si pillo el error. Muchas gracias igualmente.
En línea

MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: Juego tres en raya
« Respuesta #6 en: 18 Mayo 2014, 22:21 pm »

Estamos con lo mismo hehe me las cuenta como empatadas, a ver si pillo el error. Muchas gracias igualmente.

El código es un poco difícil de entender  :huh:

De verdad es necesario esto?

Código
  1. void jugador1(char *marca,bool *jugador,char *tirada,int *error,char *c1,char *c2,char *c3,char *c4,char *c5,char *c6,char *c7,char *c8,char *c9);

c1, c2, c3, etc son las columnas? No te sirve algo así?


Código
  1. #define FILAS    9
  2. #define COLUMNAS 9
  3.  
  4.  
  5. char Tablero[FILAS][COLUMNAS];

Y vas recorriendo la matriz con i y j, te ahorras muchas variables...  :silbar:

De todas formas, si solo necesitas saber en que falla, puedes tirar de debugger y ver cuando y donde falla  :rolleyes:

Saludos

En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
tres en raya con integrdos
Electrónica
resistron 2 3,016 Último mensaje 24 Junio 2007, 21:24 pm
por resistron
Problema en el tres en Raya
Java
H4CKO_R 4 3,597 Último mensaje 31 Diciembre 2008, 20:56 pm
por Castiblanco
Aporte - Tres en Raya (con IA)
Programación Visual Basic
rob1104 9 9,827 Último mensaje 9 Marzo 2009, 22:35 pm
por peib0l
juego tres en raya
Java
bengy 2 14,361 Último mensaje 31 Octubre 2011, 08:17 am
por Debci
Juego de Tres en raya C#
.NET (C#, VB.NET, ASP)
AlexPro 4 15,886 Último mensaje 4 Julio 2012, 17:31 pm
por AlexPro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines