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:
[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.
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;
}
}
}
}
});
}
}
disculpa de donde descargo el codigo fuente de este programa, al parecer link caido. :'(
y como kedaria en lista?