关于的python五子棋的算法


Posted in Python onMay 02, 2022

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原创出来的“五子连珠”算法,通过四中子算法分析所有下棋的方式。【反斜杠查找法 、竖向查找法、斜杠查找法、横向查找法】
反斜杠查找法:"" 顾名思义就是根据坐上的棋子往右下查找判断是否大于五子。
斜杠查找法:“/” 和反斜杠类似。
竖向查找法:"|" 顾名思义就是从上往下查找,最简单。
横向查找法:“—” 和竖向一样只是变成了横向。

通过这四种算法就可以全面覆盖棋盘下子方式,而且不会有遗漏产生。

关于的python五子棋的算法

以上就是本文的全部内容,希望对大家的学习有所帮助。


Tags in this post...

Python 相关文章推荐
Python中itertools模块用法详解
Sep 25 Python
Python3.x版本中新的字符串格式化方法
Apr 24 Python
简单介绍Python中的round()方法
May 15 Python
使用Django的模版来配合字符串翻译工作
Jul 27 Python
python实现按行切分文本文件的方法
Apr 18 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
pytorch使用Variable实现线性回归
May 21 Python
python中adb有什么功能
Jun 07 Python
Spring http服务远程调用实现过程解析
Jun 11 Python
如何利用python正则表达式匹配版本信息
Dec 09 Python
python定义具名元组实例操作
Feb 28 Python
Python中常见的导入方式总结
May 06 Python
python开发人人对战的五子棋小游戏
python pygame 开发五子棋双人对弈
May 02 #Python
Python开发简易五子棋小游戏
May 02 #Python
Python开发五子棋小游戏
python获取带有返回值的多线程
May 02 #Python
总结三种用 Python 作为小程序后端的方式
Python如何用re模块实现简易tokenizer
May 02 #Python
You might like
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
Django框架封装外部函数示例
2019/05/28 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
基于python实现生成指定大小txt文档
2020/07/20 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
python如何写个俄罗斯方块
2020/11/06 Python
浅析python连接数据库的重要事项
2021/02/22 Python
创业资金计划书
2014/02/06 职场文书
红色故事演讲稿
2014/05/22 职场文书
安全标语大全
2014/06/10 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
家装电话营销开场白
2015/05/29 职场文书
新入职员工工作总结
2015/10/15 职场文书
html实现弹窗的实例
2021/06/09 HTML / CSS
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫