Skip to content

prj159/Checker

Repository files navigation

六角棋盘游戏 (Checker Game)

项目概述

这是一个基于六角格子的棋盘游戏,采用C++编写,使用EasyX图形库进行图形界面渲染。游戏支持2、4、6个玩家,提供人机对战和人人对战模式,并内置了基于蒙特卡洛树搜索(MCTS)的AI对手。

游戏特性

  • 六角格子棋盘:使用独特的六角坐标系系统
  • 多人支持:支持2、4、6个玩家的游戏模式
  • 游戏模式
    • 人人对战模式
    • 人机对战模式(人类可选择先手或后手)
  • AI对手
    • 基础随机AI(简单难度)
    • 蒙特卡洛树搜索AI(高级难度)
  • 界面功能
    • 实时游戏状态显示
    • 玩家棋子选择与移动提示
    • 悔棋功能(撤销上一步操作)
    • 游戏规则提示和胜利判定
  • 技术特性
    • 使用了面向对象的设计模式
    • 模块化代码结构,便于维护和扩展
    • 跨平台兼容的C++代码

项目结构

checker/
├── main.cpp              # 程序入口,初始化游戏
├── Board.h/.cpp         # 游戏核心逻辑,棋盘管理和渲染
├── AI.h/.cpp            # 基础随机AI实现
├── AI_MCTS.h/.cpp       # 蒙特卡洛树搜索AI实现
├── ChooseMode.h/.cpp    # 游戏模式选择界面
├── checker.vcxproj      # Visual Studio项目文件
├── checker.sln          # Visual Studio解决方案文件
├── x64/                 # 编译输出目录
└── README.md            # 项目说明文档

快速开始

环境要求

  • 操作系统:Windows(需要Windows API支持)
  • 编程环境:Visual Studio 2019或更高版本
  • 依赖库:EasyX图形库

安装依赖

  1. 下载并安装EasyX图形库: 访问 EasyX官网 下载最新版本的EasyX库并安装。

  2. 配置Visual Studio项目

    • 打开 checker.sln 文件
    • 确保项目已正确引用EasyX库

编译与运行

  1. 使用Visual Studio

    • 打开 checker.sln 项目文件
    • 选择配置(Debug/Release)和平台(x64/Win32)
    • 点击"生成"菜单 → "生成解决方案"
    • 按F5运行程序
  2. 命令行编译(如果配置了MSBuild):

    # 进入项目目录
    cd /path/to/checker
    
    # 使用MSBuild编译
    msbuild checker.sln /p:Configuration=Release /p:Platform=x64

    编译后的可执行文件将位于 x64/Release/ 目录下。

游戏玩法说明

操作指南

  1. 启动游戏:运行程序后,首先选择游戏模式
  2. 选择玩家数量:可以选择2、4或6个玩家
  3. 选择对战模式
    • 人人对战:所有玩家轮流进行操作
    • 人机对战:选择AI难度,并选择人类是否先手
  4. 游戏操作
    • 选择棋子:鼠标点击自己的棋子将其选中
    • 查看可用移动:选中的棋子上会显示绿色圆圈表示可移动的位置
    • 移动棋子:点击绿色圆圈位置进行移动
    • 悔棋:按'U'键可以撤销上一步操作
    • 重新开始:按'R'键可以重新开始当前对局

游戏规则

  • 每个玩家从棋盘的不同边缘开始
  • 棋子只能移动到相邻的六角格子
  • 如果可能,棋子可以进行跳跃移动(跳过其他棋子)
  • 当到达对方起始位置时获胜

游戏界面说明

  • 棋盘区域:中央的六角棋盘显示当前游戏状态
  • 信息面板:右侧显示当前玩家、游戏状态等信息
  • 操作提示:底部显示当前可用的操作提示
  • 玩家颜色
    • 红色、绿色、蓝色、黄色、品红色、青色分别代表不同玩家

AI算法说明

基础随机AI

位于 AI.h/.cpp 文件中,实现了一个简单的随机选择算法:

  • 从所有可移动的棋子中随机选择一个
  • 优先选择可以进行跳跃移动的棋子

蒙特卡洛树搜索AI

位于 AI_MCTS.h/.cpp 文件中,实现了高级的蒙特卡洛树搜索算法:

  • 使用树节点结构维护游戏状态
  • 通过多次模拟来评估最佳移动
  • 支持不同级别的AI难度设置

AI难度调整

在AI_MCTS.cpp中可以通过调整以下参数来控制AI难度:

  • 迭代次数:增加迭代次数可以提升AI的思考深度
  • 探索参数:调整平衡探索和利用的权重
  • 思考时间:通过算法复杂度控制AI响应时间

开发指南

代码架构

项目采用了面向对象的设计原则:

  1. Board类

    • 管理游戏状态和棋盘逻辑
    • 处理图形渲染和用户输入
    • 维护游戏历史记录
  2. AI命名空间

    • 封装了所有AI相关算法
    • 提供统一的接口获取AI移动
  3. 坐标系统

    • 使用自定义的六角坐标系(HexCoord
    • 包含坐标转换和距离计算功能

扩展功能

如需扩展项目功能,可以参考以下建议:

  1. 添加新AI算法: 在AI命名空间中添加新的函数实现,遵循相同的接口规范。

  2. 修改游戏规则: 在Board类的findValidMovesfindJumps函数中调整移动规则。

  3. 美化界面: 修改Board类的display函数和相关渲染代码。

  4. 添加网络对战: 创建新的网络通信模块,修改游戏循环以支持远程玩家。

调试技巧

  1. 启用详细日志: 在关键函数中添加日志输出,帮助理解程序流程。

  2. 使用Visual Studio调试器

    • 设置断点观察游戏状态变化
    • 使用内存窗口查看棋盘结构
  3. 简化测试: 可以修改初始游戏设置,快速测试特定场景。

故障排除

常见问题

  1. 编译错误 "graphics.h not found"

    • 解决方案:确保已正确安装EasyX图形库
    • 检查Visual Studio的包含目录配置
  2. 运行时崩溃

    • 检查EasyX库是否正确安装
    • 确保使用正确平台编译(x64或Win32)
  3. 游戏界面显示异常

    • 检查显卡驱动和DirectX版本
    • 尝试以管理员身份运行程序
  4. AI响应缓慢或无响应

    • 降低MCTS算法的迭代次数
    • 检查棋盘状态是否有效

性能优化

  • 如果AI响应过慢:

    // 在AI_MCTS.cpp中调整迭代次数
    int AI_LEVEL() { return 1000; } // 改为较小值
  • 如果图形渲染卡顿:

    • 减少不必要的重绘操作
    • 优化棋子绘制算法

贡献指南

欢迎通过以下方式为项目做出贡献:

  1. 报告问题:在GitHub Issues中提交bug报告或功能建议
  2. 提交代码:通过Pull Request提交改进或新功能
  3. 完善文档:帮助改进README文档或添加代码注释

代码规范

  • 使用有意义的变量和方法名
  • 添加必要的注释说明
  • 保持代码格式一致
  • 确保新代码与现有架构兼容

许可证

本项目采用 MIT 许可证。详见项目根目录中的 LICENSE 文件。

致谢

  • EasyX图形库:提供了简单易用的Windows图形编程接口
  • 蒙特卡洛树搜索算法:参考了相关算法文献和实现
  • 所有贡献者:感谢所有为项目做出贡献的开发者

联系信息

项目仓库:https://github.com/prj159/Checker.git

如有问题或建议,请通过GitHub Issues联系我们。

About

Harbin Institute of Technology Shenzhen Automation Freshman Summer Semester Program

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published