关于的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多线程、异步+多进程爬虫实现代码
Feb 17 Python
浅谈Python里面小数点精度的控制
Jul 16 Python
python实现AES加密和解密
Mar 27 Python
python pandas时序处理相关功能详解
Jul 03 Python
Django CSRF跨站请求伪造防护过程解析
Jul 31 Python
在python中计算ssim的方法(与Matlab结果一致)
Dec 19 Python
python实现控制台输出彩色字体
Apr 05 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
Apr 08 Python
Python3爬虫mitmproxy的安装步骤
Jul 29 Python
selenium自动化测试入门实战
Dec 21 Python
Python的logging模块基本用法
Dec 24 Python
Python机器学习之基于Pytorch实现猫狗分类
Jun 08 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数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
2018/10/24 PHP
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
ExtJS下grid的一些属性说明
2009/12/13 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
原生js实现验证码功能
2017/03/16 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
使用js实现将后台传入的json数据放在前台显示
2018/08/06 Javascript
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
python函数缺省值与引用学习笔记分享
2013/02/10 Python
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
Python 列表理解及使用方法
2017/10/27 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
台湾森森购物网:U-mall
2017/10/16 全球购物
黄色火烈鸟:De Gele Flamingo
2019/03/18 全球购物
给朋友的道歉信
2014/01/09 职场文书
全民健身日活动方案
2014/01/29 职场文书
小学教师师德反思
2014/02/03 职场文书
2019客服个人年终工作总结范文
2019/07/08 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang