一、由来及游戏介绍

前段时间微信小游戏“跳一跳”火遍朋友圈,尤其深得妹子喜爱,刷分上榜排名攀比顺袭,昨天一兄弟跟我说想刷刷分,一听是要用来撩妹,@!#¥……%@(省略一万字),准备着手做个脚本,我只能帮你这么多了。

写完把测试效果发朋友圈直接炸了很多小伙伴来问怎么做的,于是写一份简单的开发思路给大家参考。

游戏是一款玩法很简单的小游戏,玩家需要目测两个物体之间的距离,然后根据距离和手感控制点击屏幕的时间长度,小人就会跳动相对应的距离,每次准确跳上物体即可得分,跳在正中心得奖励分,掉下去游戏即结束。

二、手工玩耍

先手动试玩几波,得分2位数结束。(图片随便截的,其实笔者自己玩也能几百分啦,并不是手残党)

三、观察总结

在游戏过程中,通过仔细体验+观察不难发现

  1. 小人的跳跃方向只有两种情况,这就给我提供了解决方案的思路

    • 当小人在屏幕左下角时,它是朝着右上角跳跃的
    • 当小人在屏幕右下角时,它是朝着左上角跳跃的
  2. 小人的跳跃距离与按下屏幕时间的长短有着某种函数关系

四、理清解决方案思路

很明显如果我们要设计脚本,那么要解决这几个问题

  1. 通过图像分析找到小人在屏幕中的位置(在屏幕中的坐标)
  2. 通过图像分析找到下一个物体的中心(小人要跳到目标坐标)
  3. 算出小人要跳的距离,并找出距离与按压屏幕时长的函数关系,并根据按压时长,调用底层模拟触屏接口(其他办法都可以)实现屏幕延时点击,使小人准确跳到目标位置

五、逐步实现

首先说明一下笔者的开发环境

  1. 硬件

    • PC(windows 7 -64)
    • 小米5s(Android 7.0)
  2. 软件
    • 叉叉开发IED for windows
    • 叉叉开发助手 for android
    • Photoshop cc
    • Markman
  3. 编程语言
    • 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小时,希望对大家的学习有帮助,

转载恳请注明
错误恳请指正。

微信跳一跳脚本制作思路相关推荐

  1. 微信“跳一跳”外挂制作历程

    微信"跳一跳"外挂制作历程 最近微信出了个"跳一跳"小游戏还挺火的,但是我这种手残人士,小手一滑,棋子就不知道飞哪儿去了.那我气啊,排行榜得拉到底才能看到我的名 ...

  2. python脚本自动消除安卓版_微信跳一跳脚本重出江湖,python实现安卓iOS自动版与手动版!...

    前面一段时间在GitHub上看到有人利用Python玩一款名为"跳一跳"的微信小程序,于是打算自己也来试一试,毕竟这款小游戏最近吸引了众多人的目光. 演示工具 电脑系统:Win10 ...

  3. python 实现跳一跳自动化代码_微信跳一跳脚本重出江湖,python实现安卓iOS自动版与手动版!...

    前面一段时间在GitHub上看到有人利用Python玩一款名为"跳一跳"的微信小程序,于是打算自己也来试一试,毕竟这款小游戏最近吸引了众多人的目光. 演示工具 电脑系统:Win10 ...

  4. python辅助脚本教程_微信跳一跳python辅助脚本实例分享

    本文主要为大家整理了关于微信跳一跳的辅助脚本内容,这次我们给大家整理的是关于python的脚本内容,一起来学习下. 这段时间微信跳一跳这个游戏非常火爆,但是上分又非常的难,对于程序员来说第一个念头就是 ...

  5. 利用Python制作微信跳一跳外挂,我才是好友排名第一的人!

    从前几天微信最新版本 6.6.1 的更新开始,微信小程序游戏"跳一跳"似乎在一夜之间风靡了朋友圈. 它甚至比五六年前的飞机大战游戏都火爆,这种小游戏的火爆不仅仅是因为有魔性.有意思 ...

  6. 利用Python制作微信跳一跳外挂,微信好友装逼神器!

    导语 前几天在GitHub上看到有人利用Python玩一款名为"跳一跳"的微信小程序,于是打算自己也来试一试,进群:711944363 获取微信跳一跳源码! 演示工具 电脑系统:W ...

  7. Python微信跳一跳自动化脚本

    Python微信跳一跳自动化脚本 前言 准备 模块及版本 思路与流程 详细步骤 总结 前言 这是我在CSDN上的第一篇文章,以后会陆续记录我的学习生涯,希望我的知识能帮助到更多的朋友~ 准备 这篇将详 ...

  8. 关于微信跳一跳辅助脚本的代码学习

    关于微信跳一跳辅助脚本的代码学习 最近微信跳一跳相当火热,当然油然而生的就是外挂了,所以抽空学习了下外挂的一些思路. 首先从目录结果来看 - Tools 实际上是windows需要用到的一些工具 同时 ...

  9. python 遍历usb设备_python程序员教你写脚本玩微信跳一跳,只要有耐心,你就是王者!...

    温馨提示:微信已经开始检测分数异常高的情况了,请大家不要跑太高哦 游戏模式 这是一个 2.5D 插画风格的益智游戏,玩家可以通过按压屏幕时间的长短来控制这个「小人」跳跃的距离.可能刚开始上手的时候,因 ...

最新文章

  1. 德国波恩大学于鹏组根系与微生物互惠方向招收博士研究生
  2. Java_数据交换_Jackson_用法入门
  3. 使用New Relic免费服务器监控
  4. Java并发编程(三)volatile域
  5. 经常刷同一台POS机,信用卡会被降额吗?
  6. 微软发布Azure Stack更多细节,预计9月交付
  7. 使用Jedis连接远程服务器的redis
  8. ROS的优势与不足(除了ROS 机器人自主定位导航还能怎么做?)
  9. 6.2(求一个整数各位数字之和)
  10. 数据结构--栈-C语言实现迷宫求解
  11. vue导出excel表格
  12. 基于深度学习的实时噪声抑制——深度学习落地移动端的范例
  13. Excel实现Base16-Base64编码转换(SAP SCM)
  14. 使用docer创建spring boot镜像
  15. Mac电脑程序无响应怎么办?mac强制关闭软件的6种方法
  16. 基于帕累托的多目标遗传算法优化的原理与 Python 实现
  17. 计算机软考证书含金量和性价比分析
  18. Python将数据写入excel表格中保存
  19. 安卓手机怎么设置蓝牙耳机弹窗动画_链接2020.3.3其他团无线蓝牙耳机
  20. MFC使用滚动条显示大图片

热门文章

  1. linux服务器加固
  2. 名悦集团:新能源汽车保养做好这三步,用车无忧
  3. 对日或赴日工作日语面试题大总结(2)
  4. 《人类简史》一、智人觉醒——席卷全球的洪水
  5. 4.flocking(netlogo)
  6. mysql的启动命令_mysql的配置和启动命令
  7. 计算机一级改扩展名,电脑文件扩展名怎么改(文件扩展名修改图文详解)
  8. 一款轻巧快速的跨平台文档阅读器
  9. 如何创建计算机桌面快捷方式,百度桌面-如何创建百度桌面快捷方式怎样在自己电脑桌面 – 手机爱问...
  10. web渗透测测试(sqlmap)