用LabVIEW实现《家国梦》游戏中自动收货收金币

前几周,很流行一个手机游戏,叫《家国梦》。我在手机上玩了一两天后,发现了两个问题:

1. 收货收金币太没意思,只需要手指滑在固定的路线,一会儿就烦了

2. 怎么追赶也追不上手快的人(当然也需要一定策略)

我刚玩这个游戏的时候,还能在好友里排名第一,但三四天后就落到了第三,真是比不过年轻人。。。

正好最近在研究LabVIEW里面关于Vision的东西,就在想能不能写个自动收货收金币的程序,能够晚上临睡前让程序跑起来,早上起床时候红包就可以收获很多。说干就干!

框架设计

整体思路就是用图像识别的算法识别小火车上面是什么货物,然后把货物运到对应的建筑物那里。

经过对截图的研究,发现游戏有如下特点:

1. 小火车每次停留最长约90s,而且每次最多运3种货物,每种货物数量一般都在5个以内

2. 小火车上面的货物会随机掉落一些奖励(后来我同事告诉我其实有策略的,但我也懒得去考虑了)

3. 点击建筑物可以收获金币,并且也会随机掉落奖励(红包、蓝星币、贡献值)

基于以上三点,就可以设计框架了。

1. 首先要有一个while loop一直在跑,这样才能不停地自动收货物收金币,在这里while loop设置成一次loop跑4s

2. 然后在while loop里面要有这几个模块:采集图像、识别目标、搬运货物(收金币)。

采集图像

这里我们用的是蓝叠模拟器跑《家国梦》这个游戏,因为不需要真机,而且它也支持ADB,所以会很方便。

一开始我想的是,把Android模拟器开在桌面上,然后用LabVIEW对整个桌面截图,再把游戏的那部分截图抠出来。这样我也尝试去实现了,但是效果不大好,因为抠出来的游戏图案部分,和Android模拟器的分辨率不一样,也就是说模拟器把显示的大小做了压缩。

所以我就干脆直接用ADB截图,截完图传到PC,然后再做分析。ADB截图指令参考了这个帖子:https://www.cnblogs.com/guoguojiang/p/10347211.html

1. 用ADB发送截图指令(adb shell screencap -p /sdcard/screen.png)

2. 用ADB指令把截图传到PC上(adb pull /sdcard/screen.png)

  

3. 用Vision里的API去打开本地的png文件,并准备传给后续的图像处理部分。整个代码是这样子的:

  

4. 删除刚刚传过来的图片

识别目标

在LabVIEW的vision工具包里,有专门用于pattern matching的API,那么我这里选用了我之前用过的模板匹配的相关API。关于这个API也不细讲,因为vision的工具包也自带了例子,很容易就可以用起来,最简单的使用流程就是先学习模板,然后再去识别目标图中有没有模板信息。

1. 首先要截出不同的模板,把所有的特征部分图案截取出来,另存为png文件。在这里要注意的是,有些特征可能会随机出现在三段车厢的任意一个车厢上,不同车厢模板的图案略有不同,需要多截图几张在不同车厢的图。

  

2. 整个算法流程是,先load所有的模板(因为load+learn模板很慢,所以要先load好),然后对采集的图像做几何模板匹配,如果找到了模板的团,就把它滑动到对应的建筑物那里。如果没有找到模板,那就收集建筑物那里的金币。

在这里有一些优化算法的小办法,例如设置ROI为小火车周围的一小片区域,这样索索范围会大大减小。通过这种匹配算法,就可以把货物的坐标找到,传给后面的搬运货物模块。在下图的代码里,输入有十几张模板图,以及我们的游戏截图;输出的是检测到的货物position以及货物的index,这是为了方便找到对应的建筑物坐标(建筑物坐标实现存储好,可以认为是和index一一对应的hash-map)。在这里认为score到了900分以上才是检测到了模板(匹配的score在0-1000之间,越高表示匹配度越高)。

  

搬运货物(收金币)

搬运货物很简单,既然拿到了货物的坐标xy,以及对应建筑物的坐标xy,那么用类似如下的ADB的指令就可以了。

adb shell input swipe 250 250 300 300

在没有找到货物的时候,就可以去收金币,也是发送ADB指令就可以,但需要连续收取9个建筑物的金币,可以用一个ADB指令队列,从第一个建筑物滑倒第九个,然后再回到第一个。

结果

结果可以看下这个视频,其实ADB指令跑起来是非常慢的,都是大于我设置的loop rate(4S),但是就先这么样吧。

https://v.youku.com/v_show/id_XNDQwNDY2Mzg0MA==.html?spm=a2hzp.8244740.0.0

一晚上大概能搞100个红包,大概击败的贡献值,真是想不到小火车供货还有限额。。。

扩展

1. 因为跑两个晚上就会有200+个红包,手动去开红包太累,索性做了个自动开红包的程序。思路非常简单,就是用ADB指令定时模拟点击,而且也可以支持多种红包,画册开启,这样省了不少力气。

2. 因为截图很麻烦,所以也写了一个可以方便画框框存模板的小工具。

以后如果有新需求的话,再继续新功能吧。代码写的不好,也就是凑合能用而已,欢迎交流。

原文地址:https://www.cnblogs.com/sonwendi/p/11716667.html

时间: 2024-08-03 17:12:30

用LabVIEW实现《家国梦》游戏中自动收货收金币的相关文章

全屏游戏中自动切出到桌面的问题解决(二)

关于全屏游戏,类似英雄联盟等,游戏中,自动切到桌面的问题,之前发布过一个解决过的问题.今天又碰到一个类似的问题,当然还是用前端进程工具查找一下什么进程引起的游戏切出.经过观察为update.exe这个进程导致.那么下面就需要查找这个文件的来源了.通过查找路径,发现此文件随机性特别强,任意变换目录,而且通过软件也看不出其父进程.如图:    那么只有借助其他软件了.打开 ProcessExplorer,观察所有进程,发现有UPDATE,但是也无法观察到父进程.那么结束掉这个进程,并且使用顺网小哥的

全屏游戏中自动切出到桌面的问题解决

近期遇到一个客户全屏游戏中,自动切出游戏到桌面的问题,于是到现场解决.     打开游戏<英雄联盟>测试,并开启前端进程监测软件监测.一段时间过后,游戏切出,发现一个名称为"DeskTopHelper.exe"的进程.如图: 好吧,那么看一看这个进程是哪个软件带的吧.打开PROCESS EXPLORER,查看一下,如图: 通过进程关系,并进一步查找文件目录得知,这个进程是"95网吧大师的进程".那么得知是哪个软件导致的,解决办法就不用再说了吧. 附上工具

浅谈游戏中BOSS设计的思路

对于大多数游戏来说,BOSS在其设计上都有着不可替代的作用,也是玩家印象最为深刻的一部分.近期自己也有在做BOSS的设计工作,有一些心得想要分享一下: 1.明确BOSS的设计目的 在设计之初,我们一定要想明白,设计这个BOSS的目的在于什么,一场BOSS战往往需要花费巨大的成本来制作:美术需要花费大量时间.经历制作与其相关的多种美术资源:开发需要编写大量代码来实现BOSS相对复杂的行为,以及实现对应动画.特效及相关音频资源.一场失败的BOSS战设计,不仅会花费大量的成本,还会令玩家感到十分反感.

ActionScript3游戏中的图像编程(连载四十七)

总目录:http://blog.csdn.net/iloveas2014/article/details/38304477 3.1.3 用内侧滤镜验证Flash简单滤镜的实现原理 以上测试都在外侧进行,为了证实内侧滤镜的实现机制与外侧并无大异,我再次用一个方块让内阴影滤镜在方块上移动.(图 3.23) 图 3.23 内阴影滤镜的效果 阴影层似乎并非从复制出来的轮廓,因为方块的边缘并不存在这种内转角的结构.但是,当我把距离调回到0的时候,真相终于浮出水面.(图 3.24) 图 3.24 距离为0的

游戏中加入聊天可提高参与度和收入

可能很多人都知道QuizUp这款游戏,该游戏在2013年取得了非常不错的成绩,在欧美免费榜冠军位置持续了数月,而且游戏的下载量和用户参与度也非常高,但和大多数的游戏一样,最终也出现了下滑,在长时间的游戏之后,玩家们感到了厌倦,转而进入了其他游戏寻找更多的体验.因此QuizUp开发商Plain Vanilla加入了聊天功能,该公司发现玩家们不仅在游戏中的时长增加了,而且还发现玩家们单次的游戏时间也出现了增长. 观点:手游加入聊天可提高参与度和收入 这也是非常好重要的经验,所有的游戏开发商在考虑提高

龙龙、龙龙……又在我的梦呓中回荡。

龙龙.龙龙……每当厚厚的冥幕洒向那个贫瘠的黄土高原时,有一个小脚老太婆在用一只眼睛踉踉跄跄地探着路,伴随着冗长.浑厚的声音——龙龙……从东家走到西家. 如今,那个声音早已消弭在村庄里,消弭于黑黢黢的穹空中:小脚老太婆也已经安憩在了地下. 小时候,家里比较拮据,买不起碟机,经常到小伙伴家里看VCD,很晚才回家.奶奶不放心我,害怕我怕夜黑.害怕我着凉,总是拿着衣服挨家挨户喊着找我.每当她一喊,全村的狗都狺狺而吠,整个黑谧的村庄被奶奶的喊声和狗吠声划破,久久在空空洞洞的上空盘桓回荡.而我对她的叫声,极

Dota 游戏中的攻击与伤害分析

摘要:在上一篇文章中分析了物理攻击和护甲的攻防分析,但是忽略了英雄对战里面一个很重要的角色--技能攻击.实际上,除了少数后期英雄可以直接靠平砍(即物理攻击)杀人外,大部分英雄尤其是智力英雄还是要靠技能收割人头的.技能的使用也是评价一个玩家水平高低的主要指标.在本文中,我们就技能进行分析. 关键字:技能攻击 魔抗 护甲 伤害类型 攻击类型 Dota中的攻击类型共有普通攻击.穿刺攻击.攻城攻击.混乱攻击.英雄攻击和法术攻击6种.除了法术攻击,其他的统称为物理攻击.然而我们只考虑英雄的话,只有英雄攻击

游戏中的音效

1. 游戏中的即时音效: 在游戏中,根据情况播放的即时音效较为短暂.可以重复.也可以同时播放.由于Android中提供的MediaPlayer会占用大量的系统资源,而且播放时还会进行缓冲,有较大的延时,因此使用MediaPlayer无法实现即时音效的播放.而在Android中专门提供的SoundPool类主要用于管理和播放应用程序中的声音资源,使用该类时首先需要通过该类将声音资源加载到内存中,然后在需要的即时音效的地方播放即可,几乎没有延时现象.[由于SoundPool设计的初衷是用于无延时地播

漫谈游戏中的人工智能

写在前面   今天我们来谈一下游戏中的人工智能.当然,内容可能不仅仅限于游戏人工智能,还会扩展一些其他的话题. 游戏中的人工智能,其实还是算是游戏开发中有点挑战性的模块,说简单点呢,是状态机,说复杂点呢,是可以帮你打开新世界大门的一把钥匙.有时候看到知乎上一些可能还是前公司同事的同学的一些话,感觉还是挺哭笑不得的,比如这篇:http://zhi.hu/qu1h,吹捧机器学习这种玄学,对游戏开发嗤之以鼻.我只能说,技术不到家.Vision不够,这些想通过换工作可培养不来. 这篇文章其实我挺早就想写