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

时间:2022-09-18 16:37:28

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

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)

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

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

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

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

识别目标

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

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

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

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

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

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

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

搬运货物(收金币)

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

adb shell input swipe 250 250 300 300

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

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

结果

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

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

一晚上大概能有100个红包,以及几百的贡献值,不过小火车每天供货有限额,送完当天就不送了(这个真没想到,因为之前从没收满过)。

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

扩展

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

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

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

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

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

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

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

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

  1. Python与家国天下

    导读:Python猫是一只喵星来客,它爱地球的一切,特别爱优雅而无所不能的 Python.我是它的人类朋友豌豆花下猫,被授权润色与发表它的文章.如果你是第一次看到这个系列文章,那我强烈建议,请先看看它 ...

  2. 浅谈游戏中BOSS设计的思路

    对于大多数游戏来说,BOSS在其设计上都有着不可替代的作用,也是玩家印象最为深刻的一部分.近期自己也有在做BOSS的设计工作,有一些心得想要分享一下: 1.明确BOSS的设计目的 在设计之初,我们一定 ...

  3. 可在 html5 游戏中使用的 js 工具库

    可在 html5 游戏中使用的 js 工具库 作者: 木頭 时间: September 21, 2014 分类: Utilities,Game 使用 cocos2d-js 3.0 开发游戏项目两三个月 ...

  4. 地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了

    地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了 四叉树对于区域查询,效率比较高. 原理图

  5. FPS中受伤UI在VR游戏中的实现思路

    FPS中受伤UI在VR游戏中的实现思路 希望实现的效果 这几天一直在尝试各种解决方案,现在算是不完美的解决啦,记录一下心路历程,思路有了算法都比较简单. V_1 玩家胶囊体指向的方向作为正方向,计算出 ...

  6. 游戏中的人工智能——初探AI

    一.游戏中的人工智能 让游戏具有挑战性: 让游戏好玩的关键因素是为之找到合适的难度等级: 人工智能在游戏中的作用是通过提供富有挑战性的竞争对象来让游戏更好玩,而在游戏中行动逼真的非玩家角色(NPC), ...

  7. 【腾讯GAD暑期训练营游戏程序开发】游戏中的动画系统作业

    游戏中的动画系统作业说明文档   一.实现一个动画状态机:至少包含3组大的状态节点

  8. [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法

    12.3 We have the following method used in a chess game: boolean canMoveTo( int x, int y). This metho ...

  9. Unity3D 2D游戏中寻径算法的一些解决思路

    需求 unity3d的3d开发环境中,原生自带了Navigation的组件,可以很便捷快速的实现寻路功能.但是在原生的2d中并没有相同的功能. 现在国内很多手机游戏都有自动寻路的功能,或者游戏中存在一 ...

随机推荐

  1. 《Matrix Computation 3rd》读书笔记——第2章 矩阵分析

  2. PostgreSQL simple select(group by and insert into ...select)

    warehouse_db=# create table student(number int primary key,name varchar(20),age int);CREATE TABLEwar ...

  3. java入门第二步之helloworld【转】

    前一篇博客已经介绍了jdk的安装:接下来我们就乘热打铁,完成第一个程序:helloworld(每学一样程序的新东西都是从实现helloworld开始的) 1.不是用开发工具IDE,只是使用记事本来实现 ...

  4. sqoop导入数据到hive

    1.1hive-import参数 使用--hive-import就可以将数据导入到hive中,但是下面这个命令执行后会报错,报错信息如下: sqoop import --connect jdbc:my ...

  5. 微软职位内部推荐-Sr SDE

    微软近期Open的职位: MSN reaches nearly half a billion people across the globe where we are the #1 portal in ...

  6. oracle10g库连接报错

  7. 8、Spring+Struts2+MyBaits(Spring注解+jdbc属性文件+log4j属性文件)

    一.注解理论 使用注解来构造IoC容器 用注解来向Spring容器注册Bean.需要在applicationContext.xml中注册<context:component-scan base- ...

  8. &period;net使用RabbitMQ

    前面的两篇博文算是把RabbitMQ的基础了解了下,今天学习.Net 中RabbitMQ的使用.原本这篇博文是应该上周写的,可在自己使用的过程中出现了一个问题bug:就是在连接服务端时,一直报下面的错 ...

  9. VMware Workstation 12 Pro 之安装林耐斯Ubuntu X64系统

    VMware Workstation 12 Pro 之安装林耐斯Ubuntu X64系统... -------------- Linux依照国际音标应该是/'linэks/——类似于“里讷克斯&quo ...

  10. ArcGIS Server学习之问题:ArcGIS Server10&period;5发布地图显示空白

    一.安装ArcGIS10.5 参考ArcGIS 10.5 for Desktop 完整安装教程(含win7/8/10 32/64位+下载地址+亲测可用) | 麻辣GIS 二.安装ArcGIS Serv ...