关于的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 26 Python
用PyQt进行Python图形界面的程序的开发的入门指引
Apr 14 Python
python超简单解决约瑟夫环问题
May 12 Python
Python实现批量更换指定目录下文件扩展名的方法
Sep 19 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
Aug 31 Python
python 删除列表里所有空格项的方法总结
Apr 18 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
Mar 18 Python
python如何读取bin文件并下发串口
Jul 05 Python
python2爬取百度贴吧指定关键字和图片代码实例
Aug 14 Python
python 利用opencv实现图像网络传输
Nov 12 Python
python中翻译功能translate模块实现方法
Dec 17 Python
只用Python就可以制作的简单词云
Jun 07 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
main.php
2006/12/09 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
url地址自动加#号问题说明
2010/08/21 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
2018/01/13 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
[35:27]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第二场 10.29
2020/10/29 DOTA
Python学习笔记(二)基础语法
2014/06/06 Python
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
PyQt5每天必学之带有标签的复选框
2018/04/19 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
匡威帆布鞋美国官网:Converse美国
2016/08/22 全球购物
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
大学生开西餐厅创业计划书
2014/02/01 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
入党函调证明材料
2014/12/24 职场文书
学校德育工作总结2015
2015/05/11 职场文书
医院消毒隔离制度
2015/08/05 职场文书