如何使用重绘方法

时间:2013-05-16 23:04:53

标签: repaint mouselistener

我正在尝试使用以下代码中的重绘方法在用户输入后更新屏幕。游戏是纸牌游戏,用户必须点击两张牌才能显示他们的照片。如果图片匹配,则卡片仍然可见但是如果图片与图片不匹配则翻转以再次隐藏图片。

第一张卡片在点击后会变得可见,但是当选择第二张卡片时,如果选择了匹配的图片,或者第一张卡片翻转而没有显示第二张图片,则两张卡片都可见。

感谢您的帮助。

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

1 个答案:

答案 0 :(得分:0)

您的比较卡功能是将卡状态设置为CLOSED太快,因此它们不会显示。尝试使用:

public void compareCards(int row,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;
}

}

在翻转之前,这应该显示两张卡约五秒钟。你还必须实现一种方法,如果它们是相同的,如果它们是相同的,则可以将卡片翻转回来。我只是这样说,因为我在这里看不到一个。