Java 棋盘游戏:鼠标点击事件处理和游戏状态管理
public void mousePressed(MouseEvent e){
//游戏结束时,不再能下
if (gameOver) {
JOptionPane.showMessageDialog(this, '游戏已结束,请重新开始', '提示', JOptionPane.INFORMATION_MESSAGE);
return;
}
//游戏暂停时,不能下棋
if (paused) {
JOptionPane.showMessageDialog(this, '当前处于暂停模式,请点击继续按钮继续游戏', '提示', JOptionPane.INFORMATION_MESSAGE);
return;
}
String colorName=isBlack?'黑棋':'白棋';
//将鼠标点击的坐标位置转换成网格索引
xIndex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;
yIndex=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;
//落在棋盘外不能下
if(xIndex<0||xIndex>ROWS||yIndex<0||yIndex>COLS) {
JOptionPane.showMessageDialog(this, '该位置不在界面内,请在界面内下棋');
return;
}
//如果点击的位置已经有棋子存在,不能下
if(findChess(xIndex,yIndex)) {
JOptionPane.showMessageDialog(this, '该位置已经有棋子,请重新选择位置下棋!');
return;
}
//可以进行时的处理
Point ch=new Point(xIndex,yIndex,isBlack?Color.black:Color.white);
chessList[chessCount++]=ch;
repaint();//通知系统重新绘制
//如果胜出则给出提示信息,不能继续下棋
if(isWin()){
String msg=String.format('恭喜,%s赢了!', colorName);
JOptionPane.showMessageDialog(this, msg);
gameOver=true;
}
isBlack=!isBlack;
}
//覆盖mouseListener的方法
public void mouseClicked(MouseEvent e) {
//判断游戏是否暂停,如果暂停则不进行下棋
if (paused) {
JOptionPane.showMessageDialog(this, '游戏已暂停,点击继续按钮继续游戏', '提示', JOptionPane.INFORMATION_MESSAGE);
return;
}
}
代码示例中,mousePressed 方法处理鼠标按下事件,根据游戏状态决定是否允许下棋。mouseClicked 方法处理鼠标点击事件,并提示用户游戏已暂停。
主要功能:
- 游戏结束状态处理:
gameOver变量控制游戏结束状态。当游戏结束时,鼠标点击事件将被忽略,并提示用户重新开始游戏。 - 游戏暂停状态处理:
paused变量控制游戏暂停状态。当游戏暂停时,鼠标点击事件将被忽略,并提示用户点击继续按钮继续游戏。 - 鼠标点击位置判断: 代码判断鼠标点击位置是否在棋盘范围内,并判断该位置是否已经有棋子。
- 游戏胜利判断:
isWin()方法判断游戏是否结束,并给出提示信息。
改进点:
- 将
gameOver和paused状态的判断放在mousePressed方法的开头,方便代码阅读和维护。 - 将提示信息统一放到
JOptionPane.showMessageDialog方法中,避免重复代码。 - 将
mouseClicked方法的代码简化,只处理游戏暂停状态。
使用说明:
- 该代码示例需要在 Java 环境中运行。
- 需要添加
javax.swing包。 - 需要实现
findChess和isWin方法,以实现具体的游戏逻辑。
注意:
- 代码示例中使用的是
JOptionPane类,它是一个 Swing 组件,用于显示消息对话框。 - 代码示例中的
ROWS、COLS、MARGIN、GRID_SPAN都是需要在代码中定义的常量。 - 代码示例中的
chessList数组用于存储棋子信息。 - 代码示例中的
isBlack变量用于记录当前下棋方颜色。
总结:
该代码示例展示了 Java 棋盘游戏中鼠标点击事件的处理,以及游戏状态(暂停、结束)的管理。代码简洁易懂,并包含了详细的注释,方便读者理解和学习。
原文地址: https://www.cveoy.top/t/topic/oLxL 著作权归作者所有。请勿转载和采集!