manipulação de peças grid.... jogo da memória

2 respostas
judanigno

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

2 Respostas

InSeOfKn

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

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();
	}

}

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!

davidbuzatto

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.

// 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.
[]´s
Criado 14 de outubro de 2010
Ultima resposta 15 de out. de 2010
Respostas 2
Participantes 3