首页
学习
活动
专区
工具
TVP
发布

亲,你真的是在“玩”游戏吗?还是被游戏玩?

本来想尝试一下通过电脑控制手机去截屏

然后自动把截屏上传到电脑

做完以后,

突然想起来前两天

有学生在我的课堂上玩微信的“跳一跳”游戏

(不知道的朋友请搜索微信小程序)

这个游戏非常简单

跳跃到隔壁的方块上即可

比谁的精读高,稳定性强

竟然在上课的时候玩

于是本青椒很生气

后果很严重

当然了

我这么温柔的青椒

决定用程序击败他们

让他们觉得自己在这个游戏上

没有拿第一的希望

从此认识到

"戏海无边

回头是岸"

不玩这个游戏

好好学习天天向上

好了

废话不多说

直接上程序思路:

一,获取游戏时候的图像。

什么?_?不知道怎么获取?简单,安装的一个ADB,什么是ADB? Android Debug Bridge,不知道的同学请自己百度哈(别告诉我你不知道怎么百度)。安装完ADB,然后在手机上开启USB调试模式即可。

安装成功后,在命令行输入adb version 系统返回ADB 版本号

要想看看手机是否连接成功

可以输入adb devices

如果手机连接成功,将会显示连接的设备 (如果没有显示设备,先运行adb kill-server,再重新运行 adb devices)

二,对图像进行处理,获取新物块的位置和小人当前的位置

具体怎么获取位置,详见后面程序哈。

如图所示

三,然后就是根据距离的远近去控制不同的点击时间长度,距离越远,点击时间越长。有些同学会说:这还用你讲?

哈哈,请注意,本青椒说的是通过程序去控制点击时间的长短。

好了

看看程序的运行效果:

同学们

我闪人了

MATLAB源代码

% 截屏

system('adb shell /system/bin/screencap -p /sdcard/screenshot.png');

% 将图像传到电脑

system('adb pull /sdcard/screenshot.png d:/adb调试/jump.png');

image=imread('jump.png');

gray = rgb2gray(image);

bw = edge(gray,'Canny');

roi = bw(301:end,:);

imshow(roi);

% 求物块中心位置

obj_y1 = find(sum(roi,2)>=3);

obj_x = find(roi(obj_y1(1):obj_y1(1),:)==1);

ave_x = floor(mean(obj_x));

obj_y2 = find(roi(:,ave_x-2:ave_x+2)>=1);

temp = find(obj_y2-(obj_y1(1))>50);

ave_y = floor((obj_y1(1)+obj_y2(temp(1)))/2);

% 求小人中心位置

if ave_x

roi2 = roi(:,640+1:end);

base = 640;

else

roi2 = roi(:,1:440);

base = 0;

end

man_y1 = find(sum(roi2,2)>=5);

man_obj_x = find(roi2(man_y1(1):man_y1(1),:)==1);

% man_obj_x = find(sum(roi2(man_y1(1):man_y1(1),:),2)>=3);

man_x = floor(mean(man_obj_x(1:min(size(man_obj_x,2)-2,8))))+base;

man_y2 = find(roi(:,man_x-1:man_x+1)>=1);

% temp = find(man_y2-(man_y1(1))>50);

% man_y = floor((man_y1(1)+man_y2(temp(1)))/2)

% distance = sqrt((ave_x-man_x)^2 + (ave_y-man_y)^2);

imshow(image);

hold on

plot([ave_x,ave_x],[ave_x,0],'c')

plot([ave_x,ave_x],[ave_x,1920],'c')

plot([man_x,man_x],[man_x,0])

plot([man_x,man_x],[man_x,1920])

hold off

press_time = int16(abs((ave_x-man_x))*142/90);

pos = randi([340,740],1,2);

str = ['adb shell input swipe 500 300 500 300 ', num2str(press_time)];

system(str)

pause(2)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180106G07CS800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券