Как события действия работают с ходами игроков, нужна помощь, чтобы показать, какую карту пользователь сыграл, прежде чем компьютер покажет, какую карту он сыграл - PullRequest
0 голосов
/ 25 марта 2019

Я создаю игру 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);

            }
        }
    }

Итак, мой главный вопрос: как я могу реструктурировать это или добавить что-то, что позволяет карте пользователя показывать посередине, прежде чем компьютер сразу же отключается, я тоже попробовал метод таймера / сна.И моя пропускная карта не работает, но я думаю, что это связано с тем, как я настроил своего слушателя действия, который испортил две проблемы.Спасибо, что прочитали это, и дайте мне знать, если у вас есть какие-либо комментарии!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...