关于的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 13 Python
Python中关于字符串对象的一些基础知识
Apr 08 Python
Python中的面向对象编程详解(上)
Apr 13 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
Jun 09 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
python生成随机红包的实例写法
Sep 02 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
Oct 22 Python
Flask之pipenv虚拟环境的实现
Nov 26 Python
python装饰器代替set get方法实例
Dec 19 Python
浅谈对python中if、elif、else的误解
Aug 20 Python
python爬取2021猫眼票房字体加密实例
Feb 19 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 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类
2006/07/15 PHP
php中Session的生成机制、回收机制和存储机制探究
2014/08/19 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
Jquery取得iframe下内容的方法
2013/11/18 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
理解JavaScript原型链
2016/10/25 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
Vuex实现购物车小功能
2020/08/17 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
Python计算回文数的方法
2015/03/11 Python
python中lambda与def用法对比实例分析
2015/04/30 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
你常见到的runtime exception
2016/09/05 面试题
学院书画协会部门岗位职责
2013/12/01 职场文书
小学清明节活动总结
2014/07/04 职场文书
怎样写家长意见
2015/06/04 职场文书
竞聘书的秘诀
2019/04/02 职场文书