大家好,我是郭立员。
序言
昨日,在社群中谈及一款游戏的验证码机制,它的具体形式如图所指。
本文将跳过探讨如何轻松通过这个验证,而转而详述如何设计并开发一种能有效防止自动化操作的验证码系统。
一、准备工作
开始之前,我们需要准备以下基础元素:
- 一张背景图片作为基础场景。
- 多张物品图片作为可能的交互对象。
二、游戏验证的呈现与实现
接下来,我们将使用雷电9模拟器来模拟整个过程,并设定横屏分辨率为1280720,经验证该分辨率能够准确捕获用户的点击坐标。
我们会使用悬浮窗功能来向玩家展示验证码。
三、验证机制详解
1. 验证图片的布局
验证码的展示区域分为三部分:背景图、题目区和答题区。在这三者中,我们将完成以下操作:
- 从众多物品中选出三个,并将它们显示在题目区的预定位置。
- 在答题区随机生成三个坐标点,并将选出的三个物品显示在这些坐标点上。
2. 已知答案的处理
本验证码的答案即为答题区随机生成的三个坐标点。为了确保验证的准确性,我们需要将这些坐标点以数组形式记录下来。
请注意坐标的相对与绝对转换。随机数是基于背景图片的相对坐标,而存入数组的坐标需转换为手机屏幕的绝对坐标,因此在编程实现时需加入适当的偏移量。
3. 用户交互与结果输出
我们将采用“获取用户点击坐标”的命令来接收用户的操作。与之前不同,这里我们不是一次性获取三个点的坐标,而是每次只获取一个点的坐标并重复执行三次。
这样做的原因是,“获取用户点击坐标”的命令是阻断型的。若一次性获取多点坐标,则无法实现每点击一次就标注一个位置的功能。
每次用户点击后,我们将把点击的坐标值存入数组中。
4. 用户操作的验证
对于程序来说,验证用户点击的正确性即是比较两个数组的相似程度。这里我们不直接比较两个数组是否完全相同,而是比较它们的相似度。
这是因为用户很难精确点击到我们预设的坐标点上,只要用户点击的坐标点接近我们预设的坐标点,我们都将其视为有效点击。
四、最终效果的实际应用
具体来说,当答案点的左上角被视为有效点击时,其有效区域为7070。也就是说,只要用户点击的坐标与答案点的差值在这个范围内,我们便判定其为有效点击。
注:具体的编程代码部分已经以代码块的形式在文中展示。