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);
           
    }
    
    }