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

代码解析

  1. 鼠标点击事件处理: mousePressed 方法处理鼠标点击事件,首先判断游戏状态,如果游戏已结束或暂停,则不进行任何操作。
  2. 坐标转换: 将鼠标点击的坐标位置转换成网格索引。
  3. 棋子检测: 使用 findChess 方法检测点击位置是否存在棋子。
  4. 胜利判断: 使用 isWin 方法判断当前玩家是否获胜,并在获胜时弹出提示信息。
  5. 棋子放置: 如果点击位置合法且没有棋子,则创建一个新的棋子对象并将其添加到棋盘上。
  6. 游戏状态更新: 更新游戏状态,并切换到下一玩家。

其他说明

  • chessList:保存棋盘上所有棋子的数组。
  • chessCount:记录棋盘上已有棋子的数量。
  • isBlack:当前玩家是否为黑棋。
  • gameOver:游戏是否结束。
  • paused:游戏是否暂停。
  • findChess 方法遍历 chessList 数组,判断是否存在与指定坐标位置相同的棋子。

代码改进建议

  • 可以考虑使用更有效的算法来判断胜负。
  • 可以使用图形库来绘制棋盘和棋子,提高游戏的视觉效果。
  • 可以添加更多游戏功能,例如悔棋、保存游戏等。
Java 棋盘游戏:鼠标点击事件处理和棋子检测

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

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