关于的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程序设计入门(2)变量类型简介
Jun 16 Python
用Python的Django框架完成视频处理任务的教程
Apr 02 Python
python魔法方法-属性访问控制详解
Jul 25 Python
Python合并多个Excel数据的方法
Jul 16 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
Jun 08 Python
解决python flask中config配置管理的问题
Jul 26 Python
pytorch 共享参数的示例
Aug 17 Python
Python 中使用 PyMySQL模块操作数据库的方法
Nov 10 Python
python 实现单通道转3通道
Dec 03 Python
浅谈Python中re.match()和re.search()的使用及区别
Apr 14 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
Jun 11 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
Apr 21 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支持页面回退的两种方法[转]
2007/02/14 PHP
php中的数组操作函数整理
2008/08/18 PHP
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
php 发送带附件邮件示例
2014/01/23 PHP
php统计时间和内存使用情况示例分享
2014/03/13 PHP
php返回当前日期或者指定日期是周几
2015/05/21 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
Valerio 发布了 Mootools
2006/09/23 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
关于jQuery中.attr()和.prop()的问题探讨
2013/09/06 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
javascript中tostring()和valueof()的用法及两者的区别
2015/11/16 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
ionic实现可滑动的tab选项卡切换效果
2020/04/15 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
JS实现快递单打印功能【推荐】
2018/06/21 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
layui table 获取分页 limit的方法
2019/09/20 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
2020/09/08 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
2018/11/06 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
实习鉴定评语
2014/01/19 职场文书
幼儿园秋游活动方案
2014/01/21 职场文书
财产保全担保书范文
2014/04/01 职场文书
村党组织公开承诺书
2015/04/30 职场文书
MySQL视图概念以及相关应用
2022/04/19 MySQL