1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 第一次写“辅助”软件(微信游戏跳一跳)

第一次写“辅助”软件(微信游戏跳一跳)

时间:2019-11-15 02:57:53

相关推荐

第一次写“辅助”软件(微信游戏跳一跳)

前言

第一次看到这个跳一跳的游戏是在微博上,微博的照片上有个人站在窨井盖上,下面一群人“哈哈哈哈哈哈哈哈哈”。我的第一反应是,这是啥?

后来才知道是一个很火的微信小游戏叫跳一跳,玩了一会儿,发现像我这种手残党基本不适合此类游戏。仔细研究了一下,发现有破解的可能,虽然我这技术很烂,和那些玩机器视觉的大牛比不了。但是觉得理论上可行,于是就萌生了写个外挂的想法。

从用户的角度来思考,就两点:

一、眼睛看距离

二、手指控制按键时间的长短

这两点,我完全可以写个程序搞定啊,说到底就是个函数嘛。输入距离,返回按键时长。可这是个什么函数呢?

我在心里默念了二百遍,一定要是线性的啊!去坛子里转了一圈,貌似很多人都说是线性的,后来写完程序后测试了一下也确实如此。感谢上帝,要不是线性的,用神经网络什么的拟合,我就要疯了。

废话不多讲,直接上代码,不看代码的同学可以直接看最后的使用说明。

*********************************************************************************************************************************

#include <iostream> #include <conio.h> #include <windows.h> #include <math.h> #define PARA 3.3; // for jumpTimeint repeatFlag=0;bool getKey(char key){if(GetAsyncKeyState(key) & 0x8000) {if(key=='R')repeatFlag=1;return true;}elsereturn false;}int main(){ POINT mptrA,mptrB; //remember the coordinate of mouse int jumpTime,distance;std::cout<<"\t\t*******************Introduction*****************"<<std::endl;std::cout<<"\t\t*********************BY Nirvana*****************"<<std::endl;std::cout<<"\t\tpress A to set A point,press S to set B point"<<std::endl;std::cout<<"\t\tpress space to jump,R to reset A and B point"<<std::endl;while(1){ again:while(getKey('A')) //A{ GetCursorPos(&mptrA);Sleep(500);std::cout<<"\t\tget point A ("<<mptrA.x<<","<<mptrA.y<<")"<<std::endl;}while(getKey('S')) //B{ GetCursorPos(&mptrB);Sleep(500);std::cout<<"\t\tget point B ("<<mptrB.x<<","<<mptrB.y<<")"<<std::endl;} distance=sqrt(pow((mptrA.x-mptrB.x),2)+pow((mptrA.y-mptrB.y),2)); //distance of the screenjumpTime=distance*PARA;//need to modifywhile(getKey(VK_SPACE)||getKey('R')) {Sleep(500);if(repeatFlag){std::cout<<"\t\tplease reset A point and B point"<<std::endl;repeatFlag=0;goto again;}else{std::cout<<"\t\tjump:"<<jumpTime<<std::endl;std::cout<<"\t\tjump>>>>>>>>>>>>>>>>>>>>>>>>>"<<std::endl;mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); Sleep(jumpTime); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); }} } }

代码说明:

需要安装安卓虚拟机,让微信在电脑上跑起来,打开游戏后。利用鼠标量取距离,用mouse_event和Sleep结合控制按键的时间。

按下键"A"的时候,记录下鼠标所在位置A。按下键"S"的时候,记录下鼠标所在位置B。(因为这两个按键靠在一起,方便~~)。

然后计算一下,距离distance。通过乘宏里的参数PARA的得到按键时间的长短,按空格键实现跳跃的操作。

如果发现A,B两个位置没有记录对,可以按"R"重新记录。(R的意思是Repeat,而且距离其他三个按键比较远,不容易按倒~~)

实现效果如上图。理论上可以一直刷下去,但是作为测试已经够了。我是在windows平台下作的,linux的话,头文件需要修改,Sleep要改成sleep。

总结:

优点:

就两个字,简单。不需要拉其他库进来,就靠最傻逼的逻辑就能解决问题。

缺点:

1.不能完全实现自动,需要移动鼠标量取距离。(哎,学校里学的那些机器视觉早就还给老师了)

2.需要安卓虚拟机为平台。(手机的技能树,朕真的没有点啊!)

3.用户界面不好看。(我也无奈啊)

展望:

1.可以用机器视觉实现全自动,用python拉取第三方包进行截图后自动获得长度。

2.从开发者的角度,我觉得也可以进行破解。距离这个参数必然是有上下界的,玩过一会就发现这么些个长度都是重复出现的。那八成是用了一个随机数发生器,随机在一定范围内产生长度,关键是种子是如何选取的,若果是我,我一定会选取目前的时间作为种子。那只要我得到种子,就能不量取长度而直接获得值。更加方便。

*************************************************************************************************************************

使用说明

所需工具:1.电脑

2.安卓模拟器(我用的是雷电,地址 /)

3.代码产生的可执行文件,jump.exe(地址 /Lagolas/WeiXinTiaoYiTiao-FuZhu)

步骤:1.安装好安卓模拟器,让微信游戏跑起来。

2.在dos下,打开jump.exe,监测鼠标行为。

(参考:/article/414eccf6343deb6b431f0aca.html)

3.将鼠标移动到跳跃的起始位置(注意不要单击,移动即可),按下A键,记录位置A(dos上会有显示)。

4.鼠标移动到跳跃终点位置,按下S,记录B点位置。

5.发现移动的位置不对,可按R,重新输入。

6.按下空格键完成跳跃。如此循环。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。