Sou estudante e no ambito da disciplina de programação java 1 do meu curso foi-nos proposto pelo professor elaborar um jogo da memoria.
Eu criei um array de botões para guardar as imagens, mas ao baralhar as cartas não consigo evitar que elas apareçam mais de duas vezes.
Para baralhar as imagens utilizei o método Math.random().
Nao sei se me fiz compreender mas precisava mesmo de ajuda...
Mr. Brightside
12-06-2008, 21:25
Usa um ArrayList e remove os elementos à medida que eles forem sendo seleccionados.
Podias dar-me um exemplo??
obrigado
sir_atmc
12-06-2008, 21:40
Podia ser simplesmente um array bidimensional. E ou mostrava a carta virada ao contrario (se ainda nao tivesse acertado nessa), ou então mostrava o valor da carta caso ja estivesse sido estabelecido o par.
Mr. Brightside
12-06-2008, 21:44
http://java.sun.com/j2se/1.5.0/docs/api/java/util/ArrayList.html
Usa o método "add" para adicionar e o método "remove" para remover. Atenção que sempre que removes um objecto o tamanho diminui (podes usar o método "size" para obteres o tamanho a cada momento).
olha eu nao consigo fazer por aí...
mas aqui ta o meu codigo pa baralhar
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.event.*;
public class PainelJogo extends JApplet/* implements ActionListener*/ {
private JButton botoes [] = new JButton [10];
private JButton ajudaA;
private ImageIcon imagem [] = new ImageIcon [6];
private JLabel HighScore, cronometro, pontuacao, HS, Crono, pont;
int i;
JMenuBar ficheiro = new JMenuBar();
JMenu jogo = new JMenu("Jogo");
JMenu ajuda = new JMenu("Ajuda");
JMenuItem novo = new JMenuItem("Novo Jogo");
JMenuItem reiniciar = new JMenuItem("Reiniciar");
JMenuItem sair = new JMenuItem("Sair");
public void init() {
for(int i = 0; i <= 9; i++) {
botoes[i] = new JButton();
}
HighScore = new JLabel("HighScore: ");
cronometro = new JLabel("Cronometro: ");
pontuacao = new JLabel("Pontuação: ");
HS = new JLabel(" ");
Crono = new JLabel(" ");
pont = new JLabel(" ");
//IMAGENS
imagem[0] = new ImageIcon ("0.jpg");
imagem[1] = new ImageIcon ("1.jpg");
imagem[2] = new ImageIcon ("2.jpg");
imagem[3] = new ImageIcon ("3.jpg");
imagem[4] = new ImageIcon ("4.jpg");
imagem[5] = new ImageIcon ("5.jpg");
//MENU
this.setJMenuBar(ficheiro);
ficheiro.add(jogo);
ficheiro.add(ajuda);
//ajuda.addActionListener(this);
jogo.add(novo);
jogo.add(reiniciar);
jogo.add(sair);
JPanel painelA = new JPanel(new FlowLayout());
JPanel painelB = new JPanel(new GridLayout(2,5));
painelA.add(HighScore);
painelA.add(cronometro);
painelA.add(pontuacao);
for(int i = 0; i <= 9; i++) {
painelB.add(botoes[i]);
}
add(painelA, BorderLayout.SOUTH);
add(painelB, BorderLayout.CENTER);
setSize(900,600);
for(int i = 0; i <= botoes.length; i++) {
int j = (int)(Math.random()*4);
if (j == 0) {
botoes[i].setIcon(imagem[0]);
}
else if (j == 1) {
botoes[i].setIcon(imagem[1]);
}
else if (j == 2) {
botoes[i].setIcon(imagem[2]);
}
else if (j == 3) {
botoes[i].setIcon(imagem[3]);
}
else if (j == 4) {
botoes[i].setIcon(imagem[4]);
}
}
}
}para já eu ainda só tou a mostrar na imagem para confirmar se baralha
mas ainda ta com o mesmo problema de baralhar, pois aprecem as cartas mais que duas vezes...
Nota: se provavelmente tiver alguma lonha desnecessária provavelmente fui eu que tive a experimentar algo e nao apguei...