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

[复制链接]
eXyGsLaf 发表于 2017-12-31 15:20:45 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
临近2018年元旦,除去大家热热闹闹的在朋友圈晒“18”岁靓照,微信更新的 6.6.1 版本突然也开放了小游戏,微信启动页面还重点推荐了小游戏「跳一跳」。
/ N6 g, Q7 S! M8 O& b6 ^0 n
/ ~' j/ ^. Z! ^2 Q( U& y7 N跳一跳% h& S: J  N- }4 @/ O8 ^' b! a
玩家需要「按住」屏幕选定跳跃力度,按住时间越长,小人会跳得越远。而且,每个跳板间的间距并非是固定的。这使得这款游戏成为「看上去简单,精通却很难」。
& U# M/ T+ h5 m! D+ u% \; Y$ m0 h& c; P* P& ^8 {0 w9 Y8 h
个人排行榜: X8 ^( R, N) U0 n  H2 ~. q
而且提供排行榜功能,看着排行榜的排名,你是不是有扎心的“烦躁”感……
7 O7 M' |% D  W7 |然而这个世界永远不缺少脑洞大开的人,有人竟然用Python写了个脚本,而且获得了3500多分。
4 V2 X8 |( q0 d% t; z, I+ k' G0 N; E6 O
排行榜
" J9 @- z( W" {$ k恰恰刚开始学习Python,基础知识刚学完,本着研究的目的,今天下载看看到底Python是如何造就这份神奇~' ^! {% o4 k3 l( T3 j. w
根据作者描述:& U+ H9 `) k& F: \* n" A0 Q
利用的工具:Python 2.7、Adb 驱动、Matplot绘图库。(注:经测试Python3.6也可以正常运行)# R9 B3 u  e# _  @
另外从程序中好像是用的 PIL标准图像库,没有用Matplot,不知是不是一个库,回头再研究。
9 H$ s1 e$ }  O/ Y7 w- n( f! B9 f
from PIL import Image, ImageDraw
. e% i) g+ ]& Y/ n2 H
运行原理:
/ S; D9 K" a) z( Y$ ?: `1.将手机点击到《跳一跳》小程序界面;
0 M& K! J0 a. ~4 H7 K! N7 `) W- _2.用Adb 工具获取当前手机截图,并用adb将截图pull上来。
9 n, m$ C8 w4 ^9 R* O( n
adb shell screencap -p /sdcard/1.png
  ^. J/ j7 Y( I9 M0 P, f. k* Sadb pull /sdcard/1.png .
. A2 q/ o4 W7 B9 o
3.用matplot显示截图;: E& [) l9 U# N+ @& Z
4.用鼠标点击起始点和目标位置,计算像素距离;
: w7 ~8 I9 |& B& `) B5.根据像素距离,计算按压时间;$ m4 p' L- f# g
6.用Adb工具点击屏幕蓄力一跳;  L; P" ]0 y% e. J) G7 U. H
adb shell input swipe x y x y time
" g8 ?& ~2 S+ }( ^% K( r- ~7 D% r
下面来根据前面学习的基础知识分析一下代码,main部分有一个while循环,只要你不终止它一直重复操作。% x, _8 l6 b; R
3 e/ C" a" N# }* X4 ~" ~( A
Main部分代码
2 u1 [  N8 h. }0 O" U( _8 s里面主要调用的自定义函数主要有三个,还有一个time.sleep是为了延迟一下:
6 g' G" @# Q0 m3 L
pull_screenshot() #获取图像2 u4 d- T" q  @: t
find_piece_and_board(im) #根据图像获取两个点的坐标值; k! u  f$ S6 i0 ?! j. j0 e
jump(math.sqrt((board_x - piece_x) ** 2 + (board_y - piece_y) ** 2))#根据两点距离和手机像素计算按压时间并JUMP3 A0 t& s  v0 T" L* a
1.pull_screenshot()函数主要是利用adb来获取图像。这里顺便说一下“adb”,adb是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作,借助adb工具,我们可以管理设备,还可以进行如安装软件、系统升级、运行shell命令等等操作。如“pull”就是获取设备中的文件,想更多了解ADB请自行学习~! E% C' H( c9 @. V# Z8 g/ X! p" ~
  x! r7 s3 s% q: h; x& v
pull_screenshot(): x7 t) `8 ~6 h- m; e
2.find_piece_and_board(),根据图像获取当前小人位置和落点的坐标系(piece_x, piece_y, board_x, board_y),这个是这个脚本中的核心部分。: v, W, U5 V( h, X

5 x- S6 z8 J: j$ ~( e3 p5 Lfind_piece_and_board(im)
5 w0 i8 F0 V$ p% {3. jump根据设定的“长按的时间系数”计算需要的按压时间,其实这个系数应该根据手机分辨率推出来的,按压时间设定不小于200ms,核心命令是adb的“input swipe”。“input swipe”模拟的是手指在屏幕上的滑动事件,如果两个点坐标不变化就成了长按了。4 M0 Q* P0 F( o2 c5 ?
代码中四个变量的设置是:“swipe_x1, swipe_y1, swipe_x2, swipe_y2 = 320, 410, 320, 410”,所以是模拟的长按,其实滑动也是可以的,后面给大家分享一个闯关技巧。
9 x* `1 t+ v) y& w& ^! {" E* u, }* _% e' \
jump6 n' E0 }1 T! g1 a7 ]+ ~3 X1 `; Y
实际应用(安卓手机):6 z! Q9 g0 c6 H( Q2 [

" i% f! X# Q$ W* O* H$ x1.首先请将手机的usb调试模式打开,设置》更多设置》开发者选项》USB调试,如果出现运行脚本后小人不跳的情况,请检查是否有打开“USB调试(安全模式)”,记得顺便打开USB模拟点击
4 B0 X4 T3 f. U% G' C& [# H% K
3 K' U# Z; R. Q% k% D3 N% r2.安装ADB驱动和ADB。" E$ X; r( T! i9 s1 P
如果你系统是WIn10或Win8可能需要先设置一下“禁用强制驱动程序签名”。
- z( o5 G8 g; g6 Y4 I: x6 R* V8 P- r% F) t3 o& H
禁用驱动程序强制签名
; U* Y% O: Y4 L  X0 ^0 w; C; K不然会出现下面的“文件的哈希值不在指定目录中”安装不上adb驱动的问题,网上有教程请自行学习。8 X; L) ?, \& E1 e! d7 o! M! |4 g
$ Z5 s  i0 _. a5 Y; F
哈希值驱动不能安装问题& `% W5 L& ^9 x2 \( K
3.设置adb路径到系统默认路径,或者直接将下载的脚本放置到adb文件件下,为了便于运行我把下载的脚本名改为了“jump.py”。! Z" J' [, w1 m' h" t; J* `& |

/ ^% G$ o) r3 v) D4.进入CMD模式,运行“python jump.py”(需要进入保存脚本的目录)4 Z3 ^  x9 x( e" K: v6 P! @9 M
$ s+ e( ^# g" h
运行时输出结果
1 {# X; r: I$ n& c" a: t- i* U5.晒一下战绩,没敢继续,怕好友拿“砖头”砸我~5 v4 Q# i) [' t; H: [! T2 A
* B+ k. M/ X6 m. d
个人排行榜
2 h3 l" `/ C- t- n" E“跳一跳”得分秘籍:
, a& V  g: t* N* D- |' z
, a4 E/ \& t# z+ I游戏的目的是娱乐,正如学习的目的是为了获得技能,考试得高分那是顺便为之,既然为了游戏还是本着娱乐的心态用正常手段去玩,下面附上“跳一跳”得分秘籍:
( I0 K4 u& W; P. c6 B游戏常规得分方法是跳中靶心的+3分,跳到环靶和靶心之间+2分,跳到环靶之外且在方块之上的+1分,连续跳中靶心的,第1次+2分,第2次+4分,第3次+6分,依次类推,中断的话会重新计算得分。
* b0 Q. V# ?0 H2 I) m0 c: {2 w里面还暗藏了许多得分点,比如跳到“污水井盖停留2秒左右,加 5 分,“魔方”加 10 分,“士多店”停加 15 分,“音乐播放器”加 30 分,记得这几个都是要停留几秒。
/ Y. M. U$ n! L0 b$ x0 W  ^. d/ `点击左上角的数字,可以让小人小步向前移动,方便微调位置,选择跟更适合的起跳点。! d! t+ j: k3 [6 O7 G3 X
9 D( ?+ s' m& M, g$ F
音乐播放器加30分
2 u+ l/ r4 a- U" m+ e! L4 Q! |1 z最后放大招,其实你模拟滑动可以更好的控制时间,就是从小人落脚点滑到下一个落点靶心位置,相信这些技巧可以让你在朋友圈晒一晒了。
  Q/ a5 n2 j7 h关注我,带给您更多有趣有意义的信息~

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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