井字 Java GUI 项目 - 结束消息未弹出



我刚刚完成了大学前两个学期的Java课程。我很高兴学习,并且正在回去尝试修复我的一些项目作为学习经验。在这项任务中,我必须创建一个井字游戏。我设法让作业所需的一切工作,但我在解决僵局方面遇到了问题。 我制作了 2 个 2D 数组,一个是 JButton 数组,另一个是表示井字游戏的对象,该对象具有 char(X 或 O( 的基本 get/set 方法和一个布尔值,以指示它是否被占用。

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;
}

我不明白为什么没有弹出僵局消息。有谁知道为什么会这样/我可以做些什么来修复它?

我认为你应该在gameWon((之后检查boardFull((。因为如果你最后一步去了任何"X"或"O"。它不会到达您的"游戏结束。没有赢家。

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

尝试将此条件同时放在"X"和"O"中。 我希望这会有所帮助。

最新更新