主题:一个简单的游戏外挂的实现
tanchuhan
[专家分:15140] 发布于 2009-08-29 17:08:00
[url]http://my.dongua.com/flashgame/blog!entry/7552.entry[/url]
这两天在玩这个游戏,到第3关要摇那个电风扇,摇得我手都抽筋了,才勉强过了这关.
哪知道今天玩到第10关,一看傻眼了,全关都是摇风扇的,摇慢了马上挂掉,要重新来过,试了N次,手几乎抽筋了还是过不了.
想想我等coder,用鼠标画圈不是很在行,敲键盘才是自己所长
于是,打开Visual Studio 2008,新建一个基于对话框的MFC工程:CircleCursor,调整一下对话框大小,就开始写代码.
在BOOL CCircleCursorDlg::OnInitDialog()里插入一行代码:
[code=c]
//注册一个热键
RegisterHotKey(m_hWnd, 1, 0, 'X');
[/code]
在对话框属性窗口的消息分栏里找到WM_HOTKEY,点右方添加WM_HOTKEY的处理过程OnHotKey,写代码:
[code=c]
void CCircleCursorDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
if (nHotKeyId == 1)
{
//获取当前光标位置
POINT pt;
GetCursorPos(&pt);
while (true)
{
const double PI = 3.1415926; //PI
const int RADIUS = 15; //半径
//按弧度0-2PI循环移动光标
for (double angle = 0; angle < (2*PI); angle += 0.1)
{
int x = cos(angle) * RADIUS;
int y = sin(angle) * RADIUS;
SetCursorPos(pt.x + x, pt.y + y);
Sleep(5);
}
//检查左键,如果已经释放则退出
SHORT key = GetAsyncKeyState(VK_LBUTTON);
if ((key && 0x8000) == 0)
break;
}
//还原光标位置
SetCursorPos(pt.x, pt.y);
}
CDialog::OnHotKey(nHotKeyId, nKey1, nKey2);
}
[/code]
OK,运行,把光标定位到摇柄的中心,按下鼠标左键(别放), 按一下'X'键,摇柄马上摇了起来,哈哈,速度飞快的.三下两下就过关了
数了一下自己写的代码,才20行左右,是不是很简单?
大家有空玩下,第3关和第10关别用挂,看下自己有没有抓狂的感觉?
哈哈.
最后更新于:2009-08-29 17:21:00
回复列表 (共9个回复)
沙发
天天学习 [专家分:4570] 发布于 2009-08-30 00:26:00
LZ何苦要用VS2008。VS6不挺好的么。
板凳
tanchuhan [专家分:15140] 发布于 2009-08-30 11:20:00
[quote]LZ何苦要用VS2008。VS6不挺好的么。[/quote]
1 编译器诸多问题,不符合C++标准.最明显的是for变量作用域.
2 IDE粗糙落后.字体难看 界面难看 调试麻烦 智能提示落后 错误提示难看 定位错误麻烦
等你对C熟悉了,你会发现用VC6会给别人鄙视的。
3 楼
天天学习 [专家分:4570] 发布于 2009-08-30 23:03:00
[quote]等你对C熟悉了,你会发现用VC6会给别人鄙视的[/quote]
呵呵,那用VB6岂不是别人都懒得鄙视了。
4 楼
bcahzvip [专家分:6040] 发布于 2009-09-02 14:55:00
经典的游戏,经典的动画效果,经典的背景及背景音乐,作者是谁?
工人对使用工具的感觉....
5 楼
guoyong_cy [专家分:3050] 发布于 2009-09-06 19:04:00
再好的工具没有好的工人也是白费!
6 楼
wwc7654321 [专家分:1590] 发布于 2009-09-13 18:23:00
我按了x好一会儿然后松开才发现鼠标转个不停,Alt+F4也被忽略,无奈地等它转了2分钟才关掉。。。。
不过按着鼠标左键在按X则可以松手即停
7 楼
tanchuhan [专家分:15140] 发布于 2009-09-13 19:48:00
[quote]我按了x好一会儿然后松开才发现鼠标转个不停,Alt+F4也被忽略,无奈地等它转了2分钟才关掉。。。。
不过按着鼠标左键在按X则可以松手即停[/quote]
哈哈,我不是写明了按"一下"了吗?
不过这种情况我自己也遇到过,那是因为一直按着,windows会发无数次WM_HOTKEY给程序,都积压在消息队列了,所以处理起来要很久.
可以尝试把判断鼠标左键状态的代码放到前面,这样就ok了.
8 楼
bcahzvip [专家分:6040] 发布于 2009-09-14 07:26:00
用个线程处理不好过吗?
9 楼
tanchuhan [专家分:15140] 发布于 2009-09-14 14:03:00
[quote]用个线程处理不好过吗?[/quote]
小程序没必要搞得那么复杂,就把判断鼠标状态代码提前到while前就OK了.
我来回复