原来微信《跳一跳》也可以用Python玩~

[复制链接]
eXyGsLaf 发表于 2017-12-31 15:20:45 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
临近2018年元旦,除去大家热热闹闹的在朋友圈晒“18”岁靓照,微信更新的 6.6.1 版本突然也开放了小游戏,微信启动页面还重点推荐了小游戏「跳一跳」。
) \) U9 J- k+ U) O% {' u3 ]8 i$ Y2 Q8 O( o; z8 s2 J; u7 H
跳一跳
3 b% S4 A3 i3 r( Z2 d3 D5 b! u玩家需要「按住」屏幕选定跳跃力度,按住时间越长,小人会跳得越远。而且,每个跳板间的间距并非是固定的。这使得这款游戏成为「看上去简单,精通却很难」。
& W1 t7 o$ }( \% O, O+ f/ Z2 f3 X4 {& C
个人排行榜
& C, |4 h( |: ?1 l1 y: C而且提供排行榜功能,看着排行榜的排名,你是不是有扎心的“烦躁”感……
4 P0 H9 T8 e. P3 D5 s- g+ j: `, R然而这个世界永远不缺少脑洞大开的人,有人竟然用Python写了个脚本,而且获得了3500多分。( n& h% M% B$ ~- {6 @1 u/ h
" X, I$ B7 j& T  S) J. Y/ Q6 M
排行榜8 c; k* W! z& ^+ ~
恰恰刚开始学习Python,基础知识刚学完,本着研究的目的,今天下载看看到底Python是如何造就这份神奇~, y% f5 U( A1 s& n! o
根据作者描述:
& z. n& v/ ?) a& y利用的工具:Python 2.7、Adb 驱动、Matplot绘图库。(注:经测试Python3.6也可以正常运行)
. a4 y6 p- Q5 z( E另外从程序中好像是用的 PIL标准图像库,没有用Matplot,不知是不是一个库,回头再研究。9 S2 M( V! _- A7 l
from PIL import Image, ImageDraw
( ~' Q1 l! c, z0 ^) a( a( @
运行原理:
- U/ a" n" y6 {! ]1 n  D' K1.将手机点击到《跳一跳》小程序界面;
* {% a: ~/ t" W% c  T+ H- \8 p2.用Adb 工具获取当前手机截图,并用adb将截图pull上来。
' e* o+ d! q. G! p7 v/ X
adb shell screencap -p /sdcard/1.png; C3 A& i5 G& u. H9 X$ P' r
adb pull /sdcard/1.png .
# F; H6 T, j( C4 t$ x
3.用matplot显示截图;
2 v9 F" k3 \) o- \4.用鼠标点击起始点和目标位置,计算像素距离;
1 V4 ?" d) m; I2 }$ Q5.根据像素距离,计算按压时间;
' ?' i( x. g+ X  ~' C1 h6.用Adb工具点击屏幕蓄力一跳;) z& ^/ z5 q# K- x* A: \2 d0 a; q
adb shell input swipe x y x y time
1 R7 T1 w/ M; s$ @- u
下面来根据前面学习的基础知识分析一下代码,main部分有一个while循环,只要你不终止它一直重复操作。) ]0 L3 J2 f, ^5 g6 Z

/ J; L. T+ j; t; WMain部分代码
, x  [( R9 Q7 a: k5 b. ^/ W! `里面主要调用的自定义函数主要有三个,还有一个time.sleep是为了延迟一下:6 R/ z% B1 \9 w) Z
pull_screenshot() #获取图像& n4 A: x' F/ f* x2 f
find_piece_and_board(im) #根据图像获取两个点的坐标值
: r; k' k- l# Sjump(math.sqrt((board_x - piece_x) ** 2 + (board_y - piece_y) ** 2))#根据两点距离和手机像素计算按压时间并JUMP
: F7 h0 c" |4 n6 o
1.pull_screenshot()函数主要是利用adb来获取图像。这里顺便说一下“adb”,adb是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作,借助adb工具,我们可以管理设备,还可以进行如安装软件、系统升级、运行shell命令等等操作。如“pull”就是获取设备中的文件,想更多了解ADB请自行学习~
& R9 L0 ?# g0 ?) P$ i0 J+ c1 Z' A3 v! E% h* m# t
pull_screenshot()+ V/ d  w9 _$ }) O3 k
2.find_piece_and_board(),根据图像获取当前小人位置和落点的坐标系(piece_x, piece_y, board_x, board_y),这个是这个脚本中的核心部分。
! G) x6 `8 d3 `1 z0 E4 n5 B! V# F, x5 H: v% G. u; p
find_piece_and_board(im)$ J; O/ D! ?! {3 V# i) P/ a5 o
3. jump根据设定的“长按的时间系数”计算需要的按压时间,其实这个系数应该根据手机分辨率推出来的,按压时间设定不小于200ms,核心命令是adb的“input swipe”。“input swipe”模拟的是手指在屏幕上的滑动事件,如果两个点坐标不变化就成了长按了。
1 |- ?' |3 @8 R) X/ `代码中四个变量的设置是:“swipe_x1, swipe_y1, swipe_x2, swipe_y2 = 320, 410, 320, 410”,所以是模拟的长按,其实滑动也是可以的,后面给大家分享一个闯关技巧。8 ]3 z3 }0 I) \7 P9 T' Z

5 O# R7 Z* ?: f$ q, f2 yjump
" g2 g3 M6 x8 O) u& F实际应用(安卓手机):
5 B8 ?4 Z% s5 s
, b% k3 z' N! p; }1 v1.首先请将手机的usb调试模式打开,设置》更多设置》开发者选项》USB调试,如果出现运行脚本后小人不跳的情况,请检查是否有打开“USB调试(安全模式)”,记得顺便打开USB模拟点击0 _  Y& v# B% N( z1 L% [* `$ ^# V

5 F& h% T/ M$ z, }! A6 h6 R/ Q2.安装ADB驱动和ADB。, W# t; v: \+ b/ n: Z
如果你系统是WIn10或Win8可能需要先设置一下“禁用强制驱动程序签名”。0 D/ X" }4 g% }1 J: @# Q

! K: j2 \4 _- @1 @6 ^3 `禁用驱动程序强制签名
' [& b$ i1 I" x' |! d不然会出现下面的“文件的哈希值不在指定目录中”安装不上adb驱动的问题,网上有教程请自行学习。
2 B0 P7 L# Q1 w, ]: E# k  Z7 \. ?1 s- N; Y# |3 U% g
哈希值驱动不能安装问题
5 o7 W5 ]- Q2 h& C* e$ G1 m+ V! ?3.设置adb路径到系统默认路径,或者直接将下载的脚本放置到adb文件件下,为了便于运行我把下载的脚本名改为了“jump.py”。/ W) q8 V4 I9 U% j
! ?! L0 D8 k* K8 l$ M5 D8 q. V
4.进入CMD模式,运行“python jump.py”(需要进入保存脚本的目录)
/ H" N/ J3 s; p! W- m" b# M" P( j( j) |4 v/ M1 B
运行时输出结果+ Y8 m3 i: ~) n2 x4 y4 s
5.晒一下战绩,没敢继续,怕好友拿“砖头”砸我~
5 D  i2 Y3 }& [1 y$ m, ?$ ^0 V" [. Z' r
个人排行榜
) f" c. L" v7 k6 P2 E( e“跳一跳”得分秘籍:# t; b0 U; ]) B) L9 }4 }
" y' v# `$ ^, ~6 W1 L
游戏的目的是娱乐,正如学习的目的是为了获得技能,考试得高分那是顺便为之,既然为了游戏还是本着娱乐的心态用正常手段去玩,下面附上“跳一跳”得分秘籍:$ o% A1 S9 z) H( s7 _- C$ O
游戏常规得分方法是跳中靶心的+3分,跳到环靶和靶心之间+2分,跳到环靶之外且在方块之上的+1分,连续跳中靶心的,第1次+2分,第2次+4分,第3次+6分,依次类推,中断的话会重新计算得分。3 P$ d# H" g4 @* g2 \3 i% [* y
里面还暗藏了许多得分点,比如跳到“污水井盖停留2秒左右,加 5 分,“魔方”加 10 分,“士多店”停加 15 分,“音乐播放器”加 30 分,记得这几个都是要停留几秒。
  o: l; s% D6 d6 ^& a8 b. w点击左上角的数字,可以让小人小步向前移动,方便微调位置,选择跟更适合的起跳点。1 h5 r5 P) l+ v8 s+ k8 _7 A
- W! d  ?" E5 C3 M) w
音乐播放器加30分9 t; b- i, Z2 `4 \
最后放大招,其实你模拟滑动可以更好的控制时间,就是从小人落脚点滑到下一个落点靶心位置,相信这些技巧可以让你在朋友圈晒一晒了。3 J8 y" {! d8 [
关注我,带给您更多有趣有意义的信息~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
推荐阅读更多+
阅读排行更多+
用心服务创业者
0851-88611148
周一至周五 9:00-18:00
意见反馈:admin@0851life.com

扫一扫关注我们

Powered by 童码少儿编程 X3.4© 2001-2013 0851life Inc.|网站地图