Preformatted
/*
* FALLOS: 1.- AL CAMBIAR EL LOGO DE LA FICHA DE UN PLAYER DURANTE EL JUEGO, EL TABLERO MANTIENE LAS FICHAS YA COLOCADAS CON EL LOGO VIEJO
* 2.- CORREGIR ERROR ENTRADA ERRONEA POR TECLADO INT/CHAR
* 3.-
* 4.-
*/
package conecta4;
import java.util.*;
/**
*
* @author venturas
*/
public class Conecta4 {
public static void main(String[] args) { //PLAYER 1 ES X. PLAYER 2 ES 0.
Scanner entrada = new Scanner(System.in);
char[][] matriz = new char[6][7];
int[][] indices= new int[4][2];
int[] marcador= new int[2]; //marcador[0] es player 1 y marcador[1] es Payer2
char []config=new char[5]; //creamos un vector de configuracion para char
int []confign=new int[5]; //creamos un vector de configuracion para int
confign[0]=2; // max score, indica la puntuacion limite para ganar la partida
config[1]='X'; // Logo player1, indica el simbolo para la ficha del player 1
config[2]='O'; // Logo player2, indica el simbolo para la ficha del player 2
config[3]=' '; //Background, indica el fondo del tablero
config[4]='|'; //Border, indica si se desea borde en cada fila/columna
boolean newgame;
int ganador;
int columna; //podria definirse como short
int jugador=1;
do{
iniciar(matriz,config[3]); //iniciamos tablero
marcador[0]=0; //iniciamos marcadores
marcador[1]=0; //iniciamos marcadores
System.out.println("BIENVENIDO A CONECTA4 V3.0");
System.out.println("Puede pulsar 9 en cualquier momento para acceder al menu de configuración");
while(llena(matriz,config)==false && marcador[0]marcador[1])
System.out.println("EL GANADOR ES EL JUGADOR 1");
else if(marcador[0]==marcador[1])
System.out.println("HA HABIDO UN EMPATE!!");
else
System.out.println("EL GANADOR ES EL JUGADOR 2");
newgame=nuevapartida();
}while(newgame);
System.out.println("GRACIAS POR USAR CONNECTA4 V2.0");
}
static int comprobar(char [][]matriz,int[][] indices, char []config){ //devolvera 0 si no hay ganador, 1 si gana el player 1, y 2 si gana el player 2
for(int i=0;i<3;i++) //comprobamos diagonales en direccion abajo y derecha
for(int j=0;j<=3;j++){
if(matriz[i][j]==matriz[i+1][j+1] && matriz[i+1][j+1]==matriz[i+2][j+2] && matriz[i+2][j+2]==matriz[i+3][j+3] && matriz[i][j]==config[1]){
obtenerD(indices,i,j); //se actualiza los indices donde esta el conecta4 que hay que eliminar
return 1;}
if(matriz[i][j]==matriz[i+1][j+1] && matriz[i+1][j+1]==matriz[i+2][j+2] && matriz[i+2][j+2]==matriz[i+3][j+3] && matriz[i][j]==config[2]){
obtenerD(indices,i,j);
return 2;}
}
for(int i=0;i<3;i++) //comprobamos diagonales en direccion abajo y izquierda
for(int j=6;j>=3;j--){
if(matriz[i][j]==matriz[i+1][j-1] && matriz[i+1][j-1]==matriz[i+2][j-2] && matriz[i+2][j-2]==matriz[i+3][j-3] && matriz[i][j]==config[1]){
obtenerI(indices,i,j); //se actualiza los indices donde esta el conecta4 que hay que eliminar
return 1;}
if(matriz[i][j]==matriz[i+1][j-1] && matriz[i+1][j-1]==matriz[i+2][j-2] && matriz[i+2][j-2]==matriz[i+3][j-3] && matriz[i][j]==config[2]){
obtenerI(indices,i,j); //se actualiza los indices donde esta el conecta4 que hay que eliminar
return 2;}
}
for (int i=0;i<6;i++) //comprobamos horizontales
for(int j=0;j<=3;j++){
if(matriz[i][j]==matriz[i][j+1] && matriz[i][j+1]==matriz[i][j+2] && matriz[i][j+2]==matriz[i][j+3] && matriz[i][j]==config[1]){
obtenerH(indices,i,j); //se actualiza los indices donde esta el conecta4 que hay que eliminar
return 1;}
if(matriz[i][j]==matriz[i][j+1] && matriz[i][j+1]==matriz[i][j+2] && matriz[i][j+2]==matriz[i][j+3] && matriz[i][j]==config[2]){
obtenerH(indices,i,j); //se actualiza los indices donde esta el conecta4 que hay que eliminar
return 2;}
}
for (int i=0;i<3;i++) // comprobamos verticales
for (int j=0;j<=6;j++){
if(matriz[i][j]==matriz[i+1][j] && matriz[i+1][j]==matriz[i+2][j] && matriz[i+2][j]==matriz[i+3][j] && matriz[i][j]==config[1]){
obtenerV(indices,i,j); //se actualiza los indices donde esta el conecta4 que hay que eliminar
return 1;}
if(matriz[i][j]==matriz[i+1][j] && matriz[i+1][j]==matriz[i+2][j] && matriz[i+2][j]==matriz[i+3][j] && matriz[i][j]==config[2]){
obtenerV(indices,i,j); //se actualiza los indices donde esta el conecta4 que hay que eliminar
return 2;}
}
return 0; // Todavia no hay ganador y se puede seguir echando fichas.
}
static void echaficha(char[][]matriz, int columna, int player,char []config){ //SE INDICA LA COLUMNA DONDE SE ECHA LA FICHA, DE 1 A 7, MAS INTUITIVO PARA EL JUGADOR
Scanner entrada = new Scanner(System.in);
columna=columna-1; //SE TRADUCE AL INDICE DE COLUMNA, QUE AL EMPEZAR EN 0 (POCO INTUITIVO PARA EL JUGADOR) SE RESTA 1.
char ficha;
boolean llena=false;
while((columna<0 || columna>6)){ //COMPROBAMOS QUE LA COLUMNA ES CORRECTA DE 1 A 7. FALTA COMPROBAR QUE ESTE LLENA
System.out.println("Por favor introduzca un numero de columna valido jugador " + player);
columna=entrada.nextInt();
columna=columna-1; // volvemos a traducir la nueva columna introducida
}
if (matriz[0][columna]==config[1] || matriz[0][columna]==config[2])
llena=true;
while(llena==true){
System.out.println("Columna llena. Por favor introduzca un numero de columna valido jugador " + player);
columna=entrada.nextInt();
columna=columna-1; // volvemos a traducir la nueva columna introducida
if (matriz[0][columna]==config[1] || matriz[0][columna]==config[2]) //volvemos a comprobar la columna
llena=true; //si esta llena sigue true
else
llena=false; //corregimos valor si no esta llena
}
if (player==1)
ficha=config[1];
else
ficha=config[2];
for(int i=5;i>=0;i--) //EMPIEZA DESDE ABAJO Y
if(matriz[i][columna]==config[3]){ //CUANDO ENCUENTRE HUECO,
matriz[i][columna]=ficha; //PLANTA UNA X O UN 0 SEGUN PROCEDA
break;} //Y SE SALE DEL FOR
}
static void iniciar(char [][]matriz,char config){
for (int i=0;i0;i--)
matriz[i][indices[j][1]]=matriz[i-1][indices[j][1]];
matriz[0][indices[j][1]]=config[3];
}
}
static void obtenerD(int[][] conecta4,int i, int j){
conecta4[0][0]=i; conecta4[0][1]=j;
conecta4[1][0]=i+1; conecta4[1][1]=j+1;
conecta4[2][0]=i+2; conecta4[2][1]=j+2;
conecta4[3][0]=i+3; conecta4[3][1]=j+3;
}
static void obtenerI(int[][] conecta4,int i, int j){
conecta4[0][0]=i; conecta4[0][1]=j;
conecta4[1][0]=i+1; conecta4[1][1]=j-1;
conecta4[2][0]=i+2; conecta4[2][1]=j-2;
conecta4[3][0]=i+3; conecta4[3][1]=j-3;
}
static void obtenerH(int[][] conecta4,int i, int j){
conecta4[0][0]=i; conecta4[0][1]=j;
conecta4[1][0]=i; conecta4[1][1]=j+1;
conecta4[2][0]=i; conecta4[2][1]=j+2;
conecta4[3][0]=i; conecta4[3][1]=j+3;
}
static void obtenerV(int[][] conecta4,int i, int j){
conecta4[0][0]=i; conecta4[0][1]=j;
conecta4[1][0]=i+1; conecta4[1][1]=j;
conecta4[2][0]=i+2; conecta4[2][1]=j;
conecta4[3][0]=i+3; conecta4[3][1]=j;
}
static boolean llena(char[][] matriz,char []config){
if((matriz[0][0]==config[1] || matriz[0][0]==config[2]) && (matriz[0][1]==config[1] || matriz[0][1]==config[2]) && (matriz[0][2]==config[1] || matriz[0][2]==config[2]) && (matriz[0][3]==config[1] || matriz[0][3]=='O') && (matriz[0][4]==config[1] || matriz[0][4]==config[2]) && (matriz[0][5]==config[1] || matriz[0][5]==config[2]) && (matriz[0][6]==config[1] || matriz[0][6]==config[2]))
return true; // Matriz llena, no se puede seguir la partida
return false;
}
static void menu(char []config,int []confign){
Scanner en = new Scanner(System.in);
int opc=9;
do{
System.out.println("Menu de CONFIGURACION");
System.out.println("1. Pulse 1 para cambiar la puntuación necesaria para ganar. Actualmente: " +confign[0]);
System.out.println("2. Pulse 2 para cambiar el simbolo de la ficha del jugador 1. Actualmente: " +config[1]);
System.out.println("3. Pulse 3 para cambiar el simbolo de la ficha del jugador 2. Actualmente: " +config[2]);
System.out.println("4. Pulse 4 para cambiar el simbolo del fondo de pantalla. Actualmente: " +config[3]);
System.out.println("5. Pulse 5 para cambiar el simbolo del borde de tablero. Actualmente: " +config[4]);
System.out.println("0. Pulse 0 para volver al juego");
opc=en.nextInt();
switch(opc){
case 1:
System.out.println("Introduzca nueva puntuación necesaria para ganar");
confign[0]=en.nextInt(); break;
case 2:
System.out.println("Introduzca nuevo simbolo de la ficha del jugador 1");
config[1]=en.next().charAt(0); break;
case 3:
System.out.println("Introduzca nuevo simbolo de la ficha del jugador 2");
config[2]=en.next().charAt(0); break;
case 4:
System.out.println("Introduzca nuevo fondo de tablero");
config[3]=en.next().charAt(0); break;
case 5:
System.out.println("Introduzca nuevo borde de tablero");
config[4]=en.next().charAt(0); break;
default:break;
}
}while(opc!=0);
}
}