Juego de tres en raya

Eduardo Fernández González

/*El clásico juego del tres en raya para dos jugadores, solo que en vez de usar los tradicionales X y O se usan los números 1 y 2 en función del jugador en cuestión. El tablero al iniciar es una matriz de 0 que se van sustituyendo por unos o doses a lo largo del juego dependiendo del jugador que marque esa casilla.*/

#include<iostream>
using namespace std;

void escribir_matriz(int A[3][3]);
int ganador1(int A[3][3]);
int ganador2(int A[3][3]);

int main()
{ 
 int i,j;
 int A[3][3];
 int fila, columna;
 int juego_nuevo=0;
 int error=0;
 int movimientos=0;

for(i=0;i<3;i++)
 {
 for(j=0;j<3;j++)
 {
 A[i][j]=0;
 }
 }

 do{
 if(juego_nuevo==1){cout <<endl <<endl;}
 cout <<"COMIENZA EL JUEGO" <<endl <<endl;

 do{
 do{
 escribir_matriz(A);
 cout <<endl;
 cout <<"Jugador 1, dame la fila y columna de la casilla que quieres marcar: ";
 cin >>fila >>columna;
 if(A[fila-1][columna-1]!=0)
 {
 error=1;
 cout <<endl <<"ERROR!!! Elige una casilla sin marcar" <<endl <<endl;
 }
 else{
 A[fila-1][columna-1]=1;
 error=0;
 movimientos=movimientos+1;}
}while(error==1);

if(ganador1(A)!=1){
 do{
 cout <<endl <<endl;
 escribir_matriz(A);
 cout <<endl;
 cout <<"Jugador 2, dame la fila y columna de la casilla que quieres marcar: ";
 cin >>fila >>columna;
 if(A[fila-1][columna-1]!=0)
 {
 error=1;
 cout <<endl <<"ERROR!!! Elige una casilla sin marcar";
 }
 else{
 A[fila-1][columna-1]=2;
 error=0;
 cout <<endl <<endl;}
}while(error==1);}
}while((ganador1(A)!=1)&&(ganador2(A)!=1)&&(movimientos<=5));

 if(ganador1(A)==1){
 cout <<endl <<"EL JUGADOR 1 HA GANADO!!" <<endl;
 escribir_matriz(A);}
 else{
 if(ganador2(A)==1){
 cout <<endl <<"EL JUGADOR 2 HA GANADO!!" <<endl;
 escribir_matriz(A);}
else
 {
 cout <<endl <<"HABEIS EMPATADO!";
 }}

 cout <<endl <<endl <<"Quereis jugar otra vez?(Si=1 No=0): ";
 cin >>juego_nuevo;
}while(juego_nuevo==1);

return 0;
}

int ganador1(int A[3][3])
{
 if(((A[0][0]==1)&&(A[0][1]==1)&&(A[0][2]==1))||((A[1][0]==1)&&(A[1][1]==1)
      &&(A[1][2]==1))||((A[2][0]==1)&&(A[2][1]==1)&&(A[2][2]==1)))
   return 1;
 else if(((A[0][0]==1)&&(A[1][0]==1)&&(A[2][0]==1))||((A[0][1]==1)&&(A[1][1]==1)
      &&(A[2][1]==1))||((A[0][2]==1)&&(A[1][2]==1)&&(A[2][2]==1)))
  return 1;
 else if(((A[0][0]==1)&&(A[1][1]==1)&&(A[2][2]==1))||((A[0][2]==1)
      &&(A[1][1]==1)&&(A[2][0]==1)))
  return 1;
 else return 0;
}

int ganador2(int A[3][3])
{
 if(((A[0][0]==2)&&(A[0][1]==2)&&(A[0][2]==2))||((A[1][0]==2)&&(A[1][1]==2)
       &&(A[1][2]==2))||((A[2][0]==2)&&(A[2][1]==2)&&(A[2][2]==2)))
  return 1;
 else if(((A[0][0]==2)&&(A[1][0]==2)&&(A[2][0]==2))||((A[0][1]==2)&&(A[1][1]==2)
       &&(A[2][1]==2))||((A[0][2]==2)&&(A[1][2]==2)&&(A[2][2]==2)))
  return 1;
 else if(((A[0][0]==2)&&(A[1][1]==2)&&(A[2][2]==2))||((A[0][2]==2)&&(A[1][1]==2)
       &&(A[2][0]==2)))
  return 1;
 else return 0;
}

void escribir_matriz(int A[3][3])
{ 
 int i, j;
 for(i=0;i<3;i++)
 {
 for(j=0;j<3;j++)
 {
 cout <<A[i][j] <<" ";
 }
 cout <<endl;
 }
}
Anuncios
Esta entrada fue publicada en Informática e Internet. Guarda el enlace permanente.

Una respuesta a Juego de tres en raya

  1. Muy buen programa, estuve buscando uno y ninguno funcionó correctamente a escepción de este. Una mejora que se me ocurrió al ejecutarlo es hacer que borre la pantalla tras cada turno para que solo se vea el tablero actual pero aún así es un programa muy bueno y en solo 123 líneas de código que muchos otrs iban por la 250 y ni siquiera iban. Gracias por tu ayuda, un saludo.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s