Boa tarde pessoal, tudo bem?
Sou novo no forum e estou com uma dúvida:
Estou desenvolvendo um jogo de puzzle númerico:
public class PuzzleCanvas extends Canvas implements CommandListener {
private MIDlet midlet;
private Command sair;
private int[][] pecas = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 15, 14, 0}};
private int posicaoDoZeroX = 3;
private int posicaoDoZeroY = 3;
public PuzzleCanvas(MIDlet midlet) {
setTitle("Jogo Maluco");
this.midlet = midlet;
sair = new Command("Sair", Command.EXIT, 1);
addCommand(sair);
setCommandListener(this);
}
protected void paint(Graphics g) {
int alturaPeca = g.getClipHeight() / 4;
int larguraPeca = g.getClipWidth() / 4;
g.setColor(0xFFFFFF);
g.fillRect(0, 0, g.getClipWidth(), g.getClipHeight());
g.setColor(0x000000);
int pecaY = 0;
for (int j = 0; j < g.getClipWidth() - larguraPeca / 2; j += larguraPeca) {
int pecaX = 0;
for (int i = 0; i < g.getClipHeight() - alturaPeca / 2; i += alturaPeca) {
g.drawRect(j, i, larguraPeca, alturaPeca);
if (pecas[pecaX][pecaY] != 0) {
g.drawString(Integer.toString(pecas[pecaX][pecaY]), j + alturaPeca / 2 - g.getFont().getHeight() / 2, i + larguraPeca / 2, Graphics.TOP | Graphics.HCENTER);
}
pecaX++;
}
pecaY++;
}
}
protected void keyPressed(int keyCode) {
int tecla = getGameAction(keyCode);
if (tecla == Canvas.UP) {
if (posicaoDoZeroX + 1 < 4) {
pecas[posicaoDoZeroX][posicaoDoZeroY] = pecas[posicaoDoZeroX + 1][posicaoDoZeroY];
posicaoDoZeroX += 1;
}
}
if (tecla == Canvas.DOWN) {
if (posicaoDoZeroX - 1 > -1) {
pecas[posicaoDoZeroX][posicaoDoZeroY] = pecas[posicaoDoZeroX - 1][posicaoDoZeroY];
posicaoDoZeroX -= 1;
}
}
if (tecla == Canvas.LEFT) {
if (posicaoDoZeroY + 1 < 4) {
pecas[posicaoDoZeroX][posicaoDoZeroY] = pecas[posicaoDoZeroX][posicaoDoZeroY + 1];
posicaoDoZeroY += 1;
}
}
if (tecla == Canvas.RIGHT) {
if (posicaoDoZeroY - 1 > -1) {
pecas[posicaoDoZeroX][posicaoDoZeroY] = pecas[posicaoDoZeroX][posicaoDoZeroY - 1];
posicaoDoZeroY -= 1;
}
}
pecas[posicaoDoZeroX][posicaoDoZeroY] = 0;
repaint();
}
public void commandAction(Command c, Displayable d) {
if (c == this.sair) {
midlet.notifyDestroyed();
}
}
só que estou com dificuldades na criação de uma função que randomize os valores do array sem repetir. Em JSE eu consegui desenvolver a função, mas não consigo achar substitutos pro ME:
Código: ? Selecionar ? ? Expandir ?
public class Sorteio {
public static void main(String[] args) {
int qtdeNumeros = 16; //qtde de numeros q vc vai sortear
int[] posicoesRand = new int[qtdeNumeros]; //guarda os numeros sorteados.
Random randGen = new Random();
//inicializa o array
for (int i = 1; i < qtdeNumeros; i++) {
posicoesRand[i] = i;
}
//sorteia sem repeticoes
int temp, randomPosition;
for (int i = 1; i < qtdeNumeros; i++) {
randomPosition = randGen.nextInt(qtdeNumeros - 1);
temp = posicoesRand[i];
posicoesRand[i] = posicoesRand[randomPosition];
posicoesRand[randomPosition] = temp;
}
for (int i = 1; i < posicoesRand.length; i++) {
System.out.println(posicoesRand[i]);
}
}
}
Alguem poderia me dar alguma dica?
Agradeço a todos