/** * Arreglo de int[3][3], representa una de las 6 caras del cubo. * Los numeros contenidos en el arreglo representan el color de * cada casilla. * 1 al 6 : Color de la casilla, seran determinados por otra clase. * 0 : Comodin, usado en la busqueda de patrones. */ public class Cara { /** * Arreglo de int[3][3], representa una de las 6 caras del cubo. */ private int[][] casilla = {{0,0,0},{0,0,0},{0,0,0}}; /** * Crea una nueva cara del color especificado por 'color'. * @param color Las 9 casillas seran del 'color' especificado. */ public Cara (int color) { for (int i = 0; i < 3; i++) for (int j = 0; j < 3 ; j++) casilla[i][j] = color; } /** * Crea una nueva cara con colores especificados por un arreglo. * @param arreglo Arreglo de 3x3 que especifica los colores de la cara. */ public Cara(int[][] arreglo) { int f,c; for (f=0; f<3; f++) for (c=0; c<3; c++) casilla[f][c] = arreglo[f][c]; } /** * Retornta el arreglo de 3x3 que especifica los colores de esta cara. */ public int[][] getArreglo() { return casilla; } /** * Retorna la fila 'f' de esta cara. */ public int[] getFila(int f) { int[] tmp = {0,0,0}; tmp[0] = casilla[f][0]; tmp[1] = casilla[f][1]; tmp[2] = casilla[f][2]; return tmp; } /** * Retorna la fila 'f' invertida de esta cara. */ public int[] getFilaInv(int fila) { int[] tmp = {0,0,0}; tmp[0] = casilla[fila][2]; tmp[1] = casilla[fila][1]; tmp[2] = casilla[fila][0]; return tmp; } /** * Retorna la columna 'col' de esta cara. */ public int[] getColumna(int col) { int[] tmp = {0,0,0}; tmp[0] = casilla[0][col]; tmp[1] = casilla[1][col]; tmp[2] = casilla[2][col]; return tmp; } /** * Retorna la columna 'col' invertida de esta cara. */ public int[] getColumnaInv(int col) { int[] tmp = {0,0,0}; tmp[0] = casilla[2][col]; tmp[1] = casilla[1][col]; tmp[2] = casilla[0][col]; return tmp; } /** * Cambia los colores de la fila 'f' por los especificados por el arreglo 'c'. */ public void setFila(int f, int[] c) { casilla[f][0] = c[0]; casilla[f][1] = c[1]; casilla[f][2] = c[2]; } /** * Cambia los colores de la columna 'col' por los especificados por el * arreglo 'c'. */ public void setColumna(int col, int[] c) { casilla[0][col] = c[0]; casilla[1][col] = c[1]; casilla[2][col] = c[2]; } /** * Reordena las casillas (3x3) de esta cara, para que queden como si se les * ubiera hecho un giro de 90 grados en sentido reloj. */ public Cara rotar(int giros) { int tmp; for (int i = 0; i < giros; i++) { tmp = casilla[0][0]; casilla[0][0] = casilla[2][0]; casilla[2][0] = casilla[2][2]; casilla[2][2] = casilla[0][2]; casilla[0][2] = tmp; tmp = casilla[0][1]; casilla[0][1] = casilla[1][0]; casilla[1][0] = casilla[2][1]; casilla[2][1] = casilla[1][2]; casilla[1][2] = tmp; } return this; } /** * Retorna una copia de esta Cara. */ public Cara clone() { int f, c; int[][] arreglo = {{0,0,0},{0,0,0},{0,0,0}}; for (f = 0; f < 3; f++) for(c = 0; c < 3; c++) arreglo[f][c] = casilla[f][c]; return new Cara(arreglo); } /** * Invertir verticalmente esta cara. */ public void invVert() { int tmp = casilla[0][0]; casilla[0][0] = casilla[2][0]; casilla[2][0] = tmp; tmp = casilla[0][1]; casilla[0][1] = casilla[2][1]; casilla[2][1] = tmp; tmp = casilla[0][2]; casilla[0][2] = casilla[2][2]; casilla[2][2] = tmp; } }