2013-05-16 3 views
0

다음 코드에서 repaint 메서드를 사용하여 사용자 입력 후 화면을 업데이트하려고합니다. 이 게임은 사용자가 자신의 사진을 공개하기 위해 두 장의 카드를 클릭해야하는 카드 게임입니다. 사진이 일치하면 카드는 계속 보이지만 사진이 일치하지 않으면 카드가 뒤집혀 사진이 다시 숨겨집니다.repaint 메서드를 사용하는 방법

두 번째 카드를 선택하면 첫 번째 카드를 볼 수있게되지만 두 번째 카드를 선택하면 일치하는 그림이 선택되거나 두 번째 그림이 공개되지 않고 첫 번째 카드 만 뒤집어지면 두 개의 카드가 모두 보입니다.

도움 주셔서 감사합니다.

addMouseListener(new MouseAdapter(){ 

     public void mouseClicked(MouseEvent e) { 
       int row = e.getX()/(Card.SIZE*2); 
       int col = e.getY()/(Card.SIZE*3); 


            //OPEN means the picture is visible 
       if(cards[row][col].getState() == Card.CLOSED) 
        cards[row][col].setState(OPEN); 

       repaint(); 
       compareCards(row,col); 

     } 
    }); 
} 


public void compareCards(int row, int col){ 

    if(clickNum == 1){ 
     r1 = row; 
     c1 = col; 
     clickNum++; 

    } 
    else if(clickNum == 2){ 
     r2 = row; 
     c2 = col; 

     //The OR accounts for clicking twice on the same tile 
     if(cards[r1][c1].getNum() != cards[r2][c2].getNum() || (r1 == r2 && c1 == c2)){ 
      cards[r1][c1].setState(CLOSED); 
      cards[r2][c2].setState(CLOSED); 
     } 
     clickNum = 1; 
    } 
} 

답변

0

귀하의 비교 카드 기능이 너무 빨리 CLOSED에 카드 상태를 설정하는 것입니다, 그래서 그들은 표시되지 않습니다. 사용해보십시오 :

공공 무효 compareCards (INT 행, INT의 COL) {

try 
{ 
    Thread.sleep(5000);//sleep for five seconds 
}catch(Exception e){} 

if(clickNum == 1){ 
    r1 = row; 
    c1 = col; 
    clickNum++; 

} 
else if(clickNum == 2){ 
    r2 = row; 
    c2 = col; 

    //The OR accounts for clicking twice on the same tile 
    if(cards[r1][c1].getNum() != cards[r2][c2].getNum() || (r1 == r2 && c1 == c2)){ 
     cards[r1][c1].setState(CLOSED); 
     cards[r2][c2].setState(CLOSED); 
    } 
    clickNum = 1; 
} 

}

을이를 통해 켜기 전에 약 5 초 동안 두 카드를 표시해야합니다. 카드가없는 경우 카드를 뒤집어서 처리하는 방법을 구현해야합니다. 나는 여기서 이것을 보지 못하기 때문에 나는 이것을 말하고있다.

관련 문제