关于五子棋五子连珠判定问题

五子棋判断哪一方胜利

引入

五子棋大家都知道吧,不再写多余的描述,本文只介绍一个自己想出来的判断双方哪一方胜利的算法。
注意:本文算法均为本人自创,没有借鉴任何人的文章与帮助,如有雷同,纯属巧合!未经允许,禁止搬运文章。
下面所举例均使用Java,别的语言应该也可以做到

正文

把你想象成正在玩棋的人,怎么判断五颗棋子已经相连?一台机器又该怎么判断?
博主这是第四次写这篇文章了,已经很无奈,不多解释了…QWQ自动保存不知哪里。

索引

在一个没有胜利者的棋局下,只有放下一颗棋子才有可能产生胜利者,所以只要检索这一颗棋子周围是否达成五子连珠即可。

算法介绍

检索这个索引,看它周围有没有连成5颗或以上棋子,则产生胜者。那么总共有3种方式获胜

  1. 横排
  2. 竖排
  3. 斜排,又分为从左上到右下,从右上到左下

再引用一个棋子,首棋子,默认赋值为索引

算法

以横排为例子:

  1. 判断首棋子左侧是否有同色棋子,如果有,则首棋子赋值为其左侧的棋子,重复此句直至其左侧没有同色棋子。
  2. 计算重复次数,如果大于或等于5,则五子连珠,胜者产生,结束下面判断。
  3. 判断首棋子右侧是否有同色棋子(与上面所有语句衔接,不是单独的语句),如果有,则首棋子赋值为其右侧的棋子,重复此句,直至其右侧没有同色棋子。
  4. 判断重复次数是否大于或等于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 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值