前言
最近我遇到了一款基于快手团队开发的开源AI斗地主——DouZero制作的“成熟”AI,让我深感其背后的技术魅力。今天,我将带大家一起学习如何制作一个基于DouZero的出牌器,看看AI是如何助力斗地主的!
核心功能设计
这款出牌器是基于DouZero开发的,其核心是利用训练好的AI模型,为我们提供最优的出牌方案。在实现过程中,我们需要确认一个AI出牌角色,代表玩家自己。我们只需将玩家手牌和三张底牌输入给这个AI,并明确地主和农民的各个角色及其关系,即可确定队友和对手。
同时,我们还需要将每一轮其他两人的出牌数据输入到出牌器中,这样它就能根据这些数据,及时为我们提供最优的出牌决策,带领我们走向胜利。那么,如何获取三者之间的关系呢?谁是地主?谁是农民?是单人作战还是农民合作?玩家手牌和底牌是什么?这些都需要在开局后确认清楚。
要实现的核心功能大致如下:
UI设计排版布局
手牌和出牌数据识别
AI出牌方案输出
实现步骤
-
UI设计排版布局:根据功能需求,我们首先进行简单的UI布局设计,这里使用的是pyqt5。核心设计代码如下:
(此处为代码段) -
手牌和出牌数据识别:接下来,我们需要将所有扑克牌的模板图片与游戏屏幕特定区域的截图进行对比,以获取AI玩家的手牌、底牌、每一轮出牌以及三者关系(地主、地主上家、地主下家)。
识别AI玩家手牌及三张底牌:通过截取游戏屏幕,根据固定位置来识别当前AI玩家的手牌和三张底牌。核心代码如下:
(此处为代码段)
效果如下:
(此处为图示或描述)
地主、地主上家、地主下家:同理,我们可以根据游戏屏幕截图识别地主的图标,确认地主角色。核心代码如下:
(此处为代码段)
这样我们就可以得到玩家AI的手牌、其他玩家的手牌(预测)、地主的三张底牌以及三者的角色关系和出牌顺序。
效果如下:
(此处为图示或描述)
- AI出牌方案输出:接下来,我们需要用到DouZero开源的AI斗地主项目。其项目地址位于:https://github.com/kwai/DouZero。我们需要下载并导入该开源项目到我们的项目中。
创建一个AI玩家角色,初始化游戏环境,加载模型,进行每轮的出牌判断,控制一局游戏的进行和结束。核心代码如下:
(此处为代码段)
到这里,整个AI斗地主出牌流程已经基本完成。
出牌器用法
按照上述过程,这款AI出牌器已经制作完成。那么,如何使用它呢?如果不需要研究源码,只想使用这款AI斗地主出牌器验证效果,该如何配置环境并运行它呢?下面将进行介绍。
- 环境配置:首先,我们需要安装这些第三方库并配置相关环境,如下所示:2. 坐标调整确认:打开游戏界面,将游戏窗口最大化运行,将AI出牌器程序窗口移至右下角,确保不遮挡手牌、地主标志、底牌、历史出牌等关键位置。其次,我们要确认屏幕截图获取的各个区域是否正确。如果有问题,需要进行区域位置坐标调整。3. 运行测试:当所有环境配置完成且各区域坐标位置确认无误后,我们可以直接运行程序进行测试。首先运行AI出牌器程序并打开游戏界面进入游戏。当玩家就位、手牌分发完毕且地主身份确认后,点击画面中开始按钮让AI来帮助我们斗地主。