public class QuebraCabeca {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code app
//System.out.println("Digite 1 para começar o jogo");
Scanner x = new Scanner(System.in);
//if (x.nextInt() == 1) {
System.out.println("=============================Quebra=Cabeça===================================");
System.out.println("Para mover zero : digite (1)cima - (2)baixo - (3)esquerda - (4)direita ");
System.out.println("==============================================================================");
Tabuleiro tab = new Tabuleiro();
tab.criartabuleiro();
tab.embaralhar();
tab.imprime();
while(tab.getMatriz() != tab.getMatrizPronta() ){ //Queria otimizar essa parte
System.out.println("Escolha uma posição:");
tab.setEscolha(x.nextInt());
tab.mover();
System.out.println("==========================================================================");
tab.imprime();
}
//}
}
}
package jogoquebracabeca;
import java.util.Random;
import java.util.Scanner;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
public class Tabuleiro extends Peca {
private String [][] matriz = new String[4][4];
private String [][] matrizPronta = new String[4][4];
private int[] posicaov = new int[2];
private int[] posicaop = new int[2];
private int escolha;
Random rad = new Random();
public void criartabuleiro() {
int cont = 1;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
matriz[i][j] = Integer.toString(cont);
matrizPronta[i][j] = Integer.toString(cont);
cont++;
}
}
matriz[3][3] = " " ;
matrizPronta[3][3]= " ";
}
public String [][] getMatriz() {
return matriz;
}
public String[][] getMatrizPronta() {
return matrizPronta;
}
public void embaralhar() {
int index1;
int index2;
String aux;
int cont = 1;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (j == 3 && i == 3) {
break;
}
index1 = rad.nextInt(3);
index2 = rad.nextInt(3);
aux = matriz[index1][index2];
matriz[index1][index2] = matriz[i][j];
matriz[i][j] = aux;
}
}
}
public void imprime() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
System.out.print(" " + matriz[i][j]);
}
System.out.println("");
}
}
public void mover() {
posicaovazia();
switch (escolha) {
case 1://Mover para cima
{
if (verificacaomov(posicaov[0], posicaov[1], escolha)) {
String aux = matriz[posicaov[0]][posicaov[1]];
matriz[posicaov[0]][posicaov[1]] = matriz[posicaov[0] - 1][posicaov[1]];
matriz[posicaov[0] - 1][posicaov[1]] = aux;
}
break;
}
case 2://Mover para baixo
{
if (verificacaomov(posicaov[0], posicaov[1], escolha)) {
String aux = matriz[posicaov[0]][posicaov[1]];
matriz[posicaov[0]][posicaov[1]] = matriz[posicaov[0] + 1][posicaov[1]];
matriz[posicaov[0] + 1][posicaov[1]] = aux;
}
break;
}
case 3://Mover para esquerda
{
if (verificacaomov(posicaov[0], posicaov[1], escolha)) {
String aux = matriz[posicaov[0]][posicaov[1]];
matriz[posicaov[0]][posicaov[1]] = matriz[posicaov[0]][posicaov[1] - 1];
matriz[posicaov[0]][posicaov[1] - 1] = aux;
}
break;
}
case 4://Mover para direita
{
if (verificacaomov(posicaov[0], posicaov[1], escolha)) {
String aux = matriz[posicaov[0]][posicaov[1]];
matriz[posicaov[0]][posicaov[1]] = matriz[posicaov[0]][posicaov[1] + 1];
matriz[posicaov[0]][posicaov[1] + 1] = aux;
}
break;
}
default:
System.out.println("opção invalida");
break;
}
}
public boolean verificacaomov(int linha, int coluna, int opcao) {
boolean valido = true;
if (opcao == 1 && linha == 0) {
System.out.println("Esse movimento é invalido.");
valido = false;
}
if (opcao == 2 && linha == 3) {
System.out.println("Esse movimento é invalido.");
valido = false;
}
if (opcao == 3 && coluna == 0) {
System.out.println("Esse movimento é invalido.");
valido = false;
}
if (opcao == 4 && coluna == 3) {
System.out.println("Esse movimento é invalido.");
valido = false;
}
return valido;
}
public void setEscolha(int escolha) {
this.escolha = escolha;
}
private void posicaovazia() {
int cont = 1;
for (int x = 0; x < 4; x++) {
for (int y = 0; y < 4; y++) {
if (matriz[x][y] == " ") {
posicaov[0] = x;
posicaov[1] = y;
} else {
}
}
}
}
private void posicaopeca() {
int cont = 1;
for (int p = 0; p < 4; p++) {
for (int o = 0; o < 4; o++) {
if (matriz[p][o] == super.peca) {
posicaop[0] = p;
posicaop[1] = o;
}
}
}
}
}
Alguém teria alguma uma ideia como de otimizar este código ?
Pois, estou querendo fazer interface gráfica dele.
package jogoquebracabeca;
/**
*
* @author Ana Clara
*/
public class Peca {
protected String peca;
public String getPeca() {
return peca;
}
public void setPeca(String peca) {
this.peca = peca;
}
}