Java 棋盘游戏 - 鼠标点击事件处理与胜利判定

本文将介绍一个 Java 棋盘游戏代码片段,展示了鼠标点击事件处理和胜利判定逻辑。代码片段使用 mousePressedmouseClicked 事件处理函数来实现游戏交互,并利用 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;
}

代码说明:

  1. mousePressed 事件处理函数:

    • 判断游戏是否结束或暂停,如果已结束或暂停则不进行棋子放置操作。
    • 将鼠标点击的坐标转换为网格索引。
    • 判断点击位置是否在棋盘内。
    • 使用 findChess 方法判断点击位置是否有棋子存在。
    • 如果点击位置符合条件,则放置棋子,并进行游戏胜利判定。
  2. mouseClicked 事件处理函数:

    • 判断游戏是否暂停,如果暂停则不进行下棋操作。
  3. findChess 方法:

    • 遍历棋子数组 chessList,判断指定位置 (x, y) 是否已经有棋子存在。

代码中用到的变量:

  • gameOver:游戏是否结束标志。
  • paused:游戏是否暂停标志。
  • isBlack:当前轮到黑棋还是白棋。
  • xIndexyIndex:鼠标点击位置对应的网格索引。
  • chessList:存放所有棋子的数组。
  • chessCount:棋子数量。
  • MARGIN:棋盘边距。
  • GRID_SPAN:网格大小。
  • ROWSCOLS:棋盘行数和列数。

代码示例说明了如何实现简单的棋盘游戏逻辑,包括鼠标点击事件处理、棋子放置、游戏胜利判定等。用户可以根据自己的需求修改代码,增加更多游戏功能。


原文地址: https://www.cveoy.top/t/topic/oLyq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录