基于C++的棋类游戏输赢判断算法策略的设计与实现
五子棋一直是人民大众喜闻见的娱乐游戏,随着电脑、手机的普及,各式各样的五子棋游戏软件也遍地开花,也为我留下了一个问题,电脑是如何判断我输了或是赢了呢?本次就探究一下简易的五子棋的输赢判断策略。 顾名思义,五子棋的赢法是某一颜色的棋子以直线的方式在棋盘上形成五子连珠。
按照实际情况,只有刚下完一手的持方可能会赢,根据五子棋 黑棋先手规则,当场上局图为两棋总量不等时,黑棋刚下完一手, 两棋总量相等时,白棋刚下完一手。因此可以通过两棋总量判断刚 下完的持方,然后只关注该持方的棋子,从而达到减少算法时间复 杂度的效果。
五子棋棋盘上有 8 种方向,但在我们遍历棋盘时,可以利用对称 的特点,只选择四种方向进行遍历,达到与八种方向相同的效果。 判断的关键数据有以下几个
- 相连的棋子数
- 边界条件
- 哪个方向
经过分析,突然发现了这种推演与一种算法类似,即 KMP 算法对字符串的对比
我的思考前提是最后一手的棋色与落子位置未知的情况,在大部分实时五子棋软件中,棋子颜色与落子位置是实时记录的,最后一子才是关乎是否胜利的一子,因此只需要从最后一子开始搜索各个方向上是否存在五子连珠的情况,并不需要考虑很多的初始顶点每个进行遍历,在算法上会简化很多