基于C++实现亚马逊棋

张开发
2026/4/4 2:35:38 15 分钟阅读
基于C++实现亚马逊棋
亚马逊棋实验报告游戏效果1 点击“开始新游戏”开始新游戏2 选择要执棋子的颜色若不选择则无法开始游戏3 点击本方棋子显示可行域。右边有黑方和白方可行步数以及回合数。4 点击目标位置显示释放障碍物的可行域若点击的地方不是可行域则无效需要重新选择棋子下棋下棋之后步数和回合数更新5 点右上方按钮悔棋若当前没有下棋则悔棋按钮无效6 点击退出并选择是否存档存档成功显示提示信息7 点击“载入上次的游戏”载入上次游戏存档继续下棋8 输了之后会根据你坚持的回合数不同给出不同的嘲讽turn20 的时候以上turn50 的时候以上对于 turn50 的时候和赢了的时候恕作者很菜并没有玩到……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 turn0 的判断条件2.可视化的问题在鼠标点击可用棋子之前和之后程序对鼠标点击的反映应该不同才对解决方案使用 bool 变量♻️ 资源大小40.0MB➡️资源下载https://download.csdn.net/download/s1t16/87425300注更多内容可关注微信公众号【神仙别闹】如当前文章或代码侵犯了您的权益请私信作者删除

更多文章