python实现五子棋算法
作者:码来的小朋友 发布时间:2022-12-22 18:53:15
标签:python,五子棋
python五子棋原创算法,供大家参考,具体内容如下
我们都见过五子棋,但是在我看来五子棋单机游戏中,逻辑赢法很重要,经常用到的算法是五子连珠算法,但是很多五子连珠算法很不全面,不是最后一个子落在四个字的中间出错误就是,下载四个字最前面出错误,网上的五子连珠很让人头疼,于是我就自创了一个五子棋连珠判断的算法,完全覆盖任何棋盘上出错的情况。
if (j+4<n && A[i][j]==A[i][j+1] && A[i][j]==A[i][j+2] && A[i][j]==A[i][j+3] && A[i][j]==A[i][j+4])//向右搜索
win = A[i][j];
上面是c语言五子连珠算法的一部分,这种算法会经常遇到游戏出错的情况,很不全面。
于是我们就就原创一个算法来改进,全面整改。
#赢法
def IsWinner(p,index,fun):
chessValue = 0 #为>=4就会赢棋
if index - fun < 0 or pos[index-fun][2] != p[2]: #当前点击的格子是第一行 或 不在第一行,在假设的首个格子中
print('----------第一个格子')
for i in range(1,5): # (1-4)
if index + (fun * i) <= 191 and pos[index + (fun*i)][2] == p[2]:
chessValue = chessValue + 1
if chessValue >= 4:
if p[2] == 1:
print('最后一下为第一个格子--黑赢')
ShowAllChess()#显示所有已经放置了的棋子
ResultShow(1)
if p[2] == 2:
print('最后一下为第一个格子--白赢')
ShowAllChess()#显示所有已经放置了的棋子
ResultShow(2)
elif index + fun > 191 or pos[index + fun][2] != p[2]: #当前点击的格子是最后一行 或 不在最后一行,在最后个格子中
print('----------最后一个格子')
for i in range(1,5): # (1-4)
if pos[index - (fun * i)][2] == p[2]:
chessValue = chessValue + 1
if chessValue >= 4:
if p[2] == 1:
print('最后一下为最后一个格子--黑赢')
ShowAllChess()#显示所有已经放置了的棋子
ResultShow(1)
if p[2] == 2:
print('最后一下为最后一个格子--白赢')
ShowAllChess()#显示所有已经放置了的棋子
ResultShow(2)
else: #不是第一个和不是最后一个,那就是当前点击的是五子连珠的中间的棋子了
print('----------中间一个格子')
'''
第一个循环检测中上部分位置的格子是否有同类棋子
'''
for i in range(1,4): #(1-3) 三个循环
if index - (fun * i) >= 0 and pos[index - (fun * i)][2] == p[2]:
chessValue = chessValue + 1
elif index - (fun * i) >= 0 and (pos[index - (fun * i)][2] != p[2] \
and pos[index - (fun * i)][2] != 0): #这里的逻辑就是上方为对手棋子
chessValue = 0 #连珠数归零
'''
第二个循环检测中下部分位置的格子是否有同类棋子
'''
for i in range(1,4): #(1-3) 三个循环
if index + (fun * i) <= 191 and pos[index + (fun * i)][2] == p[2]:
chessValue = chessValue + 1
elif index + (fun * i) <= 191 and (pos[index + (fun * i)][2] != p[2] \
and pos[index + (fun * i)][2] != 0): #这里的逻辑就是上方为对手棋子
chessValue = 0 #连珠数归零
if chessValue >= 4:
if p[2] == 1:
print('最后一下为中间一个格子--黑赢')
ShowAllChess()#显示所有已经放置了的棋子
ResultShow(1)
if p[2] == 2:
print('最后一下为中间一个格子--白赢')
ShowAllChess()#显示所有已经放置了的棋子
ResultShow(2)
#赢棋入口
def WinChess(p):
''' 此算法预测是不是在合适的条件下,如果是就响应,如果不是就不响应
1.p为当前最后按下的棋子坐标,不管是黑子还是白子
2.pos为棋盘上所有的坐标 一个坐标有[x坐标,y坐标,status状态]'''
#首先查找棋盘中对应值的下标
index = 0
for po in pos:
if [po[0],po[1]] == [p[0],p[1]]:
break #找到了下标为index 退出
index = index + 1
#【反斜杠查找法 、竖向查找法、斜杠查找法、横向查找法】
for fun in [17,16,15,1]:
IsWinner(p, index, fun) #当前的坐标 ,当前的下标,当前的查找算法
如上就是我自己根据python原创出来的“五子连珠”算法,通过四中子算法分析所有下棋的方式。【反斜杠查找法 、竖向查找法、斜杠查找法、横向查找法】
反斜杠查找法:"" 顾名思义就是根据坐上的棋子往右下查找判断是否大于五子。
斜杠查找法:“/” 和反斜杠类似。
竖向查找法:"|" 顾名思义就是从上往下查找,最简单。
横向查找法:“—” 和竖向一样只是变成了横向。
通过这四种算法就可以全面覆盖棋盘下子方式,而且不会有遗漏产生。
来源:https://blog.csdn.net/qq_25755645/article/details/104790052


猜你喜欢
- rfind()方法返回所在子str 被找到的最后一个索引,或者-1,如果没有这样的索引不存在,可选择限制搜索字符串string[
- 引言“深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种常用的内建类
- 类似Java打包操作,若不想让人看到Python程序内部逻辑,也可将其转换为exe可执行文件首先自己写一个Python程序,如下:print
- 参数数量及其作用该函数共有两个参数,分别是key和scope。def get_collection(key, scope=None) Wra
- 最近在做FLY量化交易系统的维护,总有客户说策略执行好慢,结果有些人展示策略一看,每个语句后边都要打印下数据。哪些数据都是辅助用的,打印出来
- MJML是一种现代的电子邮件工具,使开发人员可以在所有设备和邮件客户端上创建美观、响应迅速的出色电子邮件。这种标记语言是为了减少编写响应式电
- 一,为了让xadmin 登录者只能看到自己创建的数据1,modelclass UserTB(models.Model): nam
- 接触Python时间不长,对有些知识点,掌握的不是很扎实,我个人比较崇尚不管学习什么东西,首先一定回去把基础打的非常扎实了,再往高处走。今天
- 知识点: 函数 replicate 以下代码是实现如下功能: 代码如下:declare @sql varchar(200), --需填充的字
- 本文是基于上一篇(python项目:学生信息管理系统(初版) )进行了完善,并添加了新的功能。主要包括有:完善部分:输入错误;无数据查询等异
- 在CentOS7下,默认安装的就是python2.7,我现在来教大家如何安装python3:1、首先安装python3.6可能使用的依赖#
- 前言在后端开发过程中与数据库打交道乃是家常便饭,有时候会遇到只要数据库中的某条数据的一部分,这个时候有两种方式:(1)把其读取出来后再进行相
- 首先来看看这个php字符串替换函数 strtr()的两种用法:strtr(string,from,to) 或者strtr(string,ar
- 在数据分析领域,数据库是我们的好帮手。不仅可以接受我们的查询时间,还可以在这基础上做进一步分析。所以,我们必然要在数据库插入数据。在实际应用
- 前言安全性是所有数据库管理系统的一个重要特征。理解安全性问题是理解数据库管理系统安全性机制的前提。最近和同事在做数据库权限清理的事情,主要是
- 前言因为之前一直忽略的就是所有语言中关于位操作,觉得用处并不多,可能用到也非常简单的用法,但是其实一直忽略的是它们的用处还是非常大的,下面先
- 一.安装环境:Linux系统: CentOS 6.3 64位Oracle: Oracl
- 作为胶水语言,Python可以很方便的执行系统命令,Python3中常用的执行操作系统命令有os.system()、os.popen()、s
- 目录v-model.sync细微之处的区别总结功能作用场景:v-model <!--父组件--> &n
- 抛出的异常信息:异常详细信息: System.ArgumentOutOfRangeException: “ddlTotalCostDisco