微信跳一跳脚本制作思路
一、由来及游戏介绍
前段时间微信小游戏“跳一跳”火遍朋友圈,尤其深得妹子喜爱,刷分上榜排名攀比顺袭,昨天一兄弟跟我说想刷刷分,一听是要用来撩妹,@!#¥……%@(省略一万字),准备着手做个脚本,我只能帮你这么多了。
写完把测试效果发朋友圈直接炸了很多小伙伴来问怎么做的,于是写一份简单的开发思路给大家参考。
游戏是一款玩法很简单的小游戏,玩家需要目测两个物体之间的距离,然后根据距离和手感控制点击屏幕的时间长度,小人就会跳动相对应的距离,每次准确跳上物体即可得分,跳在正中心得奖励分,掉下去游戏即结束。
二、手工玩耍
先手动试玩几波,得分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 thenif pos[1].x<540 then //tag为小人所在屏幕位置的左右标记tag = 0elsetag = 1endpX = pos[1].xpY = pos[1].yelse pX = 0pY = 0tag = 0endsysLog("Pos: "..pX.." "..pY.." "..tag)return pX,pY,tag
end
2.通过图像分析找到下一个物体的中心(目标坐标)
说实话笔者在解决这个问题的时候,所花的时间是整个脚本开发时间的4/5,因为游戏背景色会随时变化,目标物体形状,颜色,大小都不固定,脚本语言里又难以集成大规模底层C语言算法去做图形识别,所以尝试了无数错误思路,最后花了半天时间才总结出一个并不完美但是还算可行的方案,介绍如下
仔细发现,小人要跳的目标位置要么在西偏北30°,要么在东偏北30°方向(图三只是选了两条验证猜想的计算数据,其实笔者做了很多数据分析)
得到这个结论之后,现在以小人在右下角为例,我们可以先通过小人起点坐标,然后根据偏移角度30°,计算出屏幕在此沿线上最边界坐标如下图
得到坐标之后,我们首先获取此点的像素RGB颜色假设为bgcolor,紧接着循环找色,使坐标沿着沿线右下角方向移动,不断获取像素点颜色,并判断获取的颜色与bgcolor是否相同,如果相同则说明此点位置仍是背景,直到获取第一个与背景色不相同的点的坐标,假设为farpos,即为沿线上目标物体与小人距离最远点的坐标如下图紫色标注
这里我们通过判断bgcolor与循环当前获取的color是否相等来判断当前所在位置是否为仍未背景,有些读者可能要说,背景色从左到右并不是纯色,而是渐变色,这样用相等判断会不会出问题。这里不用担心,叉叉API中有提供模糊比色接口,也就是判断两个颜色的相似度,设置90%相似即可
//获取farpos
function getFarP()local tempX,tempY //开发运行环境的分辨率为1080*1920,所以根据X轴中点540来判断左右,这些细节优化读者可根据自己的经验自行处理if posX<540 then //这里也可以用上一步的tag来判断 //计算出沿线屏幕边界的temppostempX = 1079tempY = posY-(tempX-posX)/1.7320508075bgcolor = getColor(tempX,tempY)bgcolor = string.format("%#x",bgcolor.."")..""while true doflag = findColors({tempX-2, tempY, tempX, tempY+2}, "0|0|"..bgcolor..",-1|1|"..bgcolor,90, 0, 0, 0)if #flag~=0 then tempX = tempX-1tempY = posY-(tempX-posX)/1.7320508075else breakendendelse //计算出沿线屏幕边界的temppostempX = 1tempY = posY-(posX-tempX+1)/1.7320508075bgcolor = getColor(tempX,tempY)bgcolor = string.format("%#x",bgcolor.."")..""while true doflag = findColors({tempX, tempY, tempX+1, tempY+1}, "0|0|"..bgcolor..",-1|1|"..bgcolor,90, 0, 0, 0)if #flag~=0 then tempX=tempX+1tempY = posY-(posX-tempX+1)/1.7320508075else breakendendendsysLog("Far : "..tempX.." "..tempY)return tempX,tempY
end
接下来我们要保存刚刚找到的坐标点的颜色,假设为obgcolor(即沿线上目标物体的上平面颜色),根据相同的原理,我们先计算出小人中心位置position与刚刚得到的farpos的中点坐标,记为temppos,如下图绿色标注。接着从temppos从右下往左上找,找到第一个与obgcolor同色点的坐标记为nearpos,即为沿线上目标物体与小人距离最近点的坐标如下图蓝色标注
//获取nearpos
function getNearP(color,midX,midY,farX,farY,tag) //需要说明的是这里有可能由于两个物块离太近导致找不到近点坐标,所以用一个success标记一下,细节优化读者自行测试,判断,总结local success = 0x = midXy = midYwhile y>(farY+20) dotcolor = getColor(x,y)if tcolor== color thensuccess = 1breakelseif tag==0 thenx = x+1y = midY-(x-midX)/1.7320508075elsex = x-1y = midY-(midX-x)/1.7320508075endendendif success==0 thenx = (farX+midX)/2y = (farY+midY)/2endsysLog("Near : "..x.." "..y)return x,yend
到此我相信大家能很容易的计算出despos了,就是紫色标注的坐标与蓝色标注的坐标的中点
3.算出小人要跳的距离,并找出距离与按压屏幕时长的函数关系
//dist为距离 函数功能为根据距离计算时长并长按屏幕
function tap(dist)
//此段注释的为笔者刚开始测试的函数关系
-- if dist >= 700 thenk = 1.25
-- elseif dist >= 650 and dist < 700 then
-- k = 1.3
-- elseif dist >= 600 and dist < 650 then
-- k = 1.335
-- elseif dist >= 550 and dist < 600 then
-- k = 1.335
-- elseif dist >= 500 and dist < 550 then
-- k = 1.32
-- elseif dist >= 450 and dist < 500 then
-- k = 1.32
-- elseif dist >= 400 and dist < 450 then
-- k = 1.31
-- elseif dist >= 350 and dist < 400 then
-- k = 1.31
-- elseif dist >= 300 and dist < 350 then
-- k = 1.31
-- elseif dist >= 250 and dist < 300 then
-- k = 1.31
-- elseif dist >= 200 and dist < 250 then
-- k = 1.31
-- elseif dist >= 150 and dist < 200 then
-- k = 1.31
-- elseif dist >=100 and dist < 150 then
-- k = 1.25
-- elseif dist >= 50 and dist < 100 then
-- k = 1.2
-- else
-- k = 1.15
-- end//后来干脆直接分段了 这样更准确local k = 50if dist >= 700 thenk = 1000 + dist - 700elseif dist >= 650 and dist < 700 thenk = 900 + dist - 650elseif dist >= 600 and dist < 650 thenk = 825 + dist - 600elseif dist >= 550 and dist < 600 thenk = 750 + dist - 550elseif dist >= 500 and dist < 550 thenk = 675 + dist - 500elseif dist >= 450 and dist < 500 thenk = 625 + dist - 450elseif dist >= 400 and dist < 450 thenk = 550 + dist - 400elseif dist >= 350 and dist < 400 thenk = 475 + dist - 350elseif dist >= 300 and dist < 350 thenk = 425 + dist - 300elseif dist >= 250 and dist < 300 thenk = 375 + dist - 250elseif dist >= 200 and dist < 250 thenk = 275 + dist - 200elseif dist >= 150 and dist < 200 thenk = 225 + dist - 150elseif dist >= 100 and dist < 150 thenk = 150 + dist - 100elseif dist >= 50 and dist < 100 thenk = 50 + dist - 50else k = 25 + distend//随机生成点击位置 主要用于防检测pos_x = 540+math.random(-200,200) pos_y = 1200+math.random(-200,200)sysLog("dist: "..dist)sysLog("lag_time: "..k)touchDown(1, pos_x, pos_y)mSleep(k)touchUp(1, pos_x, pos_y)
end
六、简单效果展示
有读者可能会问你那4个红点怎么来的,那个绿色预判小人操作这么骚又是怎么来的,这个很简单,先用ps弄一张png, 得到了despos之后,用叉叉API里提供的图形绘制接口showHUD即可,还可以做得更精细,这里笔者为了节省时间,大概意思了一下。
总之设计花了一天,开发测试和dbug花了半天,文章写了2小时,希望对大家的学习有帮助,
转载恳请注明
错误恳请指正。
微信跳一跳脚本制作思路相关推荐
- 微信“跳一跳”外挂制作历程
微信"跳一跳"外挂制作历程 最近微信出了个"跳一跳"小游戏还挺火的,但是我这种手残人士,小手一滑,棋子就不知道飞哪儿去了.那我气啊,排行榜得拉到底才能看到我的名 ...
- python脚本自动消除安卓版_微信跳一跳脚本重出江湖,python实现安卓iOS自动版与手动版!...
前面一段时间在GitHub上看到有人利用Python玩一款名为"跳一跳"的微信小程序,于是打算自己也来试一试,毕竟这款小游戏最近吸引了众多人的目光. 演示工具 电脑系统:Win10 ...
- python 实现跳一跳自动化代码_微信跳一跳脚本重出江湖,python实现安卓iOS自动版与手动版!...
前面一段时间在GitHub上看到有人利用Python玩一款名为"跳一跳"的微信小程序,于是打算自己也来试一试,毕竟这款小游戏最近吸引了众多人的目光. 演示工具 电脑系统:Win10 ...
- python辅助脚本教程_微信跳一跳python辅助脚本实例分享
本文主要为大家整理了关于微信跳一跳的辅助脚本内容,这次我们给大家整理的是关于python的脚本内容,一起来学习下. 这段时间微信跳一跳这个游戏非常火爆,但是上分又非常的难,对于程序员来说第一个念头就是 ...
- 利用Python制作微信跳一跳外挂,我才是好友排名第一的人!
从前几天微信最新版本 6.6.1 的更新开始,微信小程序游戏"跳一跳"似乎在一夜之间风靡了朋友圈. 它甚至比五六年前的飞机大战游戏都火爆,这种小游戏的火爆不仅仅是因为有魔性.有意思 ...
- 利用Python制作微信跳一跳外挂,微信好友装逼神器!
导语 前几天在GitHub上看到有人利用Python玩一款名为"跳一跳"的微信小程序,于是打算自己也来试一试,进群:711944363 获取微信跳一跳源码! 演示工具 电脑系统:W ...
- Python微信跳一跳自动化脚本
Python微信跳一跳自动化脚本 前言 准备 模块及版本 思路与流程 详细步骤 总结 前言 这是我在CSDN上的第一篇文章,以后会陆续记录我的学习生涯,希望我的知识能帮助到更多的朋友~ 准备 这篇将详 ...
- 关于微信跳一跳辅助脚本的代码学习
关于微信跳一跳辅助脚本的代码学习 最近微信跳一跳相当火热,当然油然而生的就是外挂了,所以抽空学习了下外挂的一些思路. 首先从目录结果来看 - Tools 实际上是windows需要用到的一些工具 同时 ...
- python 遍历usb设备_python程序员教你写脚本玩微信跳一跳,只要有耐心,你就是王者!...
温馨提示:微信已经开始检测分数异常高的情况了,请大家不要跑太高哦 游戏模式 这是一个 2.5D 插画风格的益智游戏,玩家可以通过按压屏幕时间的长短来控制这个「小人」跳跃的距离.可能刚开始上手的时候,因 ...
最新文章
- 德国波恩大学于鹏组根系与微生物互惠方向招收博士研究生
- Java_数据交换_Jackson_用法入门
- 使用New Relic免费服务器监控
- Java并发编程(三)volatile域
- 经常刷同一台POS机,信用卡会被降额吗?
- 微软发布Azure Stack更多细节,预计9月交付
- 使用Jedis连接远程服务器的redis
- ROS的优势与不足(除了ROS 机器人自主定位导航还能怎么做?)
- 6.2(求一个整数各位数字之和)
- 数据结构--栈-C语言实现迷宫求解
- vue导出excel表格
- 基于深度学习的实时噪声抑制——深度学习落地移动端的范例
- Excel实现Base16-Base64编码转换(SAP SCM)
- 使用docer创建spring boot镜像
- Mac电脑程序无响应怎么办?mac强制关闭软件的6种方法
- 基于帕累托的多目标遗传算法优化的原理与 Python 实现
- 计算机软考证书含金量和性价比分析
- Python将数据写入excel表格中保存
- 安卓手机怎么设置蓝牙耳机弹窗动画_链接2020.3.3其他团无线蓝牙耳机
- MFC使用滚动条显示大图片
热门文章
- linux服务器加固
- 名悦集团:新能源汽车保养做好这三步,用车无忧
- 对日或赴日工作日语面试题大总结(2)
- 《人类简史》一、智人觉醒——席卷全球的洪水
- 4.flocking(netlogo)
- mysql的启动命令_mysql的配置和启动命令
- 计算机一级改扩展名,电脑文件扩展名怎么改(文件扩展名修改图文详解)
- 一款轻巧快速的跨平台文档阅读器
- 如何创建计算机桌面快捷方式,百度桌面-如何创建百度桌面快捷方式怎样在自己电脑桌面 – 手机爱问...
- web渗透测测试(sqlmap)