#include <conio.h>#include <stdio.h>char jugador1(char n1,char n2,char n3,char n4,char n5,char n6,char n7,char n8,char n9) //funcion verificadora para saber si el jugador gana{ int r1=0; if((n1=='x')&&(n2=='x')&&(n3=='x'))r1=1; if((n4=='x')&&(n5=='x')&&(n6=='x'))r1=1; if((n7=='x')&&(n8=='x')&&(n9=='x'))r1=1; if((n1=='x')&&(n5=='x')&&(n9=='x'))r1=1; if((n3=='x')&&(n5=='x')&&(n7=='x'))r1=1; if((n1=='x')&&(n4=='x')&&(n7=='x'))r1=1; if((n2=='x')&&(n5=='x')&&(n8=='x'))r1=1; if((n3=='x')&&(n6=='x')&&(n9=='x'))r1=1; return r1; //se devuelve a r1}char jugador2(char n1,char n2,char n3,char n4,char n5,char n6,char n7,char n8,char n9) //funcion verificadora para saber si el jugador gana{ int r2=0; if((n1=='o')&&(n2=='o')&&(n3=='o'))r2=2; if((n4=='o')&&(n5=='o')&&(n6=='o'))r2=2; if((n7=='o')&&(n8=='o')&&(n9=='o'))r2=2; if((n1=='o')&&(n5=='o')&&(n9=='o'))r2=2; if((n3=='o')&&(n5=='o')&&(n7=='o'))r2=2; if((n1=='o')&&(n4=='o')&&(n7=='o'))r2=2; if((n2=='o')&&(n5=='o')&&(n8=='o'))r2=2; if((n3=='o')&&(n6=='o')&&(n9=='o'))r2=2; return r2;}void error(int e){ if(e==1)printf("Numero ingresado es menor o igual a cero\n"); if(e==2)printf("Numero ingresado es mayor o igual a diez\n"); if(e==3)printf("Numero ya ha sido ingresado\n");}main(){ char gato[3][3]; int n, m, num, num2,r1=0,r2=0,j; for(n=0;n<3;n++) //damos valores "-" tambien se puede hacer gato[3][3]={{'-','-','-'},{'-','-','-'},{'-','-','-'}} { for(m=0;m<3;m++) { gato[n][m]='-'; } } j=0; while(j<9) { for(n=0;n<3;n++)//ciclo para imprimir las jugadas, eso comienza desde la seguda jugada { for(m=0;m<3;m++) { if((n==0)&&(m==0)) { clrscr(); //limpia pantalla (libreria conio) printf("\n",gato[n][m]); } if((n==1)&&(m==0))printf("\n",gato[n][m]); if((n==2)&&(m==0))printf("\n",gato[n][m]); printf("| %c |",gato[n][m]); if((n==2)&&(m==2))printf("\n",gato[n][m]); if(r1==1) { printf("Felicedades, el jugador uno ha ganado!!"); n=10; } if(r2==2) { printf("Felicedades, el jugador dos ha ganado!!"); n=10; } } } if((j==1)||(j==3)||(j==5)||(j==7)||(r1!=0)||(r2!=0)) { printf("Jugador 2:"); scanf("%i",&num2); if(num2<=0) { num2=1; error(num2); } if(num2>=10) { num2=2; error(num2); } if(num2==1)gato[0][0]='o';//asignamos valores a la matriz if(num2==2)gato[0][1]='o'; if(num2==3)gato[0][2]='o'; if(num2==4)gato[1][0]='o'; if(num2==5)gato[1][1]='o'; if(num2==6)gato[1][2]='o'; if(num2==7)gato[2][0]='o'; if(num2==8)gato[2][1]='o'; if(num2==9)gato[2][2]='o'; r2=jugador2(gato[0][0],gato[0][1],gato[0][2],gato[1][0],gato[1][1],gato[1][2],gato[2][0],gato[2][1],gato[2][2]);//llamamos a la funcion para el retorno de la misma printf("%i",r1); } else if((j==0)||(j==2)||(j==4)||(j==6)||(j==8)||(r1!=0)||(r2!=0)) { printf("Jugador 1:"); scanf("%i",&num); if(num<=0) { num=1; error(num); } if(num>=10) { num=2; error(num); } if(num==1)gato[0][0]='x'; if(num==2)gato[0][1]='x'; if(num==3)gato[0][2]='x'; if(num==4)gato[1][0]='x'; if(num==5)gato[1][1]='x'; if(num==6)gato[1][2]='x'; if(num==7)gato[2][0]='x'; if(num==8)gato[2][1]='x'; if(num==9)gato[2][2]='x'; r1=jugador1(gato[0][0],gato[0][1],gato[0][2],gato[1][0],gato[1][1],gato[1][2],gato[2][0],gato[2][1],gato[2][2]); printf("%i",r1); } j++; } return 0;}
G4ntZAhi van unos cuantos consejos:En primer lugar y lo que primero me ha llamado la atención es que utilices la librería conio.h, cuando esta no es una librería estándar. En mi opinión sería más elegante hacer un system("cls") o un system("clear") dependiendo en que sistema operativo compiles.Lo segundo que me ha llamado la atención es que utilices dos funciones idénticas para comprobar si cada jugador ha ganado, cuando podrías pedir un parámetro en la función que obtubiese el caracter que debe comprobar. Además, le pasas a la función la tira de parámetros cuando podrías hacerlo más simple y legible con punteros.Luego me he fijado en como declaras la función main... Simplemente declarala con un int delante, aunque no pongas nada el compilador tomará la función como que devuelbe int de todos modos.Posteriormente, a medida que voi lellendo el código me voi dando cuenta de que los nombres de las variables que utilizas podrían ser más descriptivos.También me da la impresión de que no has utilizado los bucles for de la manera más eficiente posible... te dejo que pienses esto.Por último, el estándar de carácteres de ancho para los programas/scripts es de 80 carácteres. Por cuestiones de uniformidad.Bueno. Esto es lo más destacables que he visto. Estaría bien que como ejercicio produgeras un nuevo código mejorando el que ya tienes.Saludos G4antZ
for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++) { tablero[i][j] = " "; }}
Me alegro.Con lo de los bucles for me refiero a que si quieres (por ejemplo) vaciar un tablero podrías hacer:Código: [Seleccionar]for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++) { tablero[i][j] = " "; }}salu2
Yo no veo ningun gato, mas bien se parece al juego de tateti, de esos que jugamos en la escuela