php 五子棋 源码_一个连珠(带禁手的五子棋)判断胜负的PHP实现

https://gist.github.com/xsir317/c319ea4ed73c539961707353c5ccc263

gist 打不开的凑合看这个吧 xsir317/renju

曾经从一个C++的源码那里(传送门: Index of /renlib/opensrc 就是那个ForbiddenPointFinder )找到了最初的判断禁手的源码,然后自己改了一版php用了很久。

棋盘么,五子棋判断胜负,加上有禁手、假禁手的逻辑和嵌套,并不是那么容易的,涉及很多形状判断,以及大量的横、竖、斜向的数棋子什么的, 写得不好就会i ++ j ++ 整个代码里都是,重复代码会导致整体质量很差。

我新写的这个类,把方向定义为向量, 比如斜向分别是 [ +1,+1] [-1,-1] 和 [+1,-1] [-1,+1] 这样用一个方法去处理挪格子的问题,省去了原先代码中很多和方向、挪格子相关的冗余代码。

加上注释什么的,一共不到500行,去除注释的实际代码可能也就350行。

胜负逻辑一层层梳理,也不是很复杂。

首先,按照目前的五子棋(连珠)规则,先五为胜,后手方(白棋)长连视同五连。先手方(黑棋)禁手判负。比赛之中是要求后手方当场指出,咱们这里直接就判断了。

胜负判断:如果落子为黑方,形成了五连则返回黑胜,此时无视禁手;如果没有形成五连则检查禁手,如果禁手了则返回黑方禁手,白胜。如果为白方,形成了五连或者长连,返回白胜。

禁手判断&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值