viernes, 14 de marzo de 2014

Unidad 3 Ejercicio 29: Juego acertar parejas de números

Se empleará sólo la clase tablero en lugar de definir tablero y una clase partida...



package unidad3ejercicio29;
import java.util.Scanner;

/**
*
* @author juan
*/
public class Unidad3Ejercicio29 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int fil=3,col=3,x1,x2,y1,y2;
     
        Tablero partida = new Tablero(fil,col);
  

      Scanner leo = new Scanner(System.in);
     
        partida.dibujarDescubierta();
        do
        {
            System.out.println("Introduzca los valores de x1,y1,x2,y2");
            x1=leo.nextInt();
            y1=leo.nextInt();
            x2=leo.nextInt();
            y2=leo.nextInt();
            //partida.dibujarTablero();
            partida.comprueba(y1,x1, y2,x2);
           // partida.dibujarDescubierta();
         
        } while (partida.getAciertos()<(fil*col/2));
 
    }
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package unidad3ejercicio29;
import java.util.Random;
/**
*
* @author juan
*/
public class Tablero {
    private int filas;
    private int columnas;
    private int [][]matriz;
    private int [][]descubierta;
    private int intentos;
    private int aciertos;

    public Tablero(int filas, int columnas) {
        if(filas>0 && columnas>0)
        {
            this.filas = filas;
            this.columnas = columnas;
        }
        else {
            this.filas=4;
            this.columnas=4;
        }
        intentos=0;
        aciertos=0;
        matriz= new int[this.filas][this.columnas];
        descubierta= new int[this.filas][this.columnas];
        this.generaTabla();
     
    }
 
    public boolean  comprueba(int x1,int y1, int x2, int y2){
     
        if ((x1>=0 && x1<columnas) && (x2>=0 && x2<columnas) &&(y1>=0 && y1<filas) &&(y2>=0 && y2<filas))
        {
            ++intentos;
            this.muestraDos(x1, y1, y2, x2);
         
         
            if (matriz[x1][y1]==matriz[x2][y2])
            {
                descubierta[x1][y1]=matriz[x1][y1];
                descubierta[x2][y2]=matriz[x2][y2];
                ++aciertos;
            }
            this.dibujarDescubierta();
            return (matriz[x1][y1]==matriz[x2][y2]);
        }
        else return false;
     
    }
    public void  muestraDos(int x1,int y1, int x2, int y2){
        System.out.println("");
        System.out.print("   X:");
        for (int i = 0; i < columnas; i++) {
            System.out.printf("\t %d ",i);
        }
     
        System.out.println();
        System.out.print("Y   ");
        System.out.println();
        for (int i = 0; i < filas; i++) {
            System.out.printf("%d",i);
            System.out.printf("| ");
            for (int j = 0; j < columnas; j++) {
                if ((x1==j && y1==i)||(x2==j && y2==i)) System.out.printf("\t %d",matriz[i][j]);
                else System.out.printf("\t ");
            }
            System.out.println();
        }
    }

    public int getAciertos() {
        return aciertos;
    }
 
    private void generaTabla(){
        Random aleatorio = new Random();
        int num=1;
        int fil,col;
        int total=filas*columnas;
     
        while (num<=total/2)
        {
             
                do
                {
                    fil=aleatorio.nextInt(filas);
                    col=aleatorio.nextInt(columnas);
                }
                while(matriz[fil][col]!=0);
                matriz[fil][col]=num;
             
                 do
                {
                    fil=aleatorio.nextInt(filas);
                    col=aleatorio.nextInt(columnas);
                }
                while(matriz[fil][col]!=0);
                matriz[fil][col]=num;
                ++num;
            }
     
     
    }
 
    public void dibujarTablero(){
        for (int i = 0; i < filas; i++) {
            for (int j = 0; j < columnas; j++) {
                System.out.printf("\t %d",matriz[i][j]);
            }
            System.out.println();
        }
    }
    public void dibujarDescubierta(){
        System.out.println("");
        System.out.print("   X:");
        for (int i = 0; i < columnas; i++) {
            System.out.printf("\t %d ",i);
        }
     
        System.out.println();
        System.out.print("Y   ");
        for (int i = 0; i < columnas; i++) {
         
     
        System.out.print("========");
        }
        System.out.println();
        for (int i = 0; i < filas; i++) {
            System.out.printf("%d",i);
            System.out.printf("| ");
            for (int j = 0; j < columnas; j++) {
                System.out.printf("\t %d",descubierta[i][j]);
            }
            System.out.println();
        }
        System.out.println("");
        System.out.println("ACIERTOS:"+aciertos);
        System.out.println("INTENTOS:"+intentos);
    }
 
 
}