Juego 4 en raya hecho en C++

Revisando entre mis curiosidades me encontré un código que hice hace varios años (de la prepa creo), se trata del juego 4 en línea o 4 en raya hecho en C++, he decidido subirlo al blog ya que no me gustaría que se perdiera en el final de los tiempos xD.

Pueden descargar el código fuente aca:

Juego 4 en raya hecho en C++

[cpp]
#include <iostream>

using namespace std;

const int n=6;
const int m=8;

bool sobranEspaciosLibres(int tablero[n][m])
{
for(int i = 0; i < 6; i++)
{
for(int j = 0; j < 8; j++)
{
if(tablero[i][j] == 0)
{
//Sobran espacios donde colocar fechas
//cout<<"Hay espacios"<<endl;
return true;
}
}
}

//No sobran mas espacios donde colocar fichas, juego empatado
cout<<"No hay mas espacios: empate"<<endl;
return false;
}

void ImprimirTablero(int tablero[n][m])
{
for(int i = 0; i < 6; i++)
{
for(int j = 0; j < 8; j++)
{
if(tablero[i][j] == 1)
{
cout<<" O ";
}
else if(tablero[i][j] == 2)
{
cout<<" X ";
}
else
{
cout<<" . ";
}

}
cout<<endl;
}
}

int ColocarFichaEn(int tablero[n][m], int columna)
{
for(int i = 0; i < 6; i++)
{
if(!(i+1 > 5))
{
if(tablero[i][columna] == 0 && tablero[i+1][columna] != 0 )
{
return i;
}
}
else
{
//Alcanzo la base del tablero
if(tablero[i][columna] == 0)
{
return i;
}
}
}

return -1;
}

bool columnaATope(int tablero[n][m], int columna)
{
if(tablero[0][columna] != 0)
{
cout<<"No hay espacio para colocar la ficha ahi"<<endl;
return true;
}
return false;
}

bool ganador(int tablero[n][m], int fila, int columna, int jugador)
{
//Vertical
bool encontrado = false;
int total = 0;

for(int i = 0; i < n; i++)
{
//cout<<"i: "<<i<<endl;
if(encontrado)
{
if(tablero[i][columna] == jugador)
{
total++;
}
else
{
encontrado = false;
total = 0;
}
}
if(tablero[i][columna] == jugador && !encontrado)
{
encontrado = true;
total++;
}

//cout<<"total: "<<total<<endl;
if(total == 4)
{
cout<<"El jugador "<<jugador<<" gana!"<<endl;
return true;
}
}

//Horizontal
encontrado = false;
total = 0;

for(int i = 0; i < m; i++)
{
//cout<<"i: "<<i<<endl;
if(encontrado)
{
if(tablero[fila][i] == jugador)
{
total++;
}
else
{
encontrado = false;
total = 0;
}
}
if(tablero[fila][i] == jugador && !encontrado)
{
encontrado = true;
total++;
}

//cout<<"total: "<<total<<endl;
if(total == 4)
{
cout<<"El jugador "<<jugador<<" gana!"<<endl;
return true;
}
}

//Diagonal \
//Obtener Coordenadas donde inicia la diagonal en base a fila – columna
int nuevaFila = fila;
int nuevaColumna = columna;
encontrado = false;
total = 0;

//cout<<"Fila: "<<fila<<" Columna: "<<columna<<endl;

while((nuevaFila != 0 || nuevaColumna != 0))
{
nuevaFila–;
nuevaColumna–;

//cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
if(nuevaFila == 0 || nuevaColumna == 0)
break;
}

//cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;

do
{
if(nuevaFila >= n)
break;

//cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
if(encontrado)
{
if(tablero[nuevaFila][nuevaColumna] == jugador)
{
total++;
}
else
{
encontrado = false;
total = 0;
}
}
if(tablero[nuevaFila][nuevaColumna] == jugador && !encontrado)
{
encontrado = true;
total++;
}

//cout<<"total: "<<total<<endl;
if(total == 4)
{
cout<<"El jugador "<<jugador<<" gana!"<<endl;
return true;
}

nuevaFila++;
nuevaColumna++;

}while(nuevaFila < n);

//Diagonal /
nuevaFila = fila;
nuevaColumna = columna;
encontrado = false;
total = 0;

//cout<<"Fila: "<<fila<<" Columna: "<<columna<<endl;

while((nuevaFila != 0 || nuevaColumna != m))
{
nuevaFila–;
nuevaColumna++;

//cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
if(nuevaFila == 0 || nuevaColumna == m)
break;
}

//cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;

do
{
//cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
if(nuevaFila >= n)
break;

//cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
if(encontrado)
{
if(tablero[nuevaFila][nuevaColumna] == jugador)
{
total++;
}
else
{
encontrado = false;
total = 0;
}
}
if(tablero[nuevaFila][nuevaColumna] == jugador && !encontrado)
{
encontrado = true;
total++;
}

//cout<<"total: "<<total<<endl;
if(total == 4)
{
cout<<"El jugador "<<jugador<<" gana!"<<endl;
return true;
}

nuevaFila++;
nuevaColumna–;

}while(nuevaFila < n);

return false;
}

int main()
{
int matriz[n][m];

//Preparamos el tablero del juego rellenandolo con 0’s
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
matriz[i][j] = 0;
//cout<<matriz[i][j]<<" ";
}
//cout<<" "<<endl;
}

//Logica
int jugador = 0;
int ultimo = 0;
do
{
int colocarColumna = -1;
bool columnaTope = true;

if(ultimo == 1)
{
jugador = 2;
}
else
{
jugador = 1;
}

do
{
cout<<"Turno del jugador "<<jugador<<" – Elije un numero del 1 al 8: "; cin>>colocarColumna; cout<<endl;
colocarColumna–;
columnaTope = columnaATope(matriz,colocarColumna);
}
while((colocarColumna < 0 || colocarColumna > 7) || columnaTope);

int colocarFila = ColocarFichaEn(matriz,colocarColumna);
matriz[colocarFila][colocarColumna] = jugador;
ImprimirTablero(matriz);

//Revisar si hay un 4 en raya
if(ganador(matriz,colocarFila,colocarColumna,jugador))
{
break;
}

ultimo = jugador;
jugador++;
}
while(sobranEspaciosLibres(matriz));

return 0;
}
[/cpp]

PD

No tiene nada de inteligencia artificial ni algoritmos minimax, es el código del juego simplemente, muy sencillo y algo feo también :p.

3 thoughts on “Juego 4 en raya hecho en C++

  1. hanna

    hola …me gustaria mucho que me ayudaras en guiarme en un codigo para 4 en linea pero en codigo java …ya llevo dias intentandolo hacer y la verdad no soy buena con java ..apenas empiezo …bueno espero que me puedas ayudar ya que lo entrego el lunes el programa u-u

    te dejo mi codigo por si te interesas en ayudarme n_n …
    todo lo hago de un boton y lo paso el aareglo de botones a un panel..
    espero que me puedas ayudar

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    tablero.setBackground(Color.red);
    tablero.setLayout(new BorderLayout());
    tablero.setLayout(new GridLayout(8,8));

    for(int a=0;a<botonera .length;a++){
    for(int j=0;j<botonera .length;j++){
    botonera [j][a] = new JButton("b"+cont);

    tablero.add(botonera [j][a]);

    botonera[j][a].setText("b"+cont);
    botonera[j][a].getText();
    cont=cont+1;

    }

    }
    int contador=8;
    int contad=0;

    for(int j=0;j<contador;j++){

    botonera[j][contad].addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent ae){

    int cone1=8;
    int cone2=0;
    int j=0;

    if(botonera[0][j].getText().equals("b0"))
    {

    if(JUGADOR==0)
    {

    botonera[0][cont2].setBackground(Color.blue);
    cont2–;

    JUGADOR=JUGADOR+1;

    }
    else if(JUGADOR==1)
    {

    botonera[0][cont2].setBackground(Color.YELLOW);
    cont2–;
    JUGADOR=JUGADOR-1;
    }

    }

    if(botonera[1][j]==botonera[1][j])
    {
    if(botonera[1][j].getText().equals("b1"))
    {

    if(JUGADOR==0)
    {

    botonera[1][cont2].setBackground(Color.blue);
    cont2–;

    JUGADOR=JUGADOR+1;

    }
    else if(JUGADOR==1)
    {

    botonera[1][cont2].setBackground(Color.YELLOW);
    cont2–;
    JUGADOR=JUGADOR-1;
    }

    }
    }

    }
    });
    }

    }

    Reply

Leave a Reply

Your email address will not be published.