#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;
}
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).
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.
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!. .... ..(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
¡¡¡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!. ... ..(http://st.forocoches.com/foro/images/smilies/dancer2.gif)
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.
Cita de: leosansan en 20 Mayo 2013, 18:25 PM
¡¡¡Ya puedes jugar!!:
Sólo comentar que en lugar de un tablero "aburrido" como éste:
(http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS1/conecta4sin_zps82c8059a.jpg)
podemos tener algo más "vistoso", sin usar librerías adicionales":
(http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS1/conecta4color_zpse19ce4b7.jpg)
siguiendo lo indicado en
http://foro.elhacker.net/programacion_cc/c-t390579.0.html
sin más que añadir a lo expuesto en el post que indico encima system("color 70)" ....... ¡y a jugar con colorines!.
¡Saluditos! .... ..(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)