基于python的五子棋游戏的设计和实现,Python五子棋人机对战算法
本文主要介绍了五子棋算法在python中的实现,文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
Python五子棋原算法,供大家参考,具体内容如下
我们都看过五子棋,但在我看来,五子棋单机游戏靠逻辑取胜很重要。常用的算法是五子棋算法,但是很多五子棋算法并不全面。要么最后一个落在四个字中间出错,要么下载前四个字出错,在线五子棋很头疼,所以我创建了一个判断五子棋的算法,完全覆盖了棋盘上的任何错误。
if(J4NA[I][J]==A[I][J 1]A[I][J]==A[I][J 2]A[I][J 3]A[I][J]==A[
win=A[I][j];
以上是C语言五子五子棋算法的一部分,经常遇到游戏错误,不全面。
于是我们创造了一个原创算法对其进行改进,进行全面整改。
#获胜方法
def IsWinner(p,index,fun):
ChessValue=0 #=4会赢棋。
如果index - fun 0或者pos[index-fun][2]!=p[2]: #当前点击的网格是否是第一行,在假设的第一个网格中。
打印(-第一个网格)
对于(1,5): # (1-4)范围内的I
如果index (fun * i)=191而pos[index(fun * I)][2]==p[2]:
chessValue=chessValue 1
如果chessValue=4:
如果p[2]==1:
打印(“最后一次点击是第一个网格-黑色获胜”)
Showchess () #显示所有已放置的棋子。
结果显示(1)
如果p[2]==2:
打印(“最后一次点击是第一个网格-白赢”)
Showchess () #显示所有已放置的棋子。
结果显示(2)
elif指数基金191或pos[指数基金][2]!=p[2]: #当前点击的网格是不是最后一行,在最后一个网格里。
打印(-最后一个网格)
对于(1,5): # (1-4)范围内的I
if pos[index-(fun * I)][2]==p[2]:
chessValue=chessValue 1
如果chessValue=4:
如果p[2]==1:
打印(“最后一次点击是最后一个网格-黑色获胜”)
Showchess () #显示所有已放置的棋子。
结果显示(1)
如果p[2]==2:
打印(“最后一次点击是最后一个网格-白赢”)
Showchess () #显示所有已放置的棋子。
结果显示(2)
Else: #不是第一个也不是最后一个,就是当前点击的是五子连珠中间的棋子。
打印(-中间有网格)
第一个循环检测在网格的上部是否有相似的块。
对于范围(1,4): #(1-3)中的I,三个循环
如果index - (fun * i)=0且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原创出来的五子连珠算法,通过四中子算法分析所有下棋的方式。【反斜杠查找法 、竖向查找法、斜杠查找法、横向查找法】
反斜杠查找法:"" 顾名思义就是根据坐上的棋子往右下查找判断是否大于五子。
斜杠查找法:/ 和反斜杠类似。
竖向查找法:"" 顾名思义就是从上往下查找,最简单。
横向查找法:— 和竖向一样只是变成了横向。
通过这四种算法就可以全面覆盖棋盘下子方式,而且不会有遗漏产生。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。