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

[复制链接]
eXyGsLaf 发表于 2017-12-31 15:20:45 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
临近2018年元旦,除去大家热热闹闹的在朋友圈晒“18”岁靓照,微信更新的 6.6.1 版本突然也开放了小游戏,微信启动页面还重点推荐了小游戏「跳一跳」。" l5 u! P: p+ S6 y+ n
% L: I3 F0 @+ `8 Q6 L; K* C' h
跳一跳" I" Z5 j- m! L! c" ~  o
玩家需要「按住」屏幕选定跳跃力度,按住时间越长,小人会跳得越远。而且,每个跳板间的间距并非是固定的。这使得这款游戏成为「看上去简单,精通却很难」。  ~% \- z# `6 R9 A
5 V2 Z7 N, h2 Y4 P9 ^( O
个人排行榜: S. u) _7 W3 \& e
而且提供排行榜功能,看着排行榜的排名,你是不是有扎心的“烦躁”感……1 C* G8 t5 |& t3 [2 W( W; V
然而这个世界永远不缺少脑洞大开的人,有人竟然用Python写了个脚本,而且获得了3500多分。
4 _& w) T: P1 ^6 f8 }& o: l0 W7 N. u- V. \; V6 l: U" \
排行榜
. [( c! f, b+ K7 ^恰恰刚开始学习Python,基础知识刚学完,本着研究的目的,今天下载看看到底Python是如何造就这份神奇~
1 I2 E0 h8 s1 H/ Y2 X根据作者描述:
# \, B5 V, y# b7 D! T, U利用的工具:Python 2.7、Adb 驱动、Matplot绘图库。(注:经测试Python3.6也可以正常运行)
3 e8 t; r  t4 s另外从程序中好像是用的 PIL标准图像库,没有用Matplot,不知是不是一个库,回头再研究。
& c# o: e7 i3 K. A
from PIL import Image, ImageDraw
; ~9 i1 h! s1 K6 W, j
运行原理:8 G$ d/ t- ]6 Z5 z
1.将手机点击到《跳一跳》小程序界面;7 N: J; T2 l$ N" |9 h8 C
2.用Adb 工具获取当前手机截图,并用adb将截图pull上来。& v2 v7 c, t& Z* f+ ~- D
adb shell screencap -p /sdcard/1.png
8 D9 k+ g0 R% ]' C' qadb pull /sdcard/1.png .$ @( n5 D! F% X* P4 t* r. J
3.用matplot显示截图;
( |$ z: {# W/ }* G. I/ c. i! g* t4.用鼠标点击起始点和目标位置,计算像素距离;+ E' J* N. C4 ^1 n7 c
5.根据像素距离,计算按压时间;. R- H$ `( o; x4 W# B
6.用Adb工具点击屏幕蓄力一跳;5 g+ d4 ]: Y" q' B$ [0 J$ {
adb shell input swipe x y x y time) g3 C+ t) k  o% ^
下面来根据前面学习的基础知识分析一下代码,main部分有一个while循环,只要你不终止它一直重复操作。- ^- w7 X8 S1 p; k+ ~: n( b: `, E

& v  E% f' w2 j, A$ o$ u1 Z: }Main部分代码( U$ U1 |, q4 I, n5 \6 Q) F
里面主要调用的自定义函数主要有三个,还有一个time.sleep是为了延迟一下:
8 s" c5 H+ y+ \
pull_screenshot() #获取图像
! k- g8 _/ G  v. h, O1 Y+ C! Xfind_piece_and_board(im) #根据图像获取两个点的坐标值
" v( x* b& o8 t5 c) b( y& kjump(math.sqrt((board_x - piece_x) ** 2 + (board_y - piece_y) ** 2))#根据两点距离和手机像素计算按压时间并JUMP
  |4 Z+ b* b- C0 A
1.pull_screenshot()函数主要是利用adb来获取图像。这里顺便说一下“adb”,adb是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作,借助adb工具,我们可以管理设备,还可以进行如安装软件、系统升级、运行shell命令等等操作。如“pull”就是获取设备中的文件,想更多了解ADB请自行学习~8 p- x. ]  j+ [
3 f" ]1 P9 t% d' S8 n- _. w
pull_screenshot()
3 v) I2 Q+ f$ A: n4 F, R# i1 `( ?2.find_piece_and_board(),根据图像获取当前小人位置和落点的坐标系(piece_x, piece_y, board_x, board_y),这个是这个脚本中的核心部分。
' J7 v  Y0 v4 C, M7 Q0 A3 \+ ^# q( c  t7 R$ A  N
find_piece_and_board(im)+ V! u1 K) h8 x( V4 H
3. jump根据设定的“长按的时间系数”计算需要的按压时间,其实这个系数应该根据手机分辨率推出来的,按压时间设定不小于200ms,核心命令是adb的“input swipe”。“input swipe”模拟的是手指在屏幕上的滑动事件,如果两个点坐标不变化就成了长按了。
: n0 ?9 M/ H. t3 E) g6 E5 \0 E代码中四个变量的设置是:“swipe_x1, swipe_y1, swipe_x2, swipe_y2 = 320, 410, 320, 410”,所以是模拟的长按,其实滑动也是可以的,后面给大家分享一个闯关技巧。
; v" h  O% G8 ^' \. J) q0 K. ?* [
/ N1 ?9 |' Z+ F  c9 z: {jump4 W4 d& p% d# ~- C7 ]+ Y
实际应用(安卓手机):, @& t7 ?# t6 ^* t, G2 s: `' E
% ?/ I5 L* B3 s1 w6 ?
1.首先请将手机的usb调试模式打开,设置》更多设置》开发者选项》USB调试,如果出现运行脚本后小人不跳的情况,请检查是否有打开“USB调试(安全模式)”,记得顺便打开USB模拟点击1 k* B- x' g2 J/ X" d

( B: {3 }6 n% _. g, }5 z2.安装ADB驱动和ADB。$ T9 X1 e& \/ _! p
如果你系统是WIn10或Win8可能需要先设置一下“禁用强制驱动程序签名”。' I: N5 d8 R5 J# P8 ~( Y- W$ u
4 z) e' n7 t; t6 |& A0 h: V
禁用驱动程序强制签名
) `" N$ E' x2 S不然会出现下面的“文件的哈希值不在指定目录中”安装不上adb驱动的问题,网上有教程请自行学习。" m% j( {% z  y' ?
  q+ S# k+ O: N" i7 h
哈希值驱动不能安装问题4 B" q  l+ O. a3 K% \2 q0 q
3.设置adb路径到系统默认路径,或者直接将下载的脚本放置到adb文件件下,为了便于运行我把下载的脚本名改为了“jump.py”。' `; }4 Z$ o' j+ y$ u4 _

: B8 Z$ B; E  g4.进入CMD模式,运行“python jump.py”(需要进入保存脚本的目录)
/ T+ ~' ~. u7 i$ E: c+ w6 t9 h" K- ?, n% A, {) y
运行时输出结果
* g% y5 F& G$ k7 i/ z5.晒一下战绩,没敢继续,怕好友拿“砖头”砸我~, z3 O9 ], |: E; Z

  y9 t$ e: L2 l9 a. [  ]. t个人排行榜, a% ?9 l1 ^" e. X  V% w
“跳一跳”得分秘籍:
$ ^* k3 F8 e% q7 j! z6 q" b  ^) d
9 ?2 v, x) \& a. J$ `游戏的目的是娱乐,正如学习的目的是为了获得技能,考试得高分那是顺便为之,既然为了游戏还是本着娱乐的心态用正常手段去玩,下面附上“跳一跳”得分秘籍:
" c+ t/ M2 ]. h$ x游戏常规得分方法是跳中靶心的+3分,跳到环靶和靶心之间+2分,跳到环靶之外且在方块之上的+1分,连续跳中靶心的,第1次+2分,第2次+4分,第3次+6分,依次类推,中断的话会重新计算得分。& d9 Y- u! w% R3 T* ]' w; [
里面还暗藏了许多得分点,比如跳到“污水井盖停留2秒左右,加 5 分,“魔方”加 10 分,“士多店”停加 15 分,“音乐播放器”加 30 分,记得这几个都是要停留几秒。1 ], I% |$ o3 N2 U# ~
点击左上角的数字,可以让小人小步向前移动,方便微调位置,选择跟更适合的起跳点。
) p5 W+ Z: w* \7 Q9 k: X1 j: I' u, `# |
音乐播放器加30分; @& x) b/ l, i* B4 u
最后放大招,其实你模拟滑动可以更好的控制时间,就是从小人落脚点滑到下一个落点靶心位置,相信这些技巧可以让你在朋友圈晒一晒了。! o3 q/ _1 \; V& [
关注我,带给您更多有趣有意义的信息~

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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