Я создаю игру uno, и она почти полностью функциональна, и я использую javaFX для ее создания.Это компьютер против пользователя, и проблема в том, что, когда пользователь нажимает на кнопку карты, предполагается, что средняя карта заменяется этой картой, а затем компьютер уходит, однако в конечном итоге происходит то, что компьютер уходит сразу и такВы видите только карту компьютера, сыгранную в середине.Я уверен, что это как-то связано с тем, как я структурировал свой код, в частности с событием действия, относящимся к нажатой кнопке.Однако, поскольку это мой первый в мире графический интерфейс Java, и я довольно плохо знаком с Java, я изо всех сил пытаюсь понять, как его структурировать, чтобы я мог показать движение пользователя.Кроме того, из-за этого я не могу реализовать пропускную карту, хотя я пытался использовать логическое значение и создать другой метод, и я думаю, что основная проблема заключается в том, как настроен основной игровой цикл и действие внутри.
Этот метод вызывается, и он проверяет нажатие кнопки, а затем получает индекс кнопки в массиве / руке игрока. Логическое значение было моей попыткой реализовать пропускную карту, но постоянно происходило то, что компьютер всегда играл сразу после пользователя.двигаться, когда игральная карта была пропущена.
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);
}
}
}
Итак, мой главный вопрос: как я могу реструктурировать это или добавить что-то, что позволяет карте пользователя показывать посередине, прежде чем компьютер сразу же отключается, я тоже попробовал метод таймера / сна.И моя пропускная карта не работает, но я думаю, что это связано с тем, как я настроил своего слушателя действия, который испортил две проблемы.Спасибо, что прочитали это, и дайте мне знать, если у вас есть какие-либо комментарии!