游戏中验证码是怎么做的,今天用按键模拟做一个

游戏中验证码是怎么做的,今天用按键模拟做一个大家好 我是郭立员 前言昨天在群里聊到一个游戏验证码 如下图所示 由于这个验证比较简单 今天我们不讲怎么过这个验证 而是讲一个有意思的 怎么才能开发出这种防挂机的验证 下面我就用按键模拟一下这个验证的实现过程

大家好,欢迎来到IT知识分享网。

大家好,我是郭立员~

前言

昨天在群里聊到一个游戏验证码,如下图所示:

游戏中验证码是怎么做的,今天用按键模拟做一个

由于这个验证比较简单,今天我们不讲怎么过这个验证,而是讲一个有意思的,怎么才能开发出这种防挂机的验证。

下面我就用按键模拟一下这个验证的实现过程。

一、准备工作

①、一张背景图

游戏中验证码是怎么做的,今天用按键模拟做一个

②、多张物品图片

游戏中验证码是怎么做的,今天用按键模拟做一个

二、游戏验证的展示

①、使用设备雷电9模拟器,横屏分辨率1280*720

经测试这个分辨率可以准确获取到用户点击的坐标。

②、使用悬浮窗展示验证

三、原理

①、验证的图片展示

游戏中验证码是怎么做的,今天用按键模拟做一个

验证分为3个区域,背景图、题目区和答题区。

选出3个物品,显示在题目区的位置,然后在答题区随机生成3个坐标,然后让选出的3个物品显示在答题区。

为了书写代码方便,我只选择的3个物品图,省去了从众多物品随机选择的过程,简化了代码逻辑。

FW.NewFWindow("浮窗名", 100, 50, 885, 613) FW.AddImageView "浮窗名", "背景图片", "/sdcard/pictures/验证图/bg.jpg", 0, 0, 885, 613 FW.AddImageView "浮窗名", "图1", "/sdcard/pictures/验证图/1.jpg", 370,100, 70, 70 FW.AddImageView "浮窗名", "图2", "/sdcard/pictures/验证图/2.jpg", 490, 100, 70, 70 FW.AddImageView "浮窗名", "图3", "/sdcard/pictures/验证图/3.jpg", 610, 100, 70, 70 Dim rect = {100,270,700,500} For i = 1 To 3 Dim sj1 = int((rect[3]-rect[1]+1)*rnd())+rect[1] Dim sj2 = int((rect[4]-rect[2]+1)*rnd())+rect[2] FW.AddImageView "浮窗名", "答案"&i, "/sdcard/pictures/验证图/"&i&".jpg", sj1, sj2, 70, 70 Next FW.Show ("浮窗名") 

②、知道自己出的验证的答案

这个验证的答案就是在答题区随机生成的3个坐标,我们需要用数组记录下来。

需要注意相对坐标和绝对坐标的转换,随机数是相对于背景图片,存入数组的坐标要是相对于手机屏幕的,所以在代码中我加上偏移。

Dim arr = {null} Dim rect = {100,270,700,500} For i = 1 To 3 Dim sj1 = int((rect[3]-rect[1]+1)*rnd())+rect[1] Dim sj2 = int((rect[4]-rect[2]+1)*rnd())+rect[2] arr[i]={null} arr[i][1] = sj1 +100 arr[i][2]= sj2 +50 Next TracePrint "答案是:",encode.TableToJson(arr)

输出结果

答案是:[[696,486],[439,454],[439,521]]

③、获取用户的点击坐标,并在图片上面做上标记

游戏中验证码是怎么做的,今天用按键模拟做一个

Dim ans = {null} For i = 1 To 3 Dim 坐标表 = zm.CatchTouchPoint(1) FW.AddTextView "浮窗名", "坐标" & i, i, 坐标表[1][1] - 100, 坐标表[1][2] - 50, 30, 30 ans[i]={null} ans[i][1] = 坐标表[1][1] ans[i][2]= 坐标表[1][2] Next TracePrint "用户的答案是:",encode.TableToJson(ans)

如果你使用过“获取用户点击坐标”这个命令,可能会发现我并没有同时获取3个点的坐标,而是每次获取1个点坐标,重复执行3次。

这是因为“获取用户点击坐标”命令是阻断型的命令,如果一次性获取3个点的坐标,就没法在用户点一个坐标就标注一个位置。

使用单次获取1个坐标,就能加上标注位置的功能了。

当用户点击完,同样用数组存储上每次点击的坐标值。

用户的答案是:[[730,522],[472,488],[479,555]]

④、验证用户点击的正确性

对于程序来说,验证点击的正确性就是比对两个数组的相似程度。

答案是:[[696,486],[439,454],[439,521]] 用户的答案是:[[730,522],[472,488],[479,555]]

这里我没有说是比对两个数组是否相同,而是比对相似程度,就是因为用户很难点到我们生成的坐标点上,只要用户点击的坐标点接近我们设置的就判定为有效。

看一下具体图解:

游戏中验证码是怎么做的,今天用按键模拟做一个

答案点是左上角的点,有效区域是70*70,也就是用户点击的坐标和答案点的差值在0-70就是有效点击。

代码如下:

For i = 1 To 3 If 0 < ans[i][1] - arr[i][1] < 70 and 0 < ans[i][2] - arr[i][2] < 70 Then Else TracePrint "用户答案错误" Exit For End If If i = 3 Then TracePrint "用户答案正确" End If Next 

四、最终效果展示:

游戏中验证码是怎么做的,今天用按键模拟做一个

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/173190.html

(0)
上一篇 2025-03-12 10:25
下一篇 2025-03-12 10:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信