JuegoDeNumeros.java_



public class JuegoDeNumeros
{
	public static void main(String R[]) { new JuegoDeNumeros(); }

	public JuegoDeNumeros()
	{
		int Matriz[][] = {{8, 6, 3}, {5, 1, 0}, {2, 4, 7}};
		MuestraMatriz(Matriz);
		Ciclo(Matriz);
	}


	void MuestraMatriz(int Matriz[][])
	{
		int r=0, c=0;
		String Linea = "";

		for(r=0; r < 3; r++)
		{
			Linea = "";
			for(c=0; c < 3; c++) Linea += "\t" + Matriz[r][c];
			System.out.println(Linea);
		}
	}

	void Ciclo(int Matriz[][])
	{
		int Numero = 1;

		while(Numero != 0)
		{
			Numero = Integer.parseInt(Lectura.LeeDato("Cual quieres mover?: "));
			Matriz = Intercambia(Numero, Matriz);
			MuestraMatriz(Matriz);
		}
	}

	int[][] Intercambia(int Num, int Matriz[][])
	{
		int r=0, c=0;
		int Posicion[] = new int[2];

		for(r=0; r < 3; r++)
                {
			for(c=0; c < 3; c++)
				if ( Num == Matriz[r][c] )
				{
					Posicion = PosicionDelCero(Matriz, r, c);
					if (Posicion[0] != -1 )
					{
						if ( Matriz[Posicion[0]][Posicion[1]] == 0 )
						{
							Matriz[Posicion[0]][Posicion[1]] = Matriz[r][c];
							Matriz[r][c] = 0;
						}
						return Matriz;
					}
					else { System.out.println("Movimiento invalido ..."); }
				}
		}
		
		return Matriz;
	}

	int[] PosicionDelCero(int Matriz[][], int r, int c)
	{
		int Pos[] = {-1, -1};

		if ( r > 0 ) if ( Matriz[r-1][c] == 0 ) { Pos[0] = r-1; Pos[1] = c; }	// arriba
		if ( r < 2 ) if ( Matriz[r+1][c] == 0 ) { Pos[0] = r+1; Pos[1] = c; }	// abajo
		if ( c > 0 ) if ( Matriz[r][c-1] == 0 ) { Pos[0] = r; Pos[1] = c-1; }   // izquierda
		if ( c < 2 ) if ( Matriz[r][c+1] == 0 ) { Pos[0] = r; Pos[1] = c+1; }   // derecha
		
		return Pos;
	}
}