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

[复制链接]
eXyGsLaf 发表于 2017-12-31 15:20:45 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
临近2018年元旦,除去大家热热闹闹的在朋友圈晒“18”岁靓照,微信更新的 6.6.1 版本突然也开放了小游戏,微信启动页面还重点推荐了小游戏「跳一跳」。
" R6 Q0 O: {* d( \6 v" `8 P# I- b2 C$ f% T5 f3 [
跳一跳, n8 l8 o7 Q% a& \+ c7 M# Z+ ~7 U* l; `
玩家需要「按住」屏幕选定跳跃力度,按住时间越长,小人会跳得越远。而且,每个跳板间的间距并非是固定的。这使得这款游戏成为「看上去简单,精通却很难」。; v3 k4 b* R( Y+ N7 C# U% Z
" \5 @- t1 ]3 j" t) g1 K
个人排行榜2 k, y8 J! Q' e& G% H* x
而且提供排行榜功能,看着排行榜的排名,你是不是有扎心的“烦躁”感……
& B: i" n9 ?* z然而这个世界永远不缺少脑洞大开的人,有人竟然用Python写了个脚本,而且获得了3500多分。
6 _1 y# i. w5 }/ l
( e) S0 I7 {5 V8 T排行榜9 U" G) B# I2 G
恰恰刚开始学习Python,基础知识刚学完,本着研究的目的,今天下载看看到底Python是如何造就这份神奇~
( l0 j5 }) P: k+ E: k& b! B根据作者描述:- M/ j7 G. u  Y' g$ v
利用的工具:Python 2.7、Adb 驱动、Matplot绘图库。(注:经测试Python3.6也可以正常运行)2 T! S' Z0 I! j# m0 ^; O1 O+ E
另外从程序中好像是用的 PIL标准图像库,没有用Matplot,不知是不是一个库,回头再研究。% S  s# p7 @2 Z: q9 m
from PIL import Image, ImageDraw
" i; ]' S6 L4 m% ^
运行原理:+ i# }9 ~+ y. `- H  R: n
1.将手机点击到《跳一跳》小程序界面;0 Y- E! B: v6 Y1 g# J2 H
2.用Adb 工具获取当前手机截图,并用adb将截图pull上来。' _" w" \/ D1 ~8 b* i: z
adb shell screencap -p /sdcard/1.png) d% g: Z' y$ o9 {- j5 Q
adb pull /sdcard/1.png .0 T' }& j7 ]$ S' Z1 h8 q
3.用matplot显示截图;
3 p; p- Z0 r3 n; C7 `! ?4.用鼠标点击起始点和目标位置,计算像素距离;
  l, `8 D' C8 w0 [- v8 i5.根据像素距离,计算按压时间;* X% e& _( r) R  m/ t% W
6.用Adb工具点击屏幕蓄力一跳;# p0 g1 e) Q1 ]9 b
adb shell input swipe x y x y time
( Z/ O% [/ X& I& d; e8 n
下面来根据前面学习的基础知识分析一下代码,main部分有一个while循环,只要你不终止它一直重复操作。5 K' @3 H  w% A. Z! r( t) [  n9 C4 M
1 ]/ J% J3 |' D& B% d6 s
Main部分代码
1 @* [0 l; y0 L里面主要调用的自定义函数主要有三个,还有一个time.sleep是为了延迟一下:
/ a# Q  A$ g7 }; e. v* q" w7 I+ Q
pull_screenshot() #获取图像
: c* D9 Y# E0 u" H% E2 K, V% d" |find_piece_and_board(im) #根据图像获取两个点的坐标值* `2 V4 D$ p' Y8 e+ [% P
jump(math.sqrt((board_x - piece_x) ** 2 + (board_y - piece_y) ** 2))#根据两点距离和手机像素计算按压时间并JUMP0 [6 r$ j) u* k
1.pull_screenshot()函数主要是利用adb来获取图像。这里顺便说一下“adb”,adb是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作,借助adb工具,我们可以管理设备,还可以进行如安装软件、系统升级、运行shell命令等等操作。如“pull”就是获取设备中的文件,想更多了解ADB请自行学习~6 B8 t  [  F; ~2 S
6 ]* E% |" E; D  l! o3 z
pull_screenshot()8 W- i& Y/ H, @0 I. \, Z. z- r
2.find_piece_and_board(),根据图像获取当前小人位置和落点的坐标系(piece_x, piece_y, board_x, board_y),这个是这个脚本中的核心部分。, }% I! i7 l$ y5 S3 _
1 l- j' `3 \8 V' w- {( |) Z8 b# O
find_piece_and_board(im)
  X( \) v, P0 I) y3. jump根据设定的“长按的时间系数”计算需要的按压时间,其实这个系数应该根据手机分辨率推出来的,按压时间设定不小于200ms,核心命令是adb的“input swipe”。“input swipe”模拟的是手指在屏幕上的滑动事件,如果两个点坐标不变化就成了长按了。6 x! A) ?: k/ G/ x# @
代码中四个变量的设置是:“swipe_x1, swipe_y1, swipe_x2, swipe_y2 = 320, 410, 320, 410”,所以是模拟的长按,其实滑动也是可以的,后面给大家分享一个闯关技巧。% L9 x8 z6 f1 r( K5 z
8 d/ E0 J4 r+ F9 i5 j+ X% _4 K7 J! F
jump
3 H8 ~  R; W) A# _  E+ @实际应用(安卓手机):/ K3 O) ~! D- y. v8 z$ c

" Q- L  H! ^6 E3 K' S/ B: x& r2 z( r1.首先请将手机的usb调试模式打开,设置》更多设置》开发者选项》USB调试,如果出现运行脚本后小人不跳的情况,请检查是否有打开“USB调试(安全模式)”,记得顺便打开USB模拟点击( k. U& K5 [) U9 `. A% V
; [, A; s( I7 J, K0 A9 m
2.安装ADB驱动和ADB。. [9 O- Y& L/ `& S& K: C. N
如果你系统是WIn10或Win8可能需要先设置一下“禁用强制驱动程序签名”。, B  q; H) ~, \2 p* T" a

# v* f3 n2 H& e5 v+ `0 }禁用驱动程序强制签名( B. N4 ]2 R. R) U0 x
不然会出现下面的“文件的哈希值不在指定目录中”安装不上adb驱动的问题,网上有教程请自行学习。
8 r2 v& V3 W" K. E9 ?! h5 p, p+ Z8 N) ^) \+ M) r
哈希值驱动不能安装问题1 I  R9 K0 o; g* M. E
3.设置adb路径到系统默认路径,或者直接将下载的脚本放置到adb文件件下,为了便于运行我把下载的脚本名改为了“jump.py”。7 X% L, z& F3 }7 [3 Z: I
$ x: S  S6 U) X/ N  m7 z# t
4.进入CMD模式,运行“python jump.py”(需要进入保存脚本的目录). B* w2 }1 ^& M: j; L

# b1 H( Z3 M) o& x8 d4 Z* M运行时输出结果
; p, X/ E$ ]; O7 N* p5.晒一下战绩,没敢继续,怕好友拿“砖头”砸我~
& d* `) Q  U  u4 g, J* E4 s3 n% u. O) w; I8 S6 J' _. S
个人排行榜
% K, [7 u/ b  f“跳一跳”得分秘籍:9 G* ?9 A& m+ }+ a$ G5 s' j
# g0 B6 s9 ?; `7 m2 s) d
游戏的目的是娱乐,正如学习的目的是为了获得技能,考试得高分那是顺便为之,既然为了游戏还是本着娱乐的心态用正常手段去玩,下面附上“跳一跳”得分秘籍:
! L  `8 |1 ~$ l$ j游戏常规得分方法是跳中靶心的+3分,跳到环靶和靶心之间+2分,跳到环靶之外且在方块之上的+1分,连续跳中靶心的,第1次+2分,第2次+4分,第3次+6分,依次类推,中断的话会重新计算得分。' b2 s  f& ^4 R- _* }7 I* ]* M
里面还暗藏了许多得分点,比如跳到“污水井盖停留2秒左右,加 5 分,“魔方”加 10 分,“士多店”停加 15 分,“音乐播放器”加 30 分,记得这几个都是要停留几秒。/ M' n" u" E; a; O4 K/ R" R* Q7 [
点击左上角的数字,可以让小人小步向前移动,方便微调位置,选择跟更适合的起跳点。* a6 Q: J3 P, i+ p4 _* m
% F5 [" W. u! i& ?2 e
音乐播放器加30分6 {& }- I' ?0 F. H) O  U- g. _) C
最后放大招,其实你模拟滑动可以更好的控制时间,就是从小人落脚点滑到下一个落点靶心位置,相信这些技巧可以让你在朋友圈晒一晒了。
3 l6 X  o3 l0 U7 D2 s关注我,带给您更多有趣有意义的信息~

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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