Tic Tac Toe Java GUI проект - сообщение о завершении не появляется - PullRequest
0 голосов
/ 08 мая 2018

Я только что закончил свои первые два семестра занятий по Java в моем колледже. Я очень взволнован, чтобы учиться, и я возвращаюсь и пытаюсь исправить некоторые из моих проектов как опыт обучения. В этом задании я должен был создать игру в крестики-нолики. Мне удалось заставить все работать, что требовалось для назначения, но у меня возникли проблемы с выходом из тупика. Я сделал 2 2D массива, один из JButtons и один из объекта, который представляет объект Tic Tac Toe, который имеет базовые методы get / set для символа (X или O) и логическое значение для указания, если он занят.

public void actionPerformed(ActionEvent e){
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                try{
                    if(player_array[i][j].getOccupied()){
                        throw new CellTakenException("Cell taken, try another.");
                    }
                    else {
                        if(e.getSource()==button_array[i][j]){
                            move_num++;
                            if(move_num%2!=0){
                                player_array[i][j].setOccupid(true);
                                player_array[i][j].setChar('X');
                                button_array[i][j].setText("X");
                                if(gameWon()){
                                    JOptionPane.showMessageDialog(pane,button_array[i][j].getText()+" wins!");
                                }
                            }
                            else if(move_num%2==0){
                                player_array[i][j].setOccupid(true);
                                player_array[i][j].setChar('O');
                                button_array[i][j].setText("O");
                                if(gameWon()){
                                    JOptionPane.showMessageDialog(pane,button_array[i][j].getText()+" wins!");
                                }
                            }
                            else if(move_num==9){
                                if(boardFull()){
                                    JOptionPane.showMessageDialog(pane,"Game over. No Winners.");
                                }
                            }
                        }

                    }

                }
                catch(CellTakenException c){
                    c.getMessage();
                }
            }
        }
    }

Сначала я попытался просто использовать значение move_num, чтобы проверить, закончилось ли оно, но это не сработало, поэтому я добавил логическое значение boardFull (), которое проверяет, нажата ли каждая кнопка, и занятое логическое значение для пальца ноги объект.

public boolean boardFull(){
  int cellTaken=0;
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            if(button_array[i][j].getModel().isPressed()&&player_array[i][j].getOccupied()){
                cellTaken++;
                }
            }
        }
    return cellTaken==9;
}

Я не могу понять, почему патовое сообщение не появляется. Кто-нибудь знает, почему это так / что я мог сделать, чтобы это исправить?

1 Ответ

0 голосов
/ 08 мая 2018

Я думаю, вы должны проверить boardFull () после, если gameWon () . Потому что в случае вашего последнего хода пошли какие-либо «Х» или «О». Он не дойдет до вашей «Игры окончена. Без победителей». случай.

if(gameWon()){
     JOptionPane.showMessageDialog(pane,button_array[i][j].getText()+" wins!");
}
elseif(boardFull()){
     JOptionPane.showMessageDialog(pane,"Game over. No Winners.");
}

попробуйте поставить это условие как в «Х», так и в «О». Я надеюсь, что это поможет.

...