五子棋判断哪一方胜利
引入
五子棋大家都知道吧,不再写多余的描述,本文只介绍一个自己想出来的判断双方哪一方胜利的算法。
注意:本文算法均为本人自创,没有借鉴任何人的文章与帮助,如有雷同,纯属巧合!未经允许,禁止搬运文章。
下面所举例均使用Java,别的语言应该也可以做到
正文
把你想象成正在玩棋的人,怎么判断五颗棋子已经相连?一台机器又该怎么判断?
博主这是第四次写这篇文章了,已经很无奈,不多解释了…QWQ自动保存不知哪里。
索引
在一个没有胜利者的棋局下,只有放下一颗棋子才有可能产生胜利者,所以只要检索这一颗棋子周围是否达成五子连珠即可。
算法介绍
检索这个索引,看它周围有没有连成5颗或以上棋子,则产生胜者。那么总共有3种方式获胜
- 横排
- 竖排
- 斜排,又分为从左上到右下,从右上到左下
再引用一个棋子,首棋子,默认赋值为索引
算法
以横排为例子:
- 判断首棋子左侧是否有同色棋子,如果有,则首棋子赋值为其左侧的棋子,重复此句直至其左侧没有同色棋子。
- 计算重复次数,如果大于或等于5,则五子连珠,胜者产生,结束下面判断。
- 判断首棋子右侧是否有同色棋子(与上面所有语句衔接,不是单独的语句),如果有,则首棋子赋值为其右侧的棋子,重复此句,直至其右侧没有同色棋子。
- 判断重复次数是否大于或等于5,则五子连珠,否则无获胜者。
算法解释
下面左右1,2,3,4分别为上文的步骤
1,2是判断五子连珠最基本的方法,而1还有一个功能,将首棋子归位。
首棋子是某一端最靠两段某一边的棋子。因为从 一段相连同色棋子 中,以中间一颗棋子做索引,向两边判断太费事,还容易出错,所以1是将首棋子归位到横排最左侧,但如果向左已经有5颗了,就不用多余计算从左到右的颗数,执行2进行判断。3是用来判断从最左端到最右端共有几颗棋子,每重复一次就有几颗棋子,4同2,不解释。
演示代码Java
//判断哪一方胜利
public Chess.Color judgeWinner(final Chess index) {
Chess first;
int winNum = 1;//五子连珠个数
for(int i, j, k =