关于的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分析apache访问日志脚本分享
Feb 26 Python
Python中逗号的三种作用实例分析
Jun 08 Python
解读Python编程中的命名空间与作用域
Oct 16 Python
python实现基于SVM手写数字识别功能
May 27 Python
Python API自动化框架总结
Nov 12 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
Nov 19 Python
Python类如何定义私有变量
Feb 03 Python
详解python 降级到3.6终极解决方案
Feb 06 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
Jul 03 Python
如何教少儿学习Python编程
Jul 10 Python
Python 读取位于包中的数据文件
Aug 07 Python
如何利用python正则表达式匹配版本信息
Dec 09 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 chmod 函数与批量修改文件目录权限
2010/05/10 PHP
PHP引用符&amp;的用法详细解析
2013/08/22 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
php表单处理操作
2017/11/16 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
一些mootools的学习资源
2010/02/07 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
jquery()函数的三种语法介绍
2013/10/09 Javascript
jquery选择器使用详解
2014/04/08 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
ajax图片上传,图片异步上传,更新实例
2016/12/30 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
使用PyTorch训练一个图像分类器实例
2020/01/08 Python
如何通过python实现全排列
2020/02/11 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
校园文化建设方案
2014/02/03 职场文书
中餐厅经理岗位职责
2014/04/11 职场文书
资金申请报告范文
2015/05/14 职场文书
小学三年级作文之写景
2019/11/05 职场文书
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB