关于的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实现根据月份和日期得到星座的方法
Mar 27 Python
Python字符串和文件操作常用函数分析
Apr 08 Python
numpy.random.seed()的使用实例解析
Feb 03 Python
TensorFlow Session使用的两种方法小结
Jul 30 Python
Python常用的json标准库
Feb 19 Python
Python日期时间Time模块实例详解
Apr 15 Python
pycharm new project变成灰色的解决方法
Jun 27 Python
python多线程案例之多任务copy文件完整实例
Oct 29 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 Python
python使用turtle库绘制奥运五环
Feb 24 Python
Python configparser模块配置文件过程解析
Mar 03 Python
使用OpenCV对车道进行实时检测的实现示例代码
Jun 19 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
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
PHP加密解密函数详解
2015/10/28 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
Angular用来控制元素的展示与否的原生指令介绍
2015/01/07 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
2017/02/28 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
介绍Python中的文档测试模块
2015/04/28 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
Python AES加密实例解析
2018/01/18 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
2020/02/26 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
Python 日期与时间转换的方法
2020/08/01 Python
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
好的自荐信的要求
2013/10/30 职场文书
体育老师的教学自我评价分享
2013/11/19 职场文书
保护环境建议书
2014/03/12 职场文书
公证书样本
2014/04/10 职场文书
班长演讲稿范文
2014/04/24 职场文书
爱心活动计划书
2014/04/26 职场文书
感恩的心主题班会
2015/08/12 职场文书
迎国庆主题班会
2015/08/17 职场文书