当前位置: 首页 > news >正文

基于C++实现亚马逊棋

亚马逊棋实验报告

游戏效果

  • 1 点击“开始新游戏”,开始新游戏2 选择要执棋子的颜色

若不选择,则无法开始游戏

3 点击本方棋子显示可行域。右边有黑方和白方可行步数以及回合数。

4 点击目标位置显示释放障碍物的可行域

若点击的地方不是可行域,则无效,需要重新选择棋子下棋

下棋之后,步数和回合数更新

5 点右上方按钮悔棋

若当前没有下棋,则悔棋按钮无效

6 点击退出并选择是否存档

存档成功显示提示信息

7 点击“载入上次的游戏”载入上次游戏存档

继续下棋

8 输了之后会根据你坚持的回合数不同给出不同的嘲讽

turn<=20 的时候(以上)

  • <turn<=50 的时候(以上)
  • 对于 turn>50 的时候和赢了的时候,恕作者很菜并没有玩到……9 游戏规则查看

二、代码实现思路

1 菜单界面

  • 有四个选项,开始新游戏,载入上次的游戏,查看规则,退出。

开始新游戏:

gameboard 是游戏界面。

载入上次的游戏:

查看规则:

regulations 是游戏规则的对话框。

退出:

2 开始新游戏:

游戏界面 gameboard 属于 Gameboard 类:

公有函数有:

  • exestep()函数
  • inMap()函数
  • Clearboard()函数
  • Judge()函数
  • 保护函数有画图函数,跟踪鼠标动作并做出反应的函数。

公有槽函数:

  • SaveData()函数
  • ReadData()函数
  • Drawboard()函数
  • DrawItems()函数
  • NewGame()函数
  • Mark()函数
  • DeMark()函数
  • Decision()函数
  • cancel()函数
  • CountSteps()函数
  • Preparation()函数

开始新游戏时,把之前的存档删除,并清除所有数据。如果选择白棋,则 AI 先行。

其中,清除数据和初始化用到的 Clearboard()函数:

清除所有数据,初始化回合数,黑白方步数和棋盘数组。

执行的时候用到的 exestep()函数:

分为多种情况。若不是测试模式,则直接更新棋盘数组并更新当前显示画面。否则又分为两种情况,若是评估使用,则更新测试数组,否则其功能是判定棋子是否在棋盘内

其中用到的 inMap()函数:

3 读档函数

  • 读档并根据记录步数的数组把棋盘状态恢复到当前回合。4 鼠标点击函数。
  • 设置布尔变量来标记当前状态是要下棋还是释放障碍物

鼠标释放函数:

其中用到的 Mark()和 Demark()函数:

鼠标点击一下并释放,则显示棋子的可行域。否则显示障碍物的可行域。释放障碍物之后,算法执行,AI 下棋。

5 悔棋的函数:

也用于算法上的初始化 test 棋盘

6 判定胜负(及弹出嘲讽)的函数:

7 画图的函数:

三、算法部分

算法的基本思路是贪心算法,也就是计算当前局面每一个可行解下过之后本方步数与对方步数之差,选出这个差值最大的解输出。

相关函数代码:

preparation()函数把所有可行解存储于一个数组中遍历用。

CountSteps()函数计算当前某方可行步数。

四、程序框图

  • 见附加文件

五、遇到的问题

1.做第一版的时候遇到的问题:

  • 存档之后退出再进去会乱码是因为数组越界。
  • 解决方案:把数组开大
  • 存档之后执子方变化
  • 解决方案:加了 current_color 变量的存储
  • 悔棋的时候如果 turn 为 0,会紊乱。
  • 解决方案:加了 if turn==0 的判断条件

2.可视化的问题:

在鼠标点击可用棋子之前和之后程序对鼠标点击的反映应该不同才对

解决方案:使用 bool 变量

♻️ 资源

大小:40.0MB

➡️资源下载:https://download.csdn.net/download/s1t16/87425300

注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!

http://www.jsqmd.com/news/584194/

相关文章:

  • OpenClaw网页自动化:Qwen3.5-9B实现无头浏览器智能操作
  • OpenClaw自动化测试:百川2-13B-4bits量化模型驱动UI操作验证
  • 从空调到电动车:拆解NTC和PTC热敏电阻在你身边电子产品里的‘隐藏任务’
  • ClickHouse中ReplicatedMergeTree与ReplacingMergeTree表引擎的去重机制深度对比
  • 基于深度学习的轴承缺陷检测系统(YOLO12/11/v8/v5模型+django)o(源码+lw+部署文档+讲解等)
  • 从VGG到ResNet:手把手教你用CAM给不同CNN架构‘拍X光片’(附代码对比)
  • 深入解析AdaptiveAvgPool2d:从原理到实践
  • OpenClaw监控面板:实时查看Kimi-VL-A3B-Thinking资源占用情况
  • BurpSuite插件fakeIP安装避坑指南:解决Jython环境配置与Python脚本加载问题
  • 用IDM抓取网页动态资源
  • OpenClaw自动化周报生成:Qwen2.5-VL-7B分析工作截图产出周总结
  • OpenClaw+Phi-3-mini-128k-instruct学术助手:文献综述自动生成
  • SAP BASIS手记:从零搞定SMTP邮件服务器配置(SCOT/SICF/SU01保姆级流程)
  • 别再死记硬背了!用Python脚本帮你快速掌握RSA、AES、Diffie-Hellman等核心加密算法
  • OpenClaw任务链设计:Qwen3-14b_int4_awq模型多步骤执行
  • Windows效率翻倍!这些隐藏的Win+R命令和CMD技巧你用过几个?
  • LeetCode 二叉搜索树双神题通关!有序数组转平衡 BST + 验证 BST,小白递归一把梭
  • 2026年比较好的纯三层实木拼花地板深度厂家推荐 - 品牌宣传支持者
  • OpenClaw技能开发指南:为SecGPT-14B定制专属安全检测模块
  • Unity Package Manager从入门到精通:除了导入Asset Store,你还能这样玩转自定义插件
  • OpenClaw极简配置:Gemma-3-12b-it单文件部署方案(无需Node环境)
  • 机器学习(1)快速搭建Pytorch开发环境
  • 从传统部署到云原生的迁移策略
  • 2.5MW ANPC拓扑储能变流器PCS整流器仿真搭建之旅
  • 机械键盘防抖优化指南:提升输入稳定性的完整解决方案
  • LLCOM串口调试工具:Lua脚本驱动的自动化实践
  • 保姆级教程:在Vitis HLS 2022.2中配置Vision库和OpenCV 4.4.0(附完整编译参数)
  • (开头直接进入主题,无废话)
  • LlamaFactory实战:5分钟搞定LoRA微调,让你的大模型秒变中文专家
  • OpenClaw网络优化:Qwen3.5-9B模型响应加速方案