Autor
|
Tema: alguien que me diga el error es el juego de conecta cuatro en codigo c (Leído 2,950 veces)
|
cisar
Desconectado
Mensajes: 1
|
#include <stdio.h> #include <stdlib.h>
int juego(); int main() {
int d, played=0;
while(d!=2) { system("cls"); printf("Conecta 4\n------\n"); printf("1)Jugar\n"); printf("2)Salir\n\n"); printf("\tJuegos jugados:%d\n", played); scanf("%d", &d); //pide opción del menú. switch(d) { case 1: juego(); //llama a la función juego. played++; //el contador de juegos se incrementa. break; case 2: break; default: printf("\nError.. Solo elige 1 o 2...\n");
break; } } return 0;
}
int juego() { int tablero[6][7], i, j, won=0, turno=1, seleccion; for(i=0;i<7;i++) for(j=0;j<6;j++) tablero[j]=0; //Pone todo vacio while(!won) { system("cls"); for(i=0;i<7;i++) printf(" %d\t", i+1); //imprime la numeración de las columnas printf("\n"); for(i=0;i<6;i++) { for(j=0;j<7;j++) //recorre cada espacio del tablero if(tablero[j]==0) printf("( )\t"); //imprimiendo la matriz, y segun lo que tenga else if(tablero[j]==1) printf("(X)\t"); //pone un espacio, X, o O else printf("(O)\t"); printf("\n"); } if(turno==1) printf("\nTurno de X."); else printf("\nTurno de O."); printf("En que columna tiraras?"); scanf("%d", &seleccion); seleccion--; //porque esta numerado desde el 1, y la compu cuenta desde el 0. if(tablero[seleccion][0]!=0) printf("\nError columna llena o fuera de rango\n"); else { for(i=0;i<6;i++) if(tablero[seleccion][i+1]!=0||i==5) { tablero[seleccion]=turno; //si el espacio que sigue esta lleno, o esta en el borde, lo ocupa. i=6; }
for(i=0;i<7;i++) { for(j=0;j<6;j++) { if(tablero[j]==1||tablero[j]==2) { if(tablero[j]==tablero[j+1]&&tablero[j]==tablero[j+2]&&tablero[j]==tablero[j+3]) won=1; //checa para la derecha
if(tablero[j]==tablero[i+1][j]&&tablero[j]==tablero[i+2][j]&&tablero[j]==tablero[i+3][j]) won=1; //checa para abajo
if(tablero[j]==tablero[i+1][j+1]&&tablero[j]==tablero[i+2][j+2]&&tablero[j]==tablero[i+3][j+3]) won=1;//diagonal a derecha if(tablero[j]==tablero[i+1][j-1]&&tablero[j]==tablero[i+2][j-2]&&tablero[j]==tablero[i+3][j-3]) won=1; //diag izquierda } } } if(won==1) { system("cls");
for(i=0;i<7;i++) printf(" %d\t", i+1); //imprime la numeración de las columnas printf("\n"); for(i=0;i<7;i++) { for(j=0;j<6;j++) if(tablero[j]==0) printf("( )\t"); else if(tablero[j]==1) printf("(X)\t"); else printf("(O)\t"); printf("\n"); } printf("Bien! gano "); if(turno==1) printf("X\n"); else printf("O\n"); } if(turno==1) turno=2; //cambia los turnos else turno=1;
} } fflush(stdin); getchar();
return juego; }
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Usa las etiquetas GESHI #include <stdio.h> #include <stdlib.h> int juego(); int main() { int d, played=0; while(d!=2) { system("cls"); printf("Conecta 4\n------\n"); printf("1)Jugar\n"); printf("2)Salir\n\n"); printf("\tJuegos jugados:%d\n", played); scanf("%d", &d); //pide opción del menú. switch(d) { case 1: juego(); //llama a la función juego. played++; //el contador de juegos se incrementa. break; case 2: break; default: printf("\nError.. Solo elige 1 o 2...\n"); break; } } return 0; }
Por otro lado, deberías decirnos el error. Así acabamos antes (de momento veo que no has inicializado la variable d).
|
|
« Última modificación: 20 Mayo 2013, 15:02 pm por amchacon »
|
En línea
|
|
|
|
s00rk
Desconectado
Mensajes: 195
|
Cuando indicas donde puso la ficha el jugador esta mal tablero[seleccion]=turno;
Es una matriz no un vector, debes indicarle ambos puntos sobre donde guardaras, igualmente cuando buscas quien gano estas solo indicando un punto y no ambos.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Si estaban puestos. Lo que ocurre que al no meter el código entre las etiquetas GeSHi de C++ no salen. Simplemente lo que pongo a continuación es el mismo código entre dichas etiquetas: #include <stdio.h> #include <stdlib.h> int juego(); int main() { int d=3, played=0; while(d!=2) { system("cls"); printf("\tJuegos jugados:%d\n", played); printf("Conecta 4\n------\n"); printf("1)Jugar\n"); printf("2)Salir\n\n"); scanf("%d", &d); //pide opción del menú. switch(d) { case 1: juego(); //llama a la función juego. played++; //el contador de juegos se incrementa. break; case 2: break; default: printf("\nError.. Solo elige 1 o 2...\n"); break; } } return 0; } int juego() { int tablero[6][7], i, j, won=0, turno=1, seleccion; for(i=0;i<7;i++) for(j=0;j<6;j++) tablero[i][j]=0; //Pone todo vacio while(!won) { system("cls"); for(i=0;i<7;i++) printf(" %d\t", i+1); //imprime la numeración de las columnas printf("\n"); for(i=0;i<6;i++) { for(j=0;j<7;j++) //recorre cada espacio del tablero if(tablero[j][i]==0) printf("( )\t"); //imprimiendo la matriz, y segun lo que tenga else if(tablero[j][i]==1) printf("(X)\t"); //pone un espacio, X, o O else printf("(O)\t"); printf("\n"); } if(turno==1) printf("\nTurno de X."); else printf("\nTurno de O."); printf("En que columna tiraras?"); scanf("%d", &seleccion); seleccion--; //porque esta numerado desde el 1, y la compu cuenta desde el 0. if(tablero[seleccion][0]!=0) printf("\nError columna llena o fuera de rango\n"); else { for(i=0;i<6;i++) if(tablero[seleccion][i+1]!=0||i==5) { tablero[seleccion][i]=turno; //si el espacio que sigue esta lleno, o esta en el borde, lo ocupa. i=6; } for(i=0;i<7;i++) { for(j=0;j<6;j++) { if(tablero[i][j]==1||tablero[i][j]==2) { if(tablero[i][j]==tablero[i][j+1]&&tablero[i][j]==tablero[i][j+2]&&tablero[i][j]==tablero[i][j+3]) won=1; //checa para la derecha if(tablero[i][j]==tablero[i+1][j]&&tablero[i][j]==tablero[i+2][j]&&tablero[i][j]==tablero[i+3][j]) won=1; //checa para abajo if(tablero[i][j]==tablero[i+1][j+1]&&tablero[i][j]==tablero[i+2][j+2]&&tablero[i][j]==tablero[i+3][j+3]) won=1;//diagonal a derecha if(tablero[i][j]==tablero[i+1][j-1]&&tablero[i][j]==tablero[i+2][j-2]&&tablero[i][j]==tablero[i+3][j-3]) won=1; //diag izquierda } } } if(won==1) { system("cls"); for(i=0;i<7;i++) printf(" %d\t", i+1); //imprime la numeración de las columnas printf("\n"); for(i=0;i<7;i++) { for(j=0;j<6;j++) if(tablero[j][i]==0) printf("( )\t"); else if(tablero[j][i]==1) printf("(X)\t"); else printf("(O)\t"); printf("\n"); } printf("Bien! gano "); if(turno==1) printf("X\n"); else printf("O\n"); } if(turno==1) turno=2; //cambia los turnos else turno=1; } } fflush(stdin); getchar(); return juego; }
Saluditos!. .... ..
|
|
« Última modificación: 20 Mayo 2013, 18:47 pm por leosansan »
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
¡¡¡Ya puedes jugar!!!, tan solo tenías mal declaradas las dimensiones de la matriz tablero en los for. Te he incluido una pequeña variante por si entran un caracter no numérico no se quede en un bucle el programa: #include <stdio.h> #include <stdlib.h> int juego(); int main() { int d,played=0,cont=0; while(d!=2) { //system("cls"); cont=0; printf("Conecta 4\n------\n"); printf("1)Jugar\n"); printf("2)Salir\n\n"); printf("\tJuegos jugados:%d\n", played); cont=scanf("%d", &d); if (cont==0){ d=3; while(getchar()!='\n'); } //pide opción del menú. switch(d) { case 1: juego(); //llama a la función juego. played++; //el contador de juegos se incrementa. break; case 2: break; default: printf("\nError.. Solo elige 1 o 2...\n"); break; } } return 0; } int juego() { int tablero[6][7], i, j, won=0, turno=1, seleccion; for(i=0;i<6;i++) for(j=0;j<7;j++) tablero[i][j]=0; //Pone todo vacio while(!won) { system("cls"); for(i=0;i<6;i++) printf(" %d\t", i+1); //imprime la numeración de las columnas printf("\n"); for(i=0;i<6;i++) { for(j=0;j<7;j++) //recorre cada espacio del tablero if(tablero[j][i]==0) printf("( )\t"); //imprimiendo la matriz, y segun lo que tenga else if(tablero[j][i]==1) printf("(X)\t"); //pone un espacio, X, o O else printf("(O)\t"); printf("\n"); } if(turno==1) printf("\nTurno de X."); else printf("\nTurno de O."); printf("En que columna tiraras?"); scanf("%d", &seleccion); seleccion--; //porque esta numerado desde el 1, y la compu cuenta desde el 0. if(tablero[seleccion][0]!=0) printf("\nError columna llena o fuera de rango\n"); else { for(i=0;i<6;i++) if(tablero[seleccion][i+1]!=0||i==5) { tablero[seleccion][i]=turno; //si el espacio que sigue esta lleno, o esta en el borde, lo ocupa. i=6; } for(i=0;i<7;i++) { for(j=0;j<6;j++) { if(tablero[i][j]==1||tablero[i][j]==2) { if(tablero[i][j]==tablero[i][j+1]&&tablero[i][j]==tablero[i][j+2]&&tablero[i][j]==tablero[i][j+3]) won=1; //checa para la derecha if(tablero[i][j]==tablero[i+1][j]&&tablero[i][j]==tablero[i+2][j]&&tablero[i][j]==tablero[i+3][j]) won=1; //checa para abajo if(tablero[i][j]==tablero[i+1][j+1]&&tablero[i][j]==tablero[i+2][j+2]&&tablero[i][j]==tablero[i+3][j+3]) won=1;//diagonal a derecha if(tablero[i][j]==tablero[i+1][j-1]&&tablero[i][j]==tablero[i+2][j-2]&&tablero[i][j]==tablero[i+3][j-3]) won=1; //diag izquierda } } } if(won==1) { system("cls"); for(i=0;i<7;i++) printf(" %d\t", i+1); //imprime la numeración de las columnas printf("\n"); for(i=0;i<7;i++) { for(j=0;j<6;j++) if(tablero[j][i]==0) printf("( )\t"); else if(tablero[j][i]==1) printf("(X)\t"); else printf("(O)\t"); printf("\n"); } printf("Bien! gano "); if(turno==1) printf("X\n"); else printf("O\n"); } if(turno==1) turno=2; //cambia los turnos else turno=1; } } fflush(stdin); getchar(); return juego; }
Ssaluditos!. ... ..P.D: Sería interesante que desarrollaras una variante donde el "otro" jugador sea "la máquina". LLeva algo de desarrollo de I.A pero vale la pena el intentarlo.
|
|
« Última modificación: 20 Mayo 2013, 18:45 pm por leosansan »
|
En línea
|
|
|
|
|
|
|