前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用 Wolfram 语言玩「跳一跳」

用 Wolfram 语言玩「跳一跳」

作者头像
WolframChina
发布2018-05-31 15:26:16
8930
发布2018-05-31 15:26:16
举报
文章被收录于专栏:WOLFRAM

2017年12月28日下午,微信发布了 6.6.1 版本,加入了「小游戏」功能,并提供了官方 demo「跳一跳」。

是一个 2.5D 插画风格的益智游戏,玩家可以通过按压屏幕时间的长短来控制这个「小人」跳跃的距离。分数越高,那么在好友排行榜更加靠前。可能刚开始上手的时候,因为时间距离之间的关系把握不恰当,只能跳出几个就掉到了台子下面。

如果能精确测量出起始和目标点之间的距离,就可以估计按压的时间来精确跳跃。看到网上有人用 Python 写的脚本来玩(https://github.com/wangshub/wechat_jump_game),有手动版和自动版的。想到用 Wolfram 语言 来做也很简单,甚至更简洁,先做了一个手动版的(不到十行代码)

原理和那个 Python 版的一样,主要做了两个改动:

① 用 Adb 工具获取手机截图再将截图pull上来,这种方法可行但是很卡,改用手机投屏软件会比较流畅;

② Python 手动版的需要用鼠标先点击起始位置,然后点击目标位置,因为起始位置容易根据颜色算出来,所以改为点击一次就行。

01

所需工具

Mathematica 11.2

Android 手机

Total Control

Adb 驱动

02

原理说明

通过 Total Control 软件将手机屏幕通过 WiFi 实时显示在电脑,用 Wolfram 语言 的 CurrentScreenImage 实时截屏。起始位置很容易根据颜色算出来,目标位置由鼠标点击确定。根据像素距离,计算按压时间(1080P 手机屏幕距离系数1.393、2k 屏幕是 1.0)。用Adb工具发送命令到手机模拟按压,蓄力一跳(adb shell input swipe x1 y1 x2 y2 time)

03

ADB 配置

① 下载 ADB 驱动 https://adb.clockworkmod.com/.

② 安装 ADB 后,请在环境变量里将 adb 的安装路径保存到 PATH 变量里,确保 adb 命令可以被识别到。

③ 安装完后插入安卓设备且安卓已打开 USB 调试模式,终端输入 adb devices ,显示如下,表明设备已连接:

List of devices attached

6934dc33 device

※ 注:部分新机型可能需要再另外勾上允许模拟点击权限。小米设备除了 USB 调试,还要打开底下的 USB 调试(安全)。

04

Wolfram 语言代码


EventHandler[

Dynamic[img = CurrentScreenImage[{{7, 64}, {7 + 360, 64 + 640}}]],

"MouseDown" :> (

pos1 = Mean@PixelValuePositions[img, RGBColor[{50, 50, 105}/255.], 0.03];

pos2 = MousePosition["Graphics"];

time = Round[EuclideanDistance[pos1, pos2]*3*1.393];

ReadList[ToString[StringForm["!adb shell input swipe `` `` `` `` ``",

Sequence @@ RandomInteger[{450, 550}, 4], time]]]

)

]


05

步骤

① 安卓手机打开USB调试,设置开发者选项USB 调试,电脑与手机 USB 线连接,确保执行 adb devices 可以找到设备 id.

② 启动 Total Control 通过 WiFi 将手机屏幕投射到电脑,拖动到合适的位置(比如左上角),确保 Mathematica 能截取到完整的界面。

③ 界面转至微信跳一跳游戏,点击开始游戏。

④ 打开 Mathematica 运行代码,用鼠标点击目标位置,开始游戏。

06

演示

07

其他

要改成自动版需要识别目标中心点,这样就不需要手动点击自动弹跳,现在已经有人做了,https://zhuanlan.zhihu.com/p/33330731,效果好像还不太好,有兴趣的可以继续改进。

投屏的软件除了 Total Control,也可以用360手机助手等。用 USB 也可以投射手机屏幕,但是需要通过 USB 发送 ADB 命令,同时用 USB 投射手机屏幕和发送 ADB 命令好像不行,所以用的是 WiFi 投射手机屏幕。

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WOLFRAM 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档