• 如何优雅地玩微信跳一跳

    自从自己微信跳一跳高分霸榜之后,无数的人问我:“有为你怎么玩的,那么高分?能否把跳一跳秘籍传授我?”
    所以今天准备在空间里开一个真正的游戏技术贴。

    游戏介绍

    (必须是微信最新版本(2017年12月28日晚更新))

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

    得分规则:跳到下一个台子上默认加一分。如果连续正中台中心得分则是2 4 6 8…… 32 的序列,最高一次得分32.

    显然,跳跃的距离和我们蓄力的时间正相关。如果我们可以精确估计距离,那么也可以精确估计蓄力的时间(如果找到了距离和时间的函数关系)。

    开发工具

    1.Adb驱动(Android studio自带)

    2.一台Android手机

    3.Python 3.6(64bit)

    4.Excel 2016

    使用指南(小白向)

    1.没有安装Android studio的电脑,需要自行安装adb驱动。

    Download Link:http://down.mz6.net/file/2014/...

    2.连接安卓手机,开启开发者模式。

    3.非必要操作:打开命令提示符(cmd)直接输入adb devices,在devices list里确定自己的设备已经连接。

    4.在微信当中打开跳一跳,并且进入游戏界面。

    5.打开py3.exe 等待电脑显示器上渲染出游戏界面。

    6.对figure窗口最大化全屏

    7.点击自己的位置(椭圆底面的中心)再点击所要达到的台子的中心。(若操作失误则重新打开py3.exe)

    8.等一秒钟,回到7

    理论上分数可以无限高,但是你玩到几百分后就会索然无味,之后再也不想碰这个游戏。

    开发过程详解

    1.用adb命令得到手机截图(1.png),并保存在py3.exe同文件夹下。

    adb shell screencap -p /sdcard/1.png

    adb pull /sdcard/1.png

    2.用python matplotlib库打开截图,通过点击两点位置得到像素距离。

    3.通过已经分析得到的距离与蓄力时间的函数,得到蓄力时间(t),利用adb命令赋给手机长按时间命令。

    adb shell input swipe 1 1 1 1 t

    4.回到1

    一些琐碎又昂贵的处理

    1.为了避免不断输入黑框,使用了os库,在python内部调用命令提示符(cmd)


    2.需要确定两点间像素距离,就必须用matplotlib库导入图片,并利用ginput函数得到两点间坐标。


    3.时间和距离之间的函数很难得到,需要多组吻合的数据。所以选取了30次正好落到中心的数据组。形式:(距离,蓄力时间)


    因为理科生文房四宝之一Matlab 2017b过于臃肿(其实是没钱买license),所以我们用简单又强大的Excel 2016 完成曲线拟合。


    所以很顺利地得到函数:T = 1.3364*d + 10.168(d的单位是pixels T的单位是ms)
    结语
    请善待你的朋友圈,装逼不要太过分,分数太高你会没朋友的。
    令人惊讶的是,线性函数的拟合效果极好。Abs(R)极为接近1,说明数据非常明显呈现线性相关。(微信小组你们的小程序怎么就用了个这么敷衍的函数啊,我本来还估计是多项式……)
    2017/12/30 18:23:41
举报不良信息

 

 大  小