Java 棋盘游戏 - 鼠标点击事件处理与胜利判定
Java 棋盘游戏 - 鼠标点击事件处理与胜利判定
本文将介绍一个 Java 棋盘游戏代码片段,展示了鼠标点击事件处理和胜利判定逻辑。代码片段使用 mousePressed 和 mouseClicked 事件处理函数来实现游戏交互,并利用 findChess 方法判断指定位置是否已经有棋子存在。
代码片段:
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;
}
}
// findChess 方法定义
private boolean findChess(int x, int y) {
for (int i = 0; i < chessCount; i++) {
if (chessList[i].getX() == x && chessList[i].getY() == y) {
return true;
}
}
return false;
}
代码说明:
-
mousePressed事件处理函数:- 判断游戏是否结束或暂停,如果已结束或暂停则不进行棋子放置操作。
- 将鼠标点击的坐标转换为网格索引。
- 判断点击位置是否在棋盘内。
- 使用
findChess方法判断点击位置是否有棋子存在。 - 如果点击位置符合条件,则放置棋子,并进行游戏胜利判定。
-
mouseClicked事件处理函数:- 判断游戏是否暂停,如果暂停则不进行下棋操作。
-
findChess方法:- 遍历棋子数组
chessList,判断指定位置 (x, y) 是否已经有棋子存在。
- 遍历棋子数组
代码中用到的变量:
gameOver:游戏是否结束标志。paused:游戏是否暂停标志。isBlack:当前轮到黑棋还是白棋。xIndex和yIndex:鼠标点击位置对应的网格索引。chessList:存放所有棋子的数组。chessCount:棋子数量。MARGIN:棋盘边距。GRID_SPAN:网格大小。ROWS和COLS:棋盘行数和列数。
代码示例说明了如何实现简单的棋盘游戏逻辑,包括鼠标点击事件处理、棋子放置、游戏胜利判定等。用户可以根据自己的需求修改代码,增加更多游戏功能。
原文地址: https://www.cveoy.top/t/topic/oLyq 著作权归作者所有。请勿转载和采集!