关于的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编程中字符串和列表的基本知识讲解
Oct 14 Python
Python Paramiko模块的安装与使用详解
Nov 18 Python
Pycharm学习教程(1) 定制外观
May 02 Python
Python实现购物车功能的方法分析
Nov 10 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
May 24 Python
python处理“
Jun 10 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
Aug 20 Python
python并发编程多进程之守护进程原理解析
Aug 20 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
python 循环数据赋值实例
Dec 02 Python
python时间日期操作方法实例小结
Feb 06 Python
python 开心网和豆瓣日记爬取的小爬虫
May 29 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页面缓存ob系列函数介绍
2012/10/18 PHP
解析dedecms空间迁移步骤详解
2013/05/15 PHP
php事务处理实例详解
2014/07/11 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
详解Laravel服务容器的绑定与解析
2019/11/05 PHP
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
Python实例之wxpython中Frame使用方法
2014/06/09 Python
python中global用法实例分析
2015/04/30 Python
Python中将字典转换为列表的方法
2016/09/21 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
django settings.py 配置文件及介绍
2019/07/15 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
Otel.com:折扣酒店预订
2017/08/24 全球购物
高山背包:High Sierra
2017/11/23 全球购物
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
杠杆的科学教学反思
2014/01/10 职场文书
学校消防演习方案
2014/02/19 职场文书
乡镇信息公开实施方案
2014/03/23 职场文书
公司财务会计主管应聘求职信
2014/09/26 职场文书
《丑小鸭》教学反思
2016/02/19 职场文书
Python进程池与进程锁之语法学习
2022/04/11 Python
Python开发五子棋小游戏
2022/04/28 Python