关于的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编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
详解python中的线程
Feb 10 Python
15行Python代码带你轻松理解令牌桶算法
Mar 21 Python
Python入门必须知道的11个知识点
Mar 21 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
Python多继承原理与用法示例
Aug 23 Python
python实现三次样条插值
Dec 17 Python
Python3.5实现的三级菜单功能示例
Mar 25 Python
python用类实现文章敏感词的过滤方法示例
Oct 27 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
Jun 05 Python
python实现双链表
May 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
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
jQuery源码分析之Event事件分析
2010/06/07 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
Javascript中setTimeOut和setInterval的定时器用法
2015/06/12 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
图文讲解vue的v-if使用方法
2019/02/11 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
香港交友网站:be2香港
2018/07/22 全球购物
护士自我评价范文
2014/01/25 职场文书
保护环境倡议书
2014/04/14 职场文书
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
慈善晚会策划方案
2014/05/14 职场文书
旅游节目策划方案
2014/05/26 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
婚前协议书范本
2014/10/27 职场文书
2015年党总支工作总结
2015/05/25 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
pyqt5打包成exe可执行文件的方法
2021/05/14 Python
解析Java异步之call future
2021/06/14 Java/Android
Tomcat执行startup.bat出现闪退的原因及解决办法
2022/04/20 Servers