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:
#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; }
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.