Estou desenvolvendo um jogo da memoria para um trabalho da faculdade e estou com um problema e n consigo resolver
estou usando labels e o evento mouseClicked
o problema é o seguinte, quando clico na segunda carta(segundo label), faço ela ser mostrada no label(desvirda) e comprada com a primeira carta clicada
como na execução isso acontece muito rapido o usuario não tem tempo de ver a exibição da carta no segundo label
quero usar um método para travar(pausar) a execução por alguns segungos(2/3seg no max) antes q as cartas sejam comparadas para q o usuario possa ver a exibição
ja tentei varias formas e pesquisei muito, thread.sleep, ateh mesmo tentei realizar uma parada na gambiarra com um método
[code]
//método pausa, faz uma pause de n segundos
public void pausa(int n){
long t0, t1;
t0 = System.currentTimeMillis();
do{
t1 = System.currentTimeMillis();
}while ((t1 - t0) < (n * 1000)) ;
}[/code]
mas o problema eh que quando chamo o método para pausar, seja ele esse ou ateh mesmo o thread.sleep ou outro
no momento do click o método de pausa eh chamado primerio doq os métodos de exibição e comparação das cartas
ou seja, quando clico na segunda carta, o sistema trava por 3 segundos(por exemplo) e depois faz as comparações e exibição
não sei como resolver isso, se eh problema em chamar o evento mouseClicked ou usar um label
n faço a minima idéai de como solucionar e ja tentei varias formas
se alguem souber alguma coisa ou tiver alguma idéia manda ai
esse é o código do evento mouseClicked dos meus labels se for preciso
[code]
//verifica se a carta ja não esta sendo exibida
if(cartas[0].getEstado()==false){
//verifica se o label está habilitado
if(lbCarta1.isEnabled()!=false){
//verifica se é o primeiro click
if(click<1){
//incrementa o numero de clicks para 1(um)
click=1;
//mostra a carta clickada
lbCarta1.setIcon(new ImageIcon(cartas[0].changeEstado()));
//salva a carta do primeiro click
carta1 = new Carta(cartas[0].getId(), cartas[0].getImgCarta());
}
//verifica se é o segundo click
else if(click==1){
//incrementa o numero de jogadas
jogadas++;
//preenche o campo das jogadas
textJogadas.setText(jogadas.toString());
//mostra a carta clickada
lbCarta1.setIcon(new ImageIcon(cartas[0].changeEstado()));
//salva a carta do segundo click
carta2 = new Carta(cartas[0].getId(), cartas[0].getImgCarta());
//-----
//AQUI DEVERIA SER FEITA UMA PAUSA
//-----
//verifica se as cartas formam um par
if(engine.verificaJogada(carta1, carta2)==true){//se sim
//busca as cartas no array das cartas as salva dizendo que foram descobertas
for(int i=0;i<cartas.length;i++){
if(carta1.getId()==cartas[i].getId())
cartas[i].setDescoberta(true);
if(carta2.getId()==cartas[i].getId())
cartas[i].setDescoberta(true);
}
//incrementa o score
score=score+30;
//preenche o campo dos pontos
textPontos.setText(score.toString());
}
//retorna o numero de clicks para 0(zero)
click=0;
//verifica o fim do jogo
if(engine.getFim(cartas)==true){
//avisa fim do jogo
Object[] opcoes1 = {"Sim", "Não"};
int op = JOptionPane.showOptionDialog(null, "Fim do jogo!\n Continuar jogando?\n", "Fim de Jogo",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE, null, opcoes1, opcoes1[0]);
if(op==0){
cartas=engine.startJogo(dif, categ);
//faz o score final - score=score-(jogadas*2)
score=score-(jogadas*2);
//preenche o campo de pontos
textPontos.setText(score.toString());
//zera as jogadas
jogadas=0;
//preenche o campo das jogadas
textJogadas.setText(jogadas.toString());
}
else{
dispose();
}
}
//vira as cartas novamente
inicializaCartas();
}
}
}[/code]