我实际上正在开发一个记忆游戏,我被困在我应该编写游戏的游戏部分的地方。所以:我有一系列N
card objects
。每个对象都有一个名为cardNum
- 标识符的属性。我想我应该actionListener
在那个数组上写一个,所以当我翻转一张卡片时,它会将翻转的卡片cardNum
放在一个包含两个元素的数组中,如果数组的两个元素相等,就会找到一对。问题是我只是不知道如何获得最后一张翻转的卡片cardNum
。任何帮助,将不胜感激。
这是我尝试的方式:
private void easyGame(Card[] cards) {
int flippedCards = 0;
int card1;
while(flippedCards != 24) {
for(int i=0; i<cards.length; i++) {
if(cards[i].getIsFlipped())
flippedCards ++;
}
if(flippedCards % 2 == 0 && flippedCards > 0)
for(int i=0; i<cards.length; i++) {
card1 = getCardIndByCardNum(cards[i].getCardNum(), cards, i);
if(!cards[card1].getIsFlipped()) {
for(int j=0; j<cards.length; j++) {
if(cards[i].getIsFlipped())
cards[i].flip();
}
flippedCards = 0;
break;
}
}
}
}
问题是如果我调用这个方法,游戏将不会被绘制。我可以以某种方式使用使用线程吗?
编辑
以下是我如何获取点击卡片的索引,我在 UI 中调用它:
private void setCardHandlers() {
for(final Card card : cards) {
card.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent t) {
clickedCardInd = getChildren().indexOf(card)-1;
}
});
}
}
比这里是我如何使用它:
setOnMouseReleased(new EventHandler<MouseEvent> () {
@Override
public void handle(MouseEvent t) {
int cardIndex = clickedCardInd; // get index of what user clicked
clickedCardInd = -1;
if (cardIndex != -1 && moveRequestedFlag) { // our controller waits for the move
// get the position and report
moveRequestedFlag = false; // we handled the move
//System.out.println(cardIndex);
nextMove.setMove(cardIndex); // this will unblock controller's thread
}
}
});
它在翻转卡片上有延迟,在easyGame
该requestMove
方法中也将两个索引设置为相同。