Java 棋盘游戏:鼠标点击事件处理和棋子检测
Java 棋盘游戏:鼠标点击事件处理和棋子检测
以下代码展示了 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;
}
}
// 查找指定位置是否存在棋子
private boolean findChess(int xIndex, int yIndex) {
for (int i = 0; i < chessCount; i++) {
Point ch = chessList[i];
if (ch != null && ch.getX() == xIndex && ch.getY() == yIndex) {
return true;
}
}
return false;
}
代码解析
- 鼠标点击事件处理:
mousePressed方法处理鼠标点击事件,首先判断游戏状态,如果游戏已结束或暂停,则不进行任何操作。 - 坐标转换: 将鼠标点击的坐标位置转换成网格索引。
- 棋子检测: 使用
findChess方法检测点击位置是否存在棋子。 - 胜利判断: 使用
isWin方法判断当前玩家是否获胜,并在获胜时弹出提示信息。 - 棋子放置: 如果点击位置合法且没有棋子,则创建一个新的棋子对象并将其添加到棋盘上。
- 游戏状态更新: 更新游戏状态,并切换到下一玩家。
其他说明
chessList:保存棋盘上所有棋子的数组。chessCount:记录棋盘上已有棋子的数量。isBlack:当前玩家是否为黑棋。gameOver:游戏是否结束。paused:游戏是否暂停。findChess方法遍历chessList数组,判断是否存在与指定坐标位置相同的棋子。
代码改进建议
- 可以考虑使用更有效的算法来判断胜负。
- 可以使用图形库来绘制棋盘和棋子,提高游戏的视觉效果。
- 可以添加更多游戏功能,例如悔棋、保存游戏等。
原文地址: https://www.cveoy.top/t/topic/oLzA 著作权归作者所有。请勿转载和采集!