我正在创建一个 uno 游戏,它几乎功能齐全,我正在使用 javaFX 来创建它。这是计算机与用户,问题是当用户单击卡片按钮时,中间的卡片应该被该卡片替换,然后计算机就会运行,但最终发生的是计算机立即运行,所以你只看到中间打的电脑牌。我确信这与我如何构建我的代码特别是与单击的按钮有关的动作事件有关。然而,由于这是我的第一个 java GUI,而且我对 java 还很陌生,所以我很难理解如何构建它,以便能够展示用户的动作。也正因如此,
调用此方法并检查按钮单击,然后在播放器的 arraylist/hand/ 中获取按钮的索引。布尔值是我尝试实现跳过卡的尝试,但不断发生的情况是计算机始终会在用户播放后立即播放打出跳牌时移动。
public void gameLoop(){
for(int i =0; i<buttonList.size();i++){
buttonList.get(i).setOnAction((ActionEvent)->{
indexOfHandButton = buttonList.indexOf((Button)ActionEvent.getSource());
humanMakeMove();
if(!isReverseTurn()) {
computerMakeMove();
}
});
}
}
此方法使用从 gameloop actionevent 给出的索引,并在后端进行实际移动。然后它会清除包含用户手牌的 hbox 并调用 showhumanHand ,它会用更新的卡片填充它,类似地用中间的卡片填充它。尝试实现跳过卡的 if 语句不起作用,我也尝试在 if 语句中创建一个新操作并创建一个方法或递归调用 humanMakeMove 但当然索引将相同并且会导致错误。
public void humanMakeMove() {
String result = human.makeMove(game, theDeck, indexOfHandButton, computer);
if(result.equals("skip")){
setReverseTurn(true);
}
hbHumanHandBtn.getChildren().clear();
hbMiddleCard.getChildren().remove(middle);
middle = generateMiddleCard();
hbMiddleCard.getChildren().add(middle);
showHumanHand();
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>" + buttonList);
System.out.println(result);
if (middleCard.getType() != null) {
if (middleCard.getType().equals("skip") && isReverseTurn()) {
System.out.println(isReverseTurn());
gameLoop();
setReverseTurn(false);
}
}
}
所以我的主要问题是如何重组它或添加一些允许用户卡在计算机立即运行之前显示在中间的东西,我也尝试过定时器/睡眠方法。而且我的跳过卡不起作用,但我认为这与我如何设置我的动作监听器有关,这会导致两个问题。感谢您阅读本文,如果您有任何意见,请告诉我!