一、由来及游戏介绍
前段时间微信小游戏“跳一跳”火遍朋友圈,尤其深得妹子喜爱,刷分上榜排名攀比顺袭,昨天一兄弟跟我说想刷刷分,一听是要用来撩妹,@!#¥……%@(省略一万字),准备着手做个脚本,我只能帮你这么多了。
写完把测试效果发朋友圈直接炸了很多小伙伴来问怎么做的,于是写一份简单的开发思路给大家参考。
游戏是一款玩法很简单的小游戏,玩家需要目测两个物体之间的距离,然后根据距离和手感控制点击屏幕的时间长度,小人就会跳动相对应的距离,每次准确跳上物体即可得分,跳在正中心得奖励分,掉下去游戏即结束。
二、手工玩耍
先手动试玩几波,得分2位数结束。(图片随便截的,其实笔者自己玩也能几百分啦,并不是手残党)
三、观察总结
在游戏过程中,通过仔细体验+观察不难发现
- 小人的跳跃方向只有两种情况,这就给我提供了解决方案的思路
- 当小人在屏幕左下角时,它是朝着右上角跳跃的
- 当小人在屏幕右下角时,它是朝着左上角跳跃的
- 小人的跳跃距离与按下屏幕时间的长短有着某种函数关系
四、理清解决方案思路
很明显如果我们要设计脚本,那么要解决这几个问题
- 通过图像分析找到小人在屏幕中的位置(在屏幕中的坐标)
- 通过图像分析找到下一个物体的中心(小人要跳到目标坐标)
- 算出小人要跳的距离,并找出距离与按压屏幕时长的函数关系,并根据按压时长,调用底层模拟触屏接口(其他办法都可以)实现屏幕延时点击,使小人准确跳到目标位置
五、逐步实现
首先说明一下笔者的开发环境
- 硬件
- PC(windows 7 -64)
- 小米5s(Android 7.0)
- 软件
- 叉叉开发IED for windows
- 叉叉开发助手 for android
- Photoshop cc
- Markman
- 编程语言
- Lua
1.通过图像分析找到小人在屏幕中的位置(在屏幕中的坐标)
通过观察不难发现小人的颜色是固定的,静止状态时的形状也是固定的,那么好办了,如图所示,使用IED的抓图工具选取小人的十个点作为找色(找色就是读取屏幕中某个点的颜色,并做进一步判断和处理,具体读者可以去叉叉开发者平台自行学习)位置,其中箭头所指向的点即为小人起点坐标
使用叉叉API提供的findcolors接口,传入这十个点的颜色坐标,如果手机屏幕中出现这10个点,即判定找到了小人所在位置,并且箭头所指点的左边即为小人所在坐标中心,保存为position
//函数功能为获取小人中心位置
function getPos()
local pX,pY
//findcolors里的参数是IDE抓图工具生成的十个点以及其颜色参数
pos= findColors({
0, 0, 1079, 1919},"0|0|0x383862,-36|-2|0x2d2d4b,30|-2|0x383654,-25|-99|0x3a3d55,15|-99|0x8277a3,-31|-163|0x373842,21|-163|0x595280",95, 0, 0, 0)
if #pos ~= 0 then
if pos[1].x<540 then
//tag为小人所在屏幕位置的左右标记
tag = 0
else
tag = 1
end
pX = pos[1].x
pY = pos[1].y
else
pX = 0
pY = 0
tag = 0
end
sysLog("Pos: "..pX.." "..pY.." "..tag)
return pX,pY,tag