olá, estou tentando fazer(pq conseguir ta difícil, só com a ajuda de vcs, mas é o primeiro né gente -) um jogo da memória, como meu primeiro programa usando o swing, criei a tela inicial, e consegui criar o tabuleiro utilizando grid e colocar as imagens, agora não sei como fazer para sortear para elas mudarem de lugar a cada novo início, alem de ñ saber como colocar as funções básicas de um jogo da memória nas peças (virada, desvirada, já com par)…
gracias
[]'s
deu certo a minha resposta no outro tópico?
acho que mudar eles de lugar seria complicado mais o que da de fazer e trocar as imagens
[code]import java.awt.GridLayout;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class JogoDeMemoria extends JFrame{
private JButton[][] btosTab = new JButton[5][5]; //no caso de um tabuleiro de 5 por 5
JPanel panelTab;
JogoDeMemoria(){
super("Jogo da Memoria");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(1000,500);
confPanelTab();
this.setVisible(true);
}
private void confPanelTab(){
panelTab = new JPanel(new GridLayout(5,5)); // crio o panel que servira de tabuleiro;
criaBtosTab();
this.add(panelTab); // adiciono ele na janela;
}
private void criaBtosTab(){
for(int i=0; i<btosTab.length; i++){ // loop que percore as linhas do tabuleiro
for(int j=0;j<btosTab[i].length; j++){ //loop que percore as colunas do tabuleiro
btosTab[i][j] = new JButton(); //tirei otesto que colocava nos JButtons
panelTab.add(btosTab[i][j]);
}
}
}
public void embaralha(){
for(int i=0; i<btosTab.length; i++){// loop para zerar as images (no exemplo to zerando o texto)
for(int j=0;j<btosTab[i].length; j++){
btosTab[i][j].setText(""); //tirei o texto que colocava nos JButtons
}
}
int contmodificado = 0;
do{
int coluna = new Random().nextInt(btosTab.length);
int linha = new Random().nextInt(btosTab[coluna].length);
if(!btosTab[coluna][linha].getText().isEmpty()){ //verifico se o btosTab sorteado ja esta com texto (no seu caso seria se ja esta com imagem com imagem)
continue; //se estiver recomesa o loop
}
contmodificado++; // adiciona um nos sorteados
btosTab[coluna][linha].setText("Botão "+contmodificado);
}while(contmodificado<btosTab.length*btosTab[0].length);
}
public static void main(String[] args) {
JogoDeMemoria jogo =new JogoDeMemoria();
jogo.embaralha();
}
}[/code]
modifiquei o exemplo que te dei no outro tópico para colocar os nomes de forma aleatorio
estuda ele e vê oque você aproveita!
até mais!
Você pode armazenar as imagens ou referências para elas em uma matriz. Ai você consegue embaralhar elas e então mostrar no grid.
Imagine que a matriz do código a seguir armazena referências para às imagens.
[code]// cinco linhas por sete colunas
// troque TipoValorArmazenado pelo tipo que você está usando
// para referenciar suas imagens
TipoValorArmazenado[][] matriz = new TipoValorArmazenado[5][7];
// java.util.Random
Random r = new Random();
for ( int i = 0; i < matriz.length; i++ ) {
for ( int j = 0; j < matriz[i].length; j++ ) {
// gera um índice aleatório para linha e coluna
// o método nextInt(int) de Random retorna um valor pseudoaleatório no intervalo [0;int[
// ou seja, de 0 (inclusive) ao valor passado por parâmetro (exclusivo)
int linha = r.nextInt( matriz.length ); // retorna de 0 à 4
int coluna = r.nextInt( matriz[i].length ); // retorna de 0 à 6
// troca posicao atual pela sorteada
TipoValorArmazenado temp = matriz[i][j];
matriz[i][j] = matriz[linha][coluna];
matriz[linha][coluna] = temp;
}
}
// aqui você itera pela matriz e vai setando novamente as imagens
// na sua grade, pois depois da execução do código anterior,
// sua matriz vai estar interamente embaralhada.[/code]
[]´s