用Python做一个欢乐豆蹭蹭上涨的神器!自从用了它斗地主我就没输过!

2021年9月13日 5点热度 0条评论 来源: 轻松学Python

最近的斗地主总是输,要不就是玩着玩着有事去了,结果只能一直输~

然后大腿一拍,我这斗地主实力不行,那不得Python来凑,让AI来帮我赢取欢乐豆,实现财富自由,撸起袖子说干就干~

下面我们来介绍这个工具的制作,在开始之前,我创了一个Python的学习交流群

点我进裙

大家有什么问题都可以一起交流啥的,如果你还是零基础,小编也准备了资料,都免费送给各位,大家一起进步~

最最最核心的功能

这款出牌器是基于DouZero开发的,核心需要利用训练好的AI模型来帮住我们给出最优出牌方案。

关于出牌器,先要需要确认一个AI出牌角色,代表我们玩家自己。

我们只要给这个AI输入玩家手牌和三张底牌。确认好地主和农民的各个角色,告诉它三个人对应的关系,这样就可以确定队友和对手。

我们还要将每一轮其他两人的出牌输入,这样出牌器就可以根据出牌数据,及时提供给我们最优出牌决策,带领我们取得胜利!

那么如何获取三者之间的关系呢?

谁是地主?谁是农民?是自己一人作战还是农民合作?

自己玩家的手牌是什么?三张底牌是什么?这些也都需要在开局后确认好~

拆解需求,大致可以整理出核心功能如下:

UI设计排版布局

显示三张底牌

显示AI角色出牌数据区域,上家出牌数据区域,下家出牌数据区域,本局胜率区域

AI玩家手牌区域

AI出牌器开始停止

手牌和出牌数据识别

游戏刚开始根据屏幕位置,截图识别AI玩家手牌及三张底牌

确认三者之间的关系,识别地主和农民角色,确认队友及对手关系

识别每轮三位玩家依次出了什么牌,刷新显示对应区域

AI出牌方案输出

加载训练好的AI模型,初始化游戏环境

每轮出牌判断,根据上家出牌数据给出最优出牌决策

自动刷新玩家剩余手牌和本局胜率预测

2、实现步骤

1、UI设计排版布局

根据上述功能,我们首先考虑进行简单的UI布局设计,这里我们使用的是pyqt5。核心设计代码如下:

实现效果如下:

2.、手牌和出牌数据识别

下面我们需要所有扑克牌的模板图片与游戏屏幕特定区域的截图进行对比,这样才能获取AI玩家手牌、底牌、每一轮出牌、三者关系(地主、地主上家、地主下家)。

识别AI玩家手牌及三张底牌:

我们可以截取游戏屏幕,根据固定位置来识别当前AI玩家的手牌和三张底牌。核心代码如下:

效果如下所示:

地主、地主上家、地主下家:

同理我们可以根据游戏屏幕截图,识别地主的图标,确认地主角色。核心代码如下:


这样我们就可以得到玩家AI手牌,其他玩家手牌(预测),地主三张底牌,三者角色关系,出牌顺序。核心代码如下:

效果如下:

3、AI出牌方案输出

下面我们就需要用到DouZero开源的AI斗地主了。DouZero项目地址:https://github.com/kwai/DouZero。我们需要将该开源项目下载并导入项目中。

创建一个AI玩家角色,初始化游戏环境,加载模型,进行每轮的出牌判断,控制一局游戏流程的进行和结束。核心代码如下:

到这里,整个AI斗地主出牌流程基本已经完成了。

3、出牌器用法

按照上述过程,这款AI出牌器已经制作完成了。

后面应该如何使用呢?

如果不想研究源码,只想使用这款AI斗地主出牌器,验证下效果,该怎么配置环境运行这个AI出牌器呢?

下面就开始介绍。

1、环境配置

首先我们需要安装这些第三方库,配置相关环境,如下所示:

2、坐标调整确认

我们可以打开欢乐斗地主游戏界面,将游戏窗口模式下最大化运行,把AI出牌器程序窗口需要移至右下角,不能遮挡手牌、地主标志、底牌、历史出牌这些关键位置。

其次我们要确认屏幕截图获取的各个区域是否正确。如果有问题需要进行区域位置坐标调整。

3、运行测试

当所有环境配置完成,各区域坐标位置确认无误之后,我们就可以直接运行程序,测试效果啦~

首先我们运行AI出牌器程序,打开欢乐斗地主游戏界面,进入游戏。当玩家就位,手牌分发完毕,地主身份确认之后,我们就可以点击画面中开始按钮,让AI来帮助我们斗地主了。


    原文作者:轻松学Python
    原文地址: https://www.cnblogs.com/hahaa/p/15255281.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。