关于的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中join 和 split详解(推荐)
Jun 30 Python
Python之os操作方法(详解)
Jun 15 Python
python对DICOM图像的读取方法详解
Jul 17 Python
python3安装pip3(install pip3 for python 3.x)
Apr 03 Python
Python实现简单http服务器
Apr 12 Python
解决python3爬虫无法显示中文的问题
Apr 12 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
Jan 18 Python
keras自定义回调函数查看训练的loss和accuracy方式
May 23 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
Jun 04 Python
python实现在列表中查找某个元素的下标示例
Nov 16 Python
Python基础之hashlib模块详解
May 06 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
理解PHP5中static和const关键字的区别
2007/03/19 PHP
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
php实现用户在线时间统计详解
2011/10/08 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
js模仿hover的具体实现代码
2013/12/30 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
2016/06/30 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
Python3基础之list列表实例解析
2014/08/13 Python
Python中用于去除空格的三个函数的使用小结
2015/04/07 Python
python 删除指定时间间隔之前的文件实例
2018/04/24 Python
pandas中去除指定字符的实例
2018/05/18 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
python使用KNN算法识别手写数字
2019/04/25 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
基于python检查矩阵计算结果
2020/05/21 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
微软俄罗斯官方网站:Microsoft俄罗斯
2016/09/18 全球购物
总裁秘书岗位职责
2013/12/04 职场文书
会计学自我鉴定
2014/02/06 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
书法大赛策划方案
2014/06/04 职场文书
护理专业自荐书
2014/06/04 职场文书