VieRa 0 Denunciar post Postado Junho 8, 2011 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 //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)) ; } 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 //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 que irá selecionar o paciente 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(); } } } Compartilhar este post Link para o post Compartilhar em outros sites