关于的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列表操作之extend和append的区别实例分析
Jul 28 Python
python脚本实现数据导出excel格式的简单方法(推荐)
Dec 30 Python
多版本Python共存的配置方法
May 22 Python
Python实现的桶排序算法示例
Nov 29 Python
Django 中使用流响应处理视频的方法
Jul 20 Python
如何使用python进行pdf文件分割
Nov 11 Python
python从内存地址上加载python对象过程详解
Jan 08 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
Aug 11 Python
python 实现超级玛丽游戏
Nov 25 Python
python自动统计zabbix系统监控覆盖率的示例代码
Apr 03 Python
python小程序之飘落的银杏
Apr 17 Python
Python自然语言处理之切分算法详解
Apr 25 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
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
php中simplexml_load_string使用实例分享
2014/02/13 PHP
php实现微信公众平台账号自定义菜单类
2015/10/11 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
纯JS代码实现气泡效果
2016/05/04 Javascript
js判断PC端与移动端跳转
2020/12/24 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
vue编写简单的购物车功能
2021/01/08 Vue.js
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python创建模块及模块导入的方法
2015/05/27 Python
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
对python函数签名的方法详解
2019/01/22 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
C语言如何决定使用那种整数类型
2016/11/26 面试题
学校门卫工作职责
2013/12/07 职场文书
联谊会主持词
2014/03/26 职场文书
政风行风整改方案
2014/10/25 职场文书
道歉的话语大全
2015/05/12 职场文书
学校证明范文
2015/06/24 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers