Está en la página 1de 8

/*

Universidad Del Valle de Guatemala


Programacion Orientada a Objetos
Seccion 20
PROYECTO # 1: RUBIX
Autores: Jonathan Robles (10267), Stephen Chavez (10490), Diego Najera (0934
3)
Septiembre de 2010.
Descripcion: El siguiente archivo contiene la clase Juego en la que se
almacenan una serie de atributos y metodos propios de la clase utilizados
en la clase que contiene el metodo principal.
*/
//Se importan los archivos necesarios.
import java.util.Scanner;
import java.util.Random;
//Se crea la clase
public class Juego
{
//Atributos
private Jugador oJugador; //Se crea un objeto de la clase Jugador (Agreg
acion)
private int[][]rubix; //Rubix ideal
private int[][]rubix2; // Rubix que el usuario modifica
private int[][]rubix3; //Rubix de apoyo.
private int[][]rubix4; //Rubix de apoyo.
//Variables
int drubix; //Determina la dimension del Rubix
//Objetos
Scanner ing=new Scanner(System.in); //Permite ingresar datos al usuario.
Random al=new Random(); //Permite escoger datos aleatorios.
//Metodos
//Constructor personalizado: Crea los rubix utilizados durante el progra
ma.
public Juego(int drubix)
{
int num;
rubix = new int[drubix][drubix]; //Rubix ideal
rubix2 = new int[drubix][drubix]; //Rubix que el usuario modific
a
rubix3 = new int[drubix][drubix]; //Rubix de apoyo
rubix4 = new int[drubix][drubix]; //Rubix de apoyo
for(int i =0;i<rubix.length;i++)
{ //Esta secuencia de ciclos crea valores aleatorios entre 1 y
3
for(int j =0;j<rubix.length;j++)
{
num=al.nextInt(2)+1;
rubix2[i][j]=num; //Los 4 rubix poseen los mismo
s
rubix[i][j]=num; //valores aleatorios
rubix3[i][j]=num;
rubix4[i][j]=num;
}
}
}
//Metodos Set
public void setDRubix(int drubix) //Permite modificar la dimension del r
ubix.
{
this.drubix=drubix;
}
//Metodos Get
public int getDrubix() //Permite obtener el valor de drubix.
{
return drubix;
}

//Metodos de Servicio
//Este metodo permite hacer el movimiento haciar abajo.
public void movAb(int columna)
{
rubix2[0][columna]=rubix3[rubix.length-1][columna];
for(int j=1;j<rubix.length;j++)
{
rubix2[j][columna]=rubix3[j-1][columna];
}
copiarMatriz(rubix3,rubix2);
}
//Este metodo permite hacer el movimiento hacia arriba.
public void movAr(int columna)
{
rubix2[rubix.length-1][columna]=rubix3[0][columna];
for (int j=rubix.length-2;j>-1;j--)
{
rubix2[j][columna]=rubix3[j+1][columna];
}
copiarMatriz(rubix3,rubix2);
}
//Este metodo permite hacer el movimiento hacia la derecha.
public void movDer(int fila)
{
rubix2[fila][0]=rubix3[fila][rubix.length-1];
for (int i=1;i<rubix.length;i++)
{
rubix2[fila][i]=rubix3[fila][i-1];
}
copiarMatriz(rubix3,rubix2);
}
//Este metodo permite hacer el movimiento hacia la izquierda.
public void movIzq(int fila)
{
rubix2[fila][rubix.length-1]=rubix3[fila][0];
for(int i=rubix.length-2;i>-1;i--)
{
rubix2[fila][i]=rubix3[fila][i+1];
}
copiarMatriz(rubix3,rubix2);
}
//Metodo utilizado en los metodos de movimiento.
public void copiarMatriz(int[][]rubix3,int[][]rubix2)
{
for(int i=0;i<rubix.length;i++)
{
for(int j=0;j<rubix.length;j++)
{
rubix3[i][j]=rubix2[i][j]; //Rubix 3 igual a rub
ix2
}
}
}
//Metodo utilizado en los metodos de restaurar matriz.
public void copiarMatriz2(int[][]rubix2,int[][]rubix4)
{
for(int i=0;i<rubix.length;i++)
{
for(int j=0;j<rubix.length;j++)
{
rubix2[i][j]=rubix4[i][j]; //Rubix 2 igual a rub
ix 4.
}
}
}
//Metodo utilizado en los metodos de revolver matriz.
public void copiarMatriz3(int[][]rubix4,int[][]rubix2)
{
for(int i=0;i<rubix.length;i++)
{
for(int j=0;j<rubix.length;j++)
{
rubix4[i][j]=rubix2[i][j]; //Rubix 4 igual a rub
ix 2.
}
}
}
//Primer metodo que revuelve la matriz
public void revMat()
{
movDer(rubix.length/2);
movIzq(rubix.length/3);
movAr(rubix.length/4);
movAb(rubix.length/6);
movDer(rubix.length/9);
movIzq(rubix.length/7);
movAr(rubix.length/4);
movAb(rubix.length/7);
copiarMatriz3(rubix4,rubix2);
}
//Segundo metodo que revuelve la matriz
public void revMat2()
{
movDer(rubix.length/3);
movIzq(rubix.length/2);
movAr(rubix.length/6);
movAb(rubix.length/6);
movDer(rubix.length/7);
movIzq(rubix.length/6);
movAr(rubix.length/3);
movAb(rubix.length/5);
copiarMatriz3(rubix4,rubix2);
}
//Tercer metodo que revuelve la matriz
public void revMat3()
{
movDer(rubix.length/5);
movIzq(rubix.length/3);
movAr(rubix.length/9);
movAb(rubix.length/6);
movDer(rubix.length/6);
movIzq(rubix.length/2);
movAr(rubix.length/6);
movAb(rubix.length/4);
copiarMatriz3(rubix4,rubix2);
}
//Primer metodo que restaura la matriz
public void resMat()
{
copiarMatriz2(rubix2,rubix4);
impMatriz();
System.out.println("\n Asi era su matriz inicial...");
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movAr(rubix.length/7);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movAb(rubix.length/4);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movDer(rubix.length/7);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movIzq(rubix.length/9);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movAr(rubix.length/6);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movAb(rubix.length/4);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movDer(rubix.length/3);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movIzq(rubix.length/2);
impMatriz();
System.out.println("\n Drubix iguales!");
}
//Segundo metodo que restaura la matriz
public void resMat2()
{
copiarMatriz2(rubix2,rubix4);
impMatriz();
System.out.println("\n Asi era su matriz inicial...");
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movAr(rubix.length/5);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movAb(rubix.length/3);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movDer(rubix.length/6);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movIzq(rubix.length/7);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movAr(rubix.length/6);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movAb(rubix.length/6);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movDer(rubix.length/2);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movIzq(rubix.length/3);
impMatriz();
System.out.println("\n Drubix iguales!");
}
//Tercer metodo que restaura la matriz
public void resMat3()
{
copiarMatriz2(rubix2,rubix4);
impMatriz();
System.out.println("\n Asi era su matriz inicial...");
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movAr(rubix.length/4);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movAb(rubix.length/6);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movDer(rubix.length/2);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movIzq(rubix.length/6);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movAr(rubix.length/6);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movAb(rubix.length/9);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movDer(rubix.length/3);
impMatriz();
System.out.println("\n Presione ENTER para siguiente...");
ing.nextLine();
movIzq(rubix.length/5);
impMatriz();
System.out.println("\n Rubix iguales!");
}
//Metodo que es utilizado en los metodos de restauracion
//Para ir mostrando paso por paso como resolver el juego.
//Imprime las matrices.
public void impMatriz()
{
System.out.println("\n -----------| RUBIX IDEAL |---------
-");
System.out.println("");
System.out.print(" ");
for(int i=0;i<rubix[0].length;i++)
{
System.out.print("_"+(i+1));
}
System.out.println("");
for(int i=0;i<rubix.length;i++)
{
System.out.print(" "+(i+1)+"-");
for(int j=0;j<rubix[0].length;j++)
{
System.out.print(rubix[i][j]+" ");
}
System.out.println();
}
System.out.println("\n -----------| RUBIX INICIAL |---------
-");
System.out.println("");
System.out.print(" ");
for(int i=0;i<rubix[0].length;i++)
{
System.out.print("_"+(i+1));
}
System.out.println("");
for(int i=0;i<rubix.length;i++)
{
System.out.print(" "+(i+1)+"-");
for(int j=0;j<rubix[0].length;j++)
{
System.out.print(rubix2[i][j]+" ");
}
System.out.println();
}
}
//Este metodo determina cuando el usuario ha ganado, es decir cuando las
//dos matrices son identicas
public boolean gana()
{
boolean ganar=false;
for(int i=0;i<rubix.length;i++) //Recorre filas
{
for(int j=0;j<rubix.length;j++) //Recorre columnas
{
if(rubix[i][j]==rubix2[i][j])//Revisa casilla po
r casilla
{
ganar=true; //Se cumple solo si todas so
n iguales.
}
else
{
ganar=false; //Con una casilla que produ
zca false:
i = rubix.length; //Se igualan las varia
bles a rubix.length
j = rubix.length; //de modo que salga de
l ciclo y su valor
} //de retorno sea false.
}
}
return ganar; //Devuelve true o false.
}
//Metodo toString: Es lo que se muestra al llamar a un objeto de la clas
e.
public String toString()
{
String desc=" ";
//Se crea el rubix inmodificable
desc += "\n -----------| RUBIX IDEAL |----------\n";
desc += "\n";
desc+=" ";
for(int i=0;i<rubix[0].length;i++)
{
desc+="_"+(i+1);
}
desc+="\n";
for(int i=0;i<rubix.length;i++)
{
desc+=" "+(i+1)+"-";
for(int j=0;j<rubix[0].length;j++)
{
desc+=rubix[i][j]+" ";
}
desc+="\n";
}
desc += "\n";
//Se crea el rubix modificable por el jugador.
desc += "\n -----------| RUBIX INICIAL |----------\n";
desc += "\n";
desc += " ";
for(int i=0;i<rubix[0].length;i++)
{
desc+="_"+(i+1);
}
desc+="\n";
for(int i=0;i<rubix.length;i++)
{
desc+=" "+(i+1)+"-";
for(int j=0;j<rubix[0].length;j++)
{
desc+=rubix2[i][j]+" ";
}
desc+="\n";
}
return desc;
}
}