Delphi 对对碰外挂 记录
interface
uses windows, Messages;
procedure Start();
procedure AutoPlay(pa, pb: TPoint);
procedure clearone; // 实现单消
procedure addSpeed; // 去掉消除动画,实现加速
procedure subSpeed; //回复原来速度
type // 定义两个数据类型
twoXy = array [1 .. 2] of TPoint;
QP_Array = Array [1 .. 8, 1 .. 25] of byte; //存储棋盘数据
var
ChessData: QP_Array; //棋盘数据
sitBase: array [0 .. 3] of Dword = (
坐0号桌时棋盘基址,
坐1号桌时棋盘基址
坐2号桌时棋盘基址
坐3号桌时棋盘基址
);
Function TestChess(qp1: QP_Array): bool;
Function GetPoint(): twoXy;
function GetSitNum(): Dword;
// 当前棋盘数组
implementation
// 游戏开局
procedure Start();
var
Gameh: HWND;
begin
Gameh := FindWindow(nil, '对对碰角色版');
// 模拟鼠标单击
SendMessage(Gameh, Messages.WM_LBUTTONDOWN, 0, $0180017A); // 按下
SendMessage(Gameh, Messages.WM_LBUTTONUP, 0, $0180017A); // 抬起
end;
Function GetSitNum(): Dword;
var
Gameh: HWND;
GamePid: Dword;
GameProcess: THandle;
SitNum: Dword;
readByte: Dword;
begin
Gameh := FindWindow(nil, '对对碰角色版');
// 找进程ID
GetWindowThreadProcessId(Gameh, GamePid);
// 获取进程句柄
GameProcess := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE, False,
GamePid);
// 读出座位号
ReadProcessMemory(GameProcess, Pointer(座位号基址), @SitNum, 4, readByte);
// 显示座位号
Result := SitNum;
end;
procedure AutoPlay(pa: TPoint; pb: TPoint);
var
Gameh: HWND;
lparam: Dword;
p1, p2: TPoint;
begin
Gameh := FindWindow(nil, '对对碰角色版');
p1.x := 272 + 48 * (pa.x - 1);
p1.y := 100 + 48 * (pa.y - 1);
p2.x := 272 + 48 * (pb.x - 1);
p2.y := 100 + 48 * (pb.y - 1);
if Gameh <> 0 then
begin
lparam := p1.x + p1.y shl 16;
SendMessage(Gameh, WM_LBUTTONDOWN, 0, lparam); // 鼠标按下
SendMessage(Gameh, WM_LBUTTONUP, 0, lparam); // 鼠标抬起
lparam := p2.x + p2.y shl 16;
SendMessage(Gameh, WM_LBUTTONDOWN, 0, lparam); // 鼠标按下
SendMessage(Gameh, WM_LBUTTONUP, 0, lparam); // 鼠标抬起
end;
end;
procedure clearone; // 实现单消
var
pxy: twoXy;
begin
pxy := GetPoint();
AutoPlay(pxy[1], pxy[2]);
end;
// 更新棋盘数据
procedure upDataChess(); // 读出棋盘数组
var
Gameh: HWND;
GamePid: Dword;
Gamehprocess: THandle;
readByte: Dword;
begin
Gameh := FindWindow(nil, '对对碰角色版'); // 获取游戏窗口句柄
GetWindowThreadProcessId(Gameh, GamePid); // 获取进程ID
Gamehprocess := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE, False,
GamePid); // 获取进程句柄
ReadProcessMemory(Gamehprocess, Pointer(sitBase[GetSitNum]), @ChessData, 200,
readByte); // 根据坐位号码 读出相应棋盘数据
end;
// 获取交换点
Function GetPoint(): twoXy; // 获取可交换的2个点
var
x, y, t1: byte;
qp: QP_Array;
begin
///
for x := 1 to 8 do // 1-8列
for y := 1 to 7 do // 遍历某列
begin
upDataChess; // 更新棋盘数据
qp := ChessData;
t1 := qp[x][y];
qp[x][y] := qp[x][y + 1];
qp[x][y + 1] := t1; // 交换相临棋子
if TestChess(qp) then
begin
Result[1].x := x;
Result[1].y := y;
Result[2].x := x;
Result[2].y := y + 1;
exit;
end;
end; // end for
for y := 1 to 8 do
for x := 1 to 7 do
begin
upDataChess; // 更新棋盘数据
qp := ChessData; //
t1 := qp[x][y];
qp[x][y] := qp[x + 1][y];
qp[x + 1][y] := t1; // 交换相临的2点
if TestChess(qp) then
begin // 如果交换后的棋盘 存在 三个相同的棋子相连
Result[1].x := x;
Result[1].y := y;
Result[2].x := x + 1;
Result[2].y := y;
exit;
end;
end; // end for
end; // end Function
Function TestChess(qp1: QP_Array): bool; // 测试交换过的棋盘 内是否有 三个相同棋子相连 3
var
r1, x, y: byte;
begin
Result := False;
for y := 1 to 8 do // 1-8行坐标
begin
r1 := 1;
for x := 1 to 7 do // Y列坐标
begin
if qp1[x][y] = qp1[x + 1][y] then
begin
r1 := r1 + 1; // 累计相同棋子数
if r1 >= 3 then
begin
Result := true;
exit;
end;
end
else
r1 := 1; // 初始化累计 1
end;
end;
/// //
// 遍历 1-8 列 看是否有 3子 相连的
for x := 1 to 8 do //
begin
r1 := 1;
for y := 1 to 7 do // 列坐标
begin
if qp1[x][y] = qp1[x][y + 1] then
begin
r1 := r1 + 1; // 累计 相同的棋子数
if r1 >= 3 then
begin
Result := true;
exit;
end; //
end
else
r1 := 1; // 如果相临棋子 不同,则初如化累计值
end;
end;
end; // End Function
var
NewSpeed: array [1 .. 5] of byte = ($90,$90,$6A,$01,$90);
OldSpeed: array [1 .. 5] of byte = ($EB,$02,$33,$C9,$51);
SleepBase: Dword = $0041E74D;
procedure addSpeed();
var
Gameh: HWND;
GamePid: Dword;
GameProcess: THandle;
WriteByte: Dword;
begin
Gameh := FindWindow(nil, '对对碰角色版');
if Gameh <> 0 then
begin
GetWindowThreadProcessId(Gameh, GamePid);
GameProcess := OpenProcess(windows.PROCESS_ALL_ACCESS, False, GamePid);
WriteProcessMemory(GameProcess, Pointer(SleepBase), @NewSpeed[1], 5,
WriteByte);
end;
end;
procedure subSpeed;
var
Gameh: HWND;
GamePid: Dword;
GameProcess: THandle;
WriteByte: Dword;
begin
Gameh := FindWindow(nil, '对对碰角色版');
if Gameh <> 0 then
begin
GetWindowThreadProcessId(Gameh, GamePid);
GameProcess := OpenProcess(windows.PROCESS_ALL_ACCESS, False, GamePid);
WriteProcessMemory(GameProcess, Pointer(SleepBase), @OldSpeed[1], 5,
WriteByte);
end;
end;
// End Procudure
end.
转载于:https://www.cnblogs.com/heimirror/archive/2010/09/03/1817472.html
Delphi 对对碰外挂 记录相关推荐
- [转载]关于QQ游戏外挂mouse_event不起作用的原因,及我的对对碰外挂程序.
资源名称 关于QQ游戏外挂mouse_event不起作用的原因,及我的对对碰外挂程序. 作者: dongfa 适用语言: .NET 文件大小 2161 运行平台: Windows XP 上传者: sh ...
- vc6做对对碰外挂原理
前段时间跟以前的同事玩 QQ 游戏对对碰,结果输的好惨,后来在网上看到了有对对碰的外挂,但还需要注册,就考虑既然别人可以写出来,我为什么就不能写出来呢?于是花了一个下午的时间仔细研究了一下,把外挂写了 ...
- 教你用VC6做QQ对对碰外挂程序
前段时间跟以前的同事玩QQ游戏对对碰,结果输的好惨,后来在网上看到了有对对碰的外挂,但还需要注册,就考虑既然别人可以写出来,我为什么就不能写出来呢?于是花了一个下午的时间仔细研究了一下,把外挂写了出来 ...
- 刚写的QQ对对碰外挂
新写了一个QQ对对碰游戏的外挂.支持NT系列系统,在XP, Win7系统都测试过可运行. 打开游戏后,使用本外挂,点开始挂机后可以自动进行游戏,自己可以进行做别的操作.外挂会自动智能判断一局游戏是否己 ...
- 基于C#实现QQ对对碰外挂 主要讲思路(原创)有更新
0.首先还是先展示一下运行效果 1.做外挂的起因 玩过几次QQ对对碰游戏,感觉挺好玩.玩着玩着实然心血来潮,打算做一个外挂出现.简单想了一下,感觉可以实现:).然后就决定把它做出来.带着兴趣带着好奇心 ...
- VC6做QQ对对碰外挂程序
前段时间跟以前的同事玩QQ游戏对对碰,结果输的好惨,后来在网上看到了有对对碰的外挂,但还需要注册,就考虑既然别人可以写出来,我为什么就不能写出来呢?于是花了一个下午的时间仔细研究了一下,把外挂写了出来 ...
- 用VC6做QQ对对碰外挂程序
前段时间跟以前的同事玩QQ游戏对对碰,结果输的好惨,后来在网上看到了有对对碰的外挂,但还需要注册,就考虑既然别人可以写出来,我为什么就不能写出来呢?于是花了一个下午的时间仔细研究了一下,把外挂写了出来 ...
- QQ游戏外挂制作教程 (对对碰)
这些日子,QQ游戏外挂是风光了一阵.俄罗斯方块,连连看,对对碰这些游戏的外挂层出不穷.其实这一类外挂的原理大体都是一样的.下面我就以QQ游戏对对碰外挂作为例子阐述一下QQ外挂的制作原理. ...
- ~QQ新版对对碰游戏外挂的制作方法~
这段时间休假在家,无聊的时候玩了会qq的对对碰游戏,以前用过网友阿东的qq对对碰外挂,但是阿东的外挂在对对碰游戏改版后好像不好使了,正好自己也想重新写一个,于是开始动手. 一.思路 1.获取游戏窗体句 ...
最新文章
- 新手vue构建单页面应用实例
- SpringBoot简单使用ehcache
- C++primer CH12智能指针
- 欢迎使用CSDN-markdown编辑器111
- Oracle新建用户并授权
- 算法题目——第K大的数
- SQLite内置表SQLITE_MASTER
- IntelliJ IDEA 2020 创建xml文件
- 埋点测试-移动端/PC端
- 【Nginx那些事】Nginx 配置文件说明
- 在Typescript中使用ASP.NET Core SignalR和React创建实时应用程序
- python编写性别比例失衡_性别比例失衡加剧什么情况?什么原因导致这样的结果?...
- Java毕业设计教程源码分享——简易网盘
- Tinder活号技术在YouTube上面居然有用模拟器和浏览器玩明白了使用谷歌下载的
- 为什么保险公司一直不停地招人?
- 3D结构光摄像头深度算法介绍
- 33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作
- 史上最全!数据分析进阶教程,看这一篇就够了!
- 第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组解析
- ID Ransomware帮你识别到底中了什么勒索软件