//* JUEGO CUATRO EN LINEA*//
/*MATHIAS CASTRO*/
/*4.523.221-8*/
/*Librerias utilizadas*/
#include <stdlib.h>
#include <stdio.h>
#define DIM 16 /*Constante utilizada para definir la maxima dimension del tablero*/
//#define tam_string 40 /*Constante para la cantidad de digitos de los Nombres*/
//#define ced_string 8
struct jugador1{
char nom_jug1[40];
char ced_jug1[8];
}jugador1[500];
struct jugador2{
char nom_jug2[40];
char ced_jug2[8];
}jugador2[500];
struct ganadores{
char jganador;
}ganadores[1000];
/*PROCEDIMIENTOS Y FUNCIONES*/
void inicializar_tablero(char tablero[][DIM],int);
int juegan_O_(char tabla[][DIM],int,int);
int juegan_X_(char tablero[][DIM],int,int);
int cuatro_en_linea(char tablero[][DIM],int);
int limpiar(char nom_jug[]);
char nom_jug1[40];
char nom_jug2[40];
char ced_jug1[8];
char ced_jug2[8];
int player1 = 0, player2 = 0;
int main()
{
char tablero[DIM][DIM];
int x,opcion,victoria=1,nombre1,nombre2,contador=1,correcta=1,aux=1,sumador = 0;
int ganador=0,temp = 0;
int part, aux2,aux3;
do
{
system("cls");
printf("\n\n\n JUEGO CUATRO EN LINEA\n\n\n\n\n");
printf(" 1) Ingresar datos del primer jugador\n\n");
printf(" 2) Ingresar datos del segundo jugador\n\n");
printf(" 3) Jugar\n\n");
printf(" 4) Listar todos los juegos realizados\n\n");
printf(" 5) Salir\n\n\n");
if (contador%2==0)
{
printf(" Error: Antes de jugar debe ingresar los datos de los dos jugadores. \n\n\n");
printf(" REINGRESE SU OPCION: ");
contador--;
}
if (correcta%2==0)
{
printf(" Opcion incorrecta \n\n\n");
printf(" REINGRESE SU OPCION: ");
correcta--;
}
if (aux%2==0)
{
printf(" No se han realizado juegos. \n\n\n");
aux--;
}
scanf("%d",&opcion);
system("cls");
switch (opcion)
{
case 1: /*OPCION 1 DEL MENU*/
{
limpiar(nom_jug1);
limpiar(ced_jug1);
while(getchar() != '\n');
printf("\n Ingrese su Nombre: ");
do
{
scanf("%39[^\n]",jugador1[player1].nom_jug1);
if (jugador1[player1].nom_jug1[0]=='\0')
{
printf(" ERROR\n");
printf(" Ingrese nuevamente Nombre: ");
}
else
{
for (nombre1=0;nombre1<40;nombre1++)
{
nom_jug1[nombre1];
}
}while(getchar() != '\n');
system("cls");
}while(jugador1[player1].nom_jug1[0]=='\0');
printf("\n Ingrese su cedula: ");
do
{
scanf("%8[^\n]",jugador1[player1].ced_jug1);
if (jugador1[player1].ced_jug1[0]=='\0')
{
printf(" ERROR\n");
printf(" Ingrese nuevamente su cedula: ");
}
else
{
for (nombre1=0;nombre1<8;nombre1++)
{
ced_jug1[nombre1];
}
system("cls");
printf("\n");
}while(getchar() != '\n');
}while(jugador1[player1].ced_jug1[0]=='\0');
printf("\n DATOS INGRESADOS\n");
printf("\n\n Nombre ingresado: %s",jugador1[player1].nom_jug1);
printf("\n\n Cedula ingresada: %s",jugador1[player1].ced_jug1);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n presione ENTER para volver al menu");
jugador1[player1+1]=jugador1[player1];
break;
}
case 2: /*OPCION 2 DEL MENU*/
{
limpiar(nom_jug2);
limpiar(ced_jug2);
while(getchar() != '\n');
printf("\n Ingrese su Nombre: ");
do
{
scanf("%39[^\n]",jugador2[player2].nom_jug2);
if (jugador2[player2].nom_jug2[0]=='\0')
{
printf(" ERROR\n");
printf(" Ingrese nuevamente Nombre: ");
}
else
{
for (nombre2=0;nombre2<40;nombre2++)
{
nom_jug2[nombre2];
}
}while(getchar() != '\n');
system("cls");
}while(jugador2[player2].nom_jug2[0]=='\0');
printf("\n Ingrese su cedula: ");
do
{
scanf("%8[^\n]",jugador2[player2].ced_jug2);
do
if (jugador2[player2].ced_jug2[0]=='\0')
{
printf(" ERROR\n");
printf(" Ingrese nuevamente su cedula: ");
}
else
{
for (nombre2=0;nombre2<8;nombre2++)
{
ced_jug2[nombre2];
}
system("cls");
printf("\n");
}while(getchar() != '\n');
}while(jugador2[player2].ced_jug2[0]=='\0');
printf("\n DATOS INGRESADOS\n");
printf("\n\n Nombre ingresado: %s",jugador2[player2].nom_jug2);
printf("\n\n Cedula ingresada: %s",jugador2[player2].ced_jug2);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n presione ENTER para volver al menu");
jugador2[player2+1]=jugador2[player2];
break;
}
case 3: /*OPCION 3 DEL MENU*/
{
if ((jugador1[player1].nom_jug1[0]=='\0') || (jugador2[player2].nom_jug2[0]=='\0'))
{
contador++;
}
else
{
cuatro_en_linea(tablero,opcion);
sumador++;
ganadores[ganador].jganador=cuatro_en_linea();
ganador++;
if(jugador1[player1].nom_jug1[40]==jugador1[player1+1].nom_jug1[40]){
jugador1[player1+2]=jugador1[player1+1];
player1++;
}
if(jugador2[player2].nom_jug2[40]==jugador2[player2+1].nom_jug2[40]){
jugador2[player2+2]=jugador2[player2+1];
player2++;
}
}
break;
}
case 4:
if (sumador<1)
{
aux++;
}
else
{
part=1;
aux2=0;
aux3 = 0;
for(aux2=0;aux2<sumador;aux2++){
printf("Partida %d\n",part);
part++;
printf("Jugador 1: %s\n",jugador1[aux2].nom_jug1);
printf("Cedula: %s\n",jugador1[aux2].ced_jug1);
printf("Jugador 2: %s\n",jugador2[aux2].nom_jug2);
printf("Cedula: %s\n",jugador2[aux2].ced_jug2);
if (ganadores[aux3].jganador == 1)
{
printf("Gana el jugador 1");
}
else if (ganadores[aux3].jganador == 2)
{
printf("Gana el jugador 2");
}
else if (ganadores[aux3].jganador == 0)
{
printf("EMPATE");
}
}
system("PAUSE");
}
break;
case 5: /*OPCION 5 DEL MENU*/
return printf("\n\n SALIENDO\n\n");
break;
default:
correcta++;
break;
}while (getchar()!='\n');
}while (victoria==1);
}
int cuatro_en_linea(char tablero[DIM][DIM],int x)
{
/*Defino distintas variables que voy a utilizar a lo largo del programa*/
int n=0,i,j,resto=1,k=0,jugador,partida,victoria=0;
char d;
printf("\n\nIngresa la dimension del tablero de juego(4-15): ");
/*Analizamos si la dimension del tablero ingresada es valida*/
do
{
scanf (" %d",&x);
system("cls");
if (x<4 || x>15)
{
printf("\nOpcion no valida. Ingresa la dimension (4-15): ");
} while (getchar()!='\n');
} while (x<4 || x>15);
system("cls");
/*Elegimos judagor*/
printf("\n ELIJA JUGADOR\n\n\n");
printf("\n\n 1) JUGADOR 1 (X)\n");
printf("\n\n 2) JUGADOR 2 (O)\n");
do
{
scanf("%d",&jugador);
if ((jugador!=1) && (jugador!=2))
{
printf("\n Error: Los jugadores posibles son 1 y 2 ");
}
}while ((getchar()!='\n') || ((jugador!=1) && (jugador!=2)));
do
{
system("cls");
printf("\n\n\n\n");
inicializar_tablero(tablero,x);
while ((resto<=(x*x)) && (victoria!=1))
{
if (jugador==1)
{
jugador++;
juegan_X_(tablero,x,n);
/* Evaluo si el jugador 1 (X) gana*/
for (i=1;i<=x;i++)
{
for (j=1;j<=x;j++)
{
/*Verifico si hay cuatro en linea horizontal para Jugador 1*/
if ((tablero[i][j]=='X') && ((tablero[i][j+1])=='X') && ((tablero[i][j+2])=='X') && ((tablero[i][j+3])=='X'))
{
victoria = 1;
}
/*Verifico si hay cuatro en linea vertical para Jugador 1*/
else if ((tablero[i][j]=='X') && ((tablero[i+1][j])=='X') && ((tablero[i+2][j])=='X') && ((tablero[i+3][j])=='X'))
{
victoria = 1;
}
/*Verifico si hay cuatro en linea en diagonal ascendiente para Jugador 1*/
else if ((tablero[i][j]=='X') && ((tablero[i+1][j-1])=='X') && ((tablero[i+2][j-2])=='X') && ((tablero[i+3][j-3])=='X'))
{
victoria = 1;
}
/*Verifico si hay cuatro en linea en diagonal descendiente para Jugador 1*/
else if ((tablero[i][j]=='X') && ((tablero[i+1][j+1])=='X') && ((tablero[i+2][j+2])=='X') && ((tablero[i+3][j+3])=='X'))
{
victoria = 1;
}
}
}
if (victoria == 1)
{
printf("\n\n FELICITACIONES %s",nom_jug1);
printf("!!!\n\n Has ganado la partida.\n\n\n\n\n\n");
return 1;
}
else
{
resto++;
}
}
else if (jugador == 2)
{
jugador--;
juegan_O_(tablero,x,n);
/* Evaluo si el jugador 2 (O) gana*/
for (i=1;i<=x;i++)
{
for (j=1;j<=x;j++)
{
/*Verifico si hay cuatro en linea horizontal para Jugador 1*/
if ((tablero[i][j]=='O') && ((tablero[i][j+1])=='O') && ((tablero[i][j+2])=='O') && ((tablero[i][j+3])=='O'))
{
victoria = 1;
}
/*Verifico si hay cuatro en linea vertical para Jugador 1*/
else if ((tablero[i][j]=='O') && ((tablero[i+1][j])=='O') && ((tablero[i+2][j])=='O') && ((tablero[i+3][j])=='O'))
{
victoria = 1;
}
/*Verifico si hay cuatro en linea en diagonal ascendiente para Jugador 2*/
else if ((tablero[i][j]=='O') && ((tablero[i+1][j-1])=='O') && ((tablero[i+2][j-2])=='O') && ((tablero[i+3][j-3])=='O'))
{
victoria = 1;
}
/*Verifico si hay cuatro en linea en diagonal descendiente para Jugador 2*/
else if ((tablero[i][j]=='O') && ((tablero[i+1][j+1])=='O') && ((tablero[i+2][j+2])=='O') && ((tablero[i+3][j+3])=='O'))
{
victoria = 1;
}
}
}
if (victoria == 1)
{
printf("\n\n FELICITACIONES %s",nom_jug2);
printf("!!!\n\n Has ganado la partida.\n\n\n\n\n\n");
return 2;
}
else
{
resto++;
}
}
/*Si el tablero se lleno de fichas y no hay cuatro en linea
el partido termina en empate*/
if (resto > (x*x) && (victoria!=1))
{
printf("\n\n EMPATE\n\n");
return 0;
}
}
}while ((resto<=(x*x)) && (victoria!=1));
system("PAUSE");
resto = 1;
victoria = 0;
system("cls");
inicializar_tablero(tablero,x);
system("cls");
}
/* Procedimiento para imprimir el tablero inicial*/
void inicializar_tablero(char tablero[DIM][DIM],int x)
{
int i,j;
int contador = 1;
for (i=1; i<=x; i++)
{
for (j=1;j<=x; j++)
{
printf(" ");
printf(" %c",tablero[i][j]='.');
}
printf("\n\n");
}
for (i=1;i<=x;i++)
{
printf(" %d",contador);
contador++;
}
printf("\n");
}
/*Funcion para hacer jugada para el jugador 1*/
int juegan_X_(char tablero[DIM][DIM],int x,int n)
{
int i,j,k,contador=1;
do
{
printf("\n\n Juega %s: ",nom_jug1);
scanf ("%d",&n);
if (n<1 || n>x)
{
printf("Error: las columnas posibles son de 1 a %d",x);
while (getchar()!='\n');
}
else if (tablero[1][n]!='.')
{
printf("\nError: la columna ya esta llena.\n ");
}
}while((n<1 || n>x) || (tablero[1][n]!='.'));
for (k=x;k>=1;k--)
{
if (tablero[k][n]!='.')
{
continue;
}
else
{
tablero[k][n]='X';
break;
}
}
system("cls");
printf("\n Ultima jugada X: Columna %d\n",n);
printf("\n\n");
for (i=1;i<=x;i++)
{
for (j=1;j<=x;j++)
{
printf(" ");
printf (" %c",tablero[i][j]);
}
printf("\n\n");
}
for (i=1;i<=x;i++)
{
printf(" %d",contador);
contador++;
}
printf("\n");
}
/*Funcion para hacer jugada para el jugador 2*/
int juegan_O_(char tablero[DIM][DIM],int x,int n)
{
int i,j,k,contador=1;
do
{
printf("\n\n Juega %s: ",nom_jug2);
scanf ("%d",&n);
if (n<1 || n>x)
{
printf("Error: las columnas posibles son de 1 a %d",x);
while (getchar()!='\n');
}
else if (tablero[1][n]!='.')
{
printf("\nError: la columna ya esta llena.\n ");
}
}while((n<1 || n>x) || (tablero[1][n]!='.'));
for (k=x;k>=1;k--)
{
if (tablero[k][n]!='.')
{
continue;
}
else
{
tablero[k][n]='O';
break;
}
}
system("cls");
printf("\n Ultima jugada O: Columna %d\n",n);
printf("\n\n");
for (i=1;i<=x;i++)
{
for (j=1;j<=x;j++)
{
printf(" ");
printf (" %c",tablero[i][j]);
}
printf("\n\n");
}
for (i=1;i<=x;i++)
{
printf(" %d",contador);
contador++;
}
printf("\n");
}
int limpiar(char nom_jug[40])
{
int t;
for (t=0; t<40; t++)
{
nom_jug[t]='\0';
}
}