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

[复制链接]
eXyGsLaf 发表于 2017-12-31 15:20:45 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
临近2018年元旦,除去大家热热闹闹的在朋友圈晒“18”岁靓照,微信更新的 6.6.1 版本突然也开放了小游戏,微信启动页面还重点推荐了小游戏「跳一跳」。
6 z8 ?& w0 w) R( F/ ]7 ], _% A; y9 L- B/ d. }: m) ?9 k
跳一跳1 y) v& ~* `  @/ ~" f" |2 L! M  d
玩家需要「按住」屏幕选定跳跃力度,按住时间越长,小人会跳得越远。而且,每个跳板间的间距并非是固定的。这使得这款游戏成为「看上去简单,精通却很难」。
3 r# B6 @% ~) I1 c
* S4 w6 x6 a6 e* X个人排行榜
5 P6 C8 w$ H; y' j# X* O! E4 Z而且提供排行榜功能,看着排行榜的排名,你是不是有扎心的“烦躁”感……6 |: z+ b4 ?% g9 [; e' g0 y( q
然而这个世界永远不缺少脑洞大开的人,有人竟然用Python写了个脚本,而且获得了3500多分。
; Y9 I- c- t3 v$ B) f: G; B: S" g! F: u2 \( r8 _
排行榜) h( s7 Q; J; D/ P3 [: i; O
恰恰刚开始学习Python,基础知识刚学完,本着研究的目的,今天下载看看到底Python是如何造就这份神奇~% z9 k8 W5 G1 U  _( c6 x5 ?& w
根据作者描述:
2 X7 o5 A* S: p利用的工具:Python 2.7、Adb 驱动、Matplot绘图库。(注:经测试Python3.6也可以正常运行)
" O( M( c! _3 b3 A/ ~' u# k另外从程序中好像是用的 PIL标准图像库,没有用Matplot,不知是不是一个库,回头再研究。
/ M/ ^( l8 N3 u8 c& q
from PIL import Image, ImageDraw
( }3 }0 O9 _/ o
运行原理:' K9 v4 ~0 S9 E2 u- Q, ]1 {  O; P( I
1.将手机点击到《跳一跳》小程序界面;/ i/ E( M5 b0 c, k4 h
2.用Adb 工具获取当前手机截图,并用adb将截图pull上来。' l8 S4 h* _2 q* d' P
adb shell screencap -p /sdcard/1.png& s3 H, O9 p( ^- T& j
adb pull /sdcard/1.png .
" Y9 R6 J' Z, G$ L3 f
3.用matplot显示截图;
7 F% y* `( F9 _+ l- r, q4.用鼠标点击起始点和目标位置,计算像素距离;; j1 [& c" s. X0 {' V
5.根据像素距离,计算按压时间;
' u7 I& o1 n, q5 P6 c/ `( D) H6.用Adb工具点击屏幕蓄力一跳;
1 X& u( _: `' [+ g! o0 z: o
adb shell input swipe x y x y time
9 f( G# Y2 ]" ]/ @- `) r
下面来根据前面学习的基础知识分析一下代码,main部分有一个while循环,只要你不终止它一直重复操作。
8 o$ W, t4 d( c
& ]) W) |; k! @# r0 k5 U+ O5 i: P; yMain部分代码& c3 r. V3 \, L
里面主要调用的自定义函数主要有三个,还有一个time.sleep是为了延迟一下:
+ g6 _  J; e+ p  i3 t; q
pull_screenshot() #获取图像
, U2 O0 W# I9 g# L5 q+ ?8 |; hfind_piece_and_board(im) #根据图像获取两个点的坐标值
2 n7 M% g& _- @" v- E8 Jjump(math.sqrt((board_x - piece_x) ** 2 + (board_y - piece_y) ** 2))#根据两点距离和手机像素计算按压时间并JUMP6 r( i% c) O8 }. |: O$ m9 R
1.pull_screenshot()函数主要是利用adb来获取图像。这里顺便说一下“adb”,adb是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作,借助adb工具,我们可以管理设备,还可以进行如安装软件、系统升级、运行shell命令等等操作。如“pull”就是获取设备中的文件,想更多了解ADB请自行学习~  T. c+ H: A' f+ ]$ Q: \. o% W# i
6 `0 K4 ]2 ^+ f. ?$ l0 @- ^
pull_screenshot()# L' U4 L+ ^# B) c) X* ~9 ]2 c! E6 G6 i$ `
2.find_piece_and_board(),根据图像获取当前小人位置和落点的坐标系(piece_x, piece_y, board_x, board_y),这个是这个脚本中的核心部分。0 \& q6 V4 }! [& a- b$ Q

3 B/ u8 a, p  `" y/ B; a! bfind_piece_and_board(im)
) @* q0 @7 j/ c  f3. jump根据设定的“长按的时间系数”计算需要的按压时间,其实这个系数应该根据手机分辨率推出来的,按压时间设定不小于200ms,核心命令是adb的“input swipe”。“input swipe”模拟的是手指在屏幕上的滑动事件,如果两个点坐标不变化就成了长按了。
$ m. [2 @1 t& t4 p) b! i4 p( @$ ]代码中四个变量的设置是:“swipe_x1, swipe_y1, swipe_x2, swipe_y2 = 320, 410, 320, 410”,所以是模拟的长按,其实滑动也是可以的,后面给大家分享一个闯关技巧。
: A% d7 S! ~% m& ~& _( N% F5 F# N9 N; _6 V* `5 E$ d
jump
0 |2 W3 u# j/ O2 C) N实际应用(安卓手机):
$ N! o! r0 x" D$ v
$ x; Y2 H8 J2 z1.首先请将手机的usb调试模式打开,设置》更多设置》开发者选项》USB调试,如果出现运行脚本后小人不跳的情况,请检查是否有打开“USB调试(安全模式)”,记得顺便打开USB模拟点击
2 l3 u: ?( k' x, Q
1 U- n4 |3 ?# L2.安装ADB驱动和ADB。
! o9 \0 [" Z" y$ B如果你系统是WIn10或Win8可能需要先设置一下“禁用强制驱动程序签名”。
2 f  k3 z% s/ W6 {; \; s3 U
( W/ X4 _# `/ T- ~  c- H8 ^. b3 a禁用驱动程序强制签名% ^- i: I2 `- {9 V# U: x
不然会出现下面的“文件的哈希值不在指定目录中”安装不上adb驱动的问题,网上有教程请自行学习。
2 i2 J/ u/ ^$ @8 ~. w/ j8 Z+ q7 E+ P" Q6 c% b2 R' y
哈希值驱动不能安装问题
! h$ h, W1 ?6 I; B* z1 p! ]3.设置adb路径到系统默认路径,或者直接将下载的脚本放置到adb文件件下,为了便于运行我把下载的脚本名改为了“jump.py”。% ~. B6 m; R1 v1 s, \' d+ O
; I0 Y' M1 p& P
4.进入CMD模式,运行“python jump.py”(需要进入保存脚本的目录)- o+ w3 A9 |( {) H4 W$ f

" j7 y. t; q6 @6 v# P' R运行时输出结果
+ q- c% D8 O+ p5.晒一下战绩,没敢继续,怕好友拿“砖头”砸我~9 D3 d4 G5 |& J$ D9 z1 @
' ~- C! O: ?/ M3 k7 r' r. q
个人排行榜
! V* U* W' {) G$ V/ S) I“跳一跳”得分秘籍:
8 g' e3 G9 Q1 r, @$ K: ]  S1 r2 H* u# F- e, c* g
游戏的目的是娱乐,正如学习的目的是为了获得技能,考试得高分那是顺便为之,既然为了游戏还是本着娱乐的心态用正常手段去玩,下面附上“跳一跳”得分秘籍:; }( I( c2 ?; e
游戏常规得分方法是跳中靶心的+3分,跳到环靶和靶心之间+2分,跳到环靶之外且在方块之上的+1分,连续跳中靶心的,第1次+2分,第2次+4分,第3次+6分,依次类推,中断的话会重新计算得分。, Z8 V' {  e3 b5 w% i' I
里面还暗藏了许多得分点,比如跳到“污水井盖停留2秒左右,加 5 分,“魔方”加 10 分,“士多店”停加 15 分,“音乐播放器”加 30 分,记得这几个都是要停留几秒。6 a1 c" {: u* E2 M7 d( B+ Z
点击左上角的数字,可以让小人小步向前移动,方便微调位置,选择跟更适合的起跳点。
, t( U* g+ s" Y4 U- ]* ~; Q8 r, [6 ]3 p
音乐播放器加30分3 X' d* o- f% L- S* G! F& y+ F0 R
最后放大招,其实你模拟滑动可以更好的控制时间,就是从小人落脚点滑到下一个落点靶心位置,相信这些技巧可以让你在朋友圈晒一晒了。8 j3 k, L& G, s. f& b
关注我,带给您更多有趣有意义的信息~

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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