关于的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的SQLAlchemy框架使用入门
Apr 29 Python
Python通过OpenCV的findContours获取轮廓并切割实例
Jan 05 Python
使用python绘制3维正态分布图的方法
Dec 29 Python
详解Python中的内建函数,可迭代对象,迭代器
Apr 29 Python
Pycharm运行加载文本出现错误的解决方法
Jun 27 Python
python2.7的flask框架之引用js&amp;css等静态文件的实现方法
Aug 22 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
keras实现图像预处理并生成一个generator的案例
Jun 17 Python
Python基于staticmethod装饰器标示静态方法
Oct 17 Python
详解Python中list[::-1]的几种用法
Nov 16 Python
Python的Tqdm模块实现进度条配置
Feb 24 Python
Python装饰器的练习题
Nov 23 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 导出数据到淘宝助手CSV的方法分享
2010/02/27 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
php function用法如何递归及return和echo区别
2014/03/07 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
Javascript中call的两种用法实例
2013/12/13 Javascript
Egret引擎开发指南之视觉编程
2014/09/03 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
2016/08/15 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
jQuery实现可兼容IE6的遮罩功能详解
2017/09/19 jQuery
nvm、nrm、npm 安装和使用详解(小结)
2019/01/17 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
在Python的Django框架中编写错误提示页面
2015/07/22 Python
python中requests小技巧
2017/05/10 Python
python3学习笔记之多进程分布式小例子
2018/02/13 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
如何理解python中数字列表
2020/05/29 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
python给list排序的简单方法
2020/12/10 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
常用的HTML5列表标签
2017/06/20 HTML / CSS
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
一套英文Java笔试题面试题
2016/04/21 面试题
大学生毕业求职自荐书范文
2014/02/04 职场文书
我爱读书演讲稿
2014/05/07 职场文书
学期个人工作总结
2015/02/13 职场文书
MySQL系列之三 基础篇
2021/07/02 MySQL
i7 6700处理器相当于i5几代
2022/04/19 数码科技