微信小程序一笔画完辅助实现

本文介绍了一种微信小程序‘一笔画完’的自动化辅助实现方法,包括图像处理、路径规划和ADB模拟点击等步骤。通过颜色判断进行边缘截取,将图像转为二维数组,使用贪心算法规划路径,最终通过ADB命令模拟点击完成游戏自动化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前景提要:国庆期间本科好友聚会,有2个撒狗粮的在玩这个小游戏,并试图引其他人入坑,随果断中招,被吊打。由于以前看别人写过跳一跳的辅助,遂想起这玩意也应该有可以有辅助的。所以网上百度,发现都是修改金币的工具,这不符合我的追求自动化的要求。所以就想着自己撸一发。所以有此文,仅学习交流使用,代码见文章最后。

开发环境:android6.0手机(打开usb调试),win10(有安装adb),java运行环境

辅助关键点:

    1.对截取的图像做边缘截取

    2.对截取图像识别成对应的二位数组

    3.一笔画路径规划

    4.使用adb shell 命令模拟用户点击

详细步骤:

    1.连接手机到电脑打开usb调试,手机运行一笔画完

    2.截取当前屏幕图像,把图像导出到本机电脑

    3.通过观察发现图的大小是不会超出如下圈定的范围,所以对其进行初步裁剪(初步裁剪的目的主要是为了排除其他颜色对图片之后操作的影响)

                                                                      &

实现笔画的过程中,需要准备个包含了所有关键点的数组,例如: ```javascript var points = [ [100, 100], [200, 100], [200, 200], [100, 200], ]; ``` 接着,在画布上绘制这些关键点: ```javascript var ctx = wx.createCanvasContext('myCanvas'); points.forEach(function (point, index) { ctx.beginPath(); ctx.arc(point[0], point[1], 10, 0, Math.PI * 2, true); ctx.closePath(); ctx.fillStyle = '#000'; ctx.fill(); }); ctx.draw(); ``` 接下来,需要监听触摸事件,并记录下触摸点的位置: ```javascript var lastX = 0; var lastY = 0; var isDrawing = false; wx.createSelectorQuery().select('#myCanvas').fields({ node: true, size: true }).exec(function (res) { var canvas = res[0].node; var ctx = canvas.getContext('2d'); var width = res[0].width; var height = res[0].height; canvas.addEventListener('touchstart', function (e) { var x = e.touches[0].clientX; var y = e.touches[0].clientY; points.forEach(function (point, index) { if (Math.abs(x - point[0]) < 10 && Math.abs(y - point[1]) < 10) { lastX = point[0]; lastY = point[1]; isDrawing = true; } }); }); canvas.addEventListener('touchmove', function (e) { if (!isDrawing) { return; } var x = e.touches[0].clientX; var y = e.touches[0].clientY; ctx.beginPath(); ctx.moveTo(lastX, lastY); ctx.lineTo(x, y); ctx.stroke(); lastX = x; lastY = y; }); canvas.addEventListener('touchend', function (e) { isDrawing = false; var isComplete = true; points.forEach(function (point, index) { if (Math.abs(lastX - point[0]) < 10 && Math.abs(lastY - point[1]) < 10) { points.splice(index, 1); isComplete = false; } }); if (isComplete) { wx.showToast({ title: '恭喜你成了笔画', icon: 'success', duration: 2000 }); } }); }); ``` 在触摸事件中,判断当前触摸点是否在关键点的范围内,如果是,则记录下该点的位置,并将 isDrawing 设置为 true,表示正在绘制。在移动事件中,如果 isDrawing 为 true,则绘制条连接上个点和当前点的线段。在结束事件中,判断当前触摸点是否在关键点的范围内,如果是,则从关键点数组中删除该点,并判断是否还有未连接的关键点,如果没有,则表示笔画已经成,弹出提示框。 最后,需要在画布上绘制连线的线段: ```javascript ctx.beginPath(); points.forEach(function (point, index) { if (index === 0) { ctx.moveTo(point[0], point[1]); } else { ctx.lineTo(point[0], point[1]); } }); ctx.stroke(); ``` 这样,个简单的笔画微信小程序成了。整示例代码如下: ```javascript var points = [ [100, 100], [200, 100], [200, 200], [100, 200], ]; var lastX = 0; var lastY = 0; var isDrawing = false; wx.createSelectorQuery().select('#myCanvas').fields({ node: true, size: true }).exec(function (res) { var canvas = res[0].node; var ctx = canvas.getContext('2d'); var width = res[0].width; var height = res[0].height; canvas.addEventListener('touchstart', function (e) { var x = e.touches[0].clientX; var y = e.touches[0].clientY; points.forEach(function (point, index) { if (Math.abs(x - point[0]) < 10 && Math.abs(y - point[1]) < 10) { lastX = point[0]; lastY = point[1]; isDrawing = true; } }); }); canvas.addEventListener('touchmove', function (e) { if (!isDrawing) { return; } var x = e.touches[0].clientX; var y = e.touches[0].clientY; ctx.beginPath(); ctx.moveTo(lastX, lastY); ctx.lineTo(x, y); ctx.stroke(); lastX = x; lastY = y; }); canvas.addEventListener('touchend', function (e) { isDrawing = false; var isComplete = true; points.forEach(function (point, index) { if (Math.abs(lastX - point[0]) < 10 && Math.abs(lastY - point[1]) < 10) { points.splice(index, 1); isComplete = false; } }); if (isComplete) { wx.showToast({ title: '恭喜你成了笔画', icon: 'success', duration: 2000 }); } }); ctx.beginPath(); points.forEach(function (point, index) { ctx.beginPath(); ctx.arc(point[0], point[1], 10, 0, Math.PI * 2, true); ctx.closePath(); ctx.fillStyle = '#000'; ctx.fill(); if (index === 0) { ctx.moveTo(point[0], point[1]); } else { ctx.lineTo(point[0], point[1]); } }); ctx.stroke(); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值