中国象棋
学校的课程要求制作一份课程设计,由于所给的题目实用性不大,故而和老师商量后开始准备写这个项目,一方面是可以理解刚学不就的数据结构,另一方面是可以接触 C++ 的 QT 界面库,可以多学到点东西
主要将程序分为四种模式:
- 本地的 PVP 对战
- 本地的 PVE 对战
- 基于 Socket 通讯的 PVP 对战(服务端)
- 基于 Socket 通讯的 PVP 对战(客户端)
一开始打算使用数据库存储,但是发现数据库涉及的东西实在不少,并且总是结束程序清空数据库的话可能出现 BUG,如:出现异常错误退出,清空数据库操作没能执行等
使用链栈来做,每移动一次就将移动的棋子的坐标、移动后棋子的坐标、是否击杀棋子等数据添加到栈中
从逻辑上看理论上是不能无限悔棋的,但是由于设计原因,如果将步数清空可能导致性能不高(毕竟多了几个判断和移动数据),并且步数的临界值并不好取,所以就保留原状,还是使用链栈而不是队列
使用数据库记录棋谱,在数据库中查询下一步该如何走,但是首先是棋谱的完整性,不能保证每一步都能在棋谱中找到对应的步骤,其次就是数据录入太过繁琐,再者每一步的水平都不一样,不符合实际情况
采用二叉博弈树,使用剪枝算法优化,每次都动态计算下一步怎么走,根据难度级别调整二叉博弈树的高度
无法控制时间,当电脑达到普通人平均水平(差不多高度为 5 左右),每一步的计算都需要数秒之多,更别说提高难度了