飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3870|回复: 8

[辅助源码] QQ对对碰游戏辅助

[复制链接]
  • TA的每日心情
    慵懒
    2020-9-27 20:02
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2012-3-30 15:47:43 | 显示全部楼层 |阅读模式
    源码发布概况
    编程语言: delphi
    详细描述: QQ对对碰游戏辅助(delphi源码)
    网址: bbs.chinapyg.com
    本帖最后由 爱民 于 2012-4-7 11:28 编辑



    1. unit GameFunction;

    2. interface
    3. uses
    4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    5. Dialogs, StdCtrls;

    6. //自动开始
    7. procedure AutoStart();
    8. //座位号
    9. function SeatNum():Integer;
    10. //根据座位返回地址
    11. Function SeatChessBase(SeatNum:DWORD):DWORD;
    12. //实现单消
    13. procedure ClearOnec();
    14. //优化速度
    15. procedure Accelerate();


    16. type
    17. TwoXY = array[1..2] of TPoint;
    18. QPArray = array[1..8,1..25] of Byte;

    19. var
    20. DDPChessData:QPArray;
    21. implementation



    22. Function SeatChessBase(SeatNum:DWORD):DWORD;
    23. begin
    24. Result:= 0;
    25. case SeatNum of 0..3:
    26. begin
    27. if SeatNum = 0 then
    28. begin
    29. Result:=$0048DA00;
    30. end;

    31. if SeatNum = 1 then
    32. begin
    33. Result:=$0048E5E4;
    34. end;

    35. if SeatNum = 2 then
    36. begin
    37. Result:=$0048F1C8;
    38. end;

    39. if SeatNum = 3 then
    40. begin
    41. Result:=$0048fDAC;
    42. end;
    43. end;
    44. end;
    45. end;

    46. function SeatNum():Integer;
    47. var
    48. hWnd:THandle;
    49. processh:THandle;
    50. dwProcessId:DWORD;
    51. bybyte:DWORD;
    52. Temp:DWORD;
    53. begin
    54. hWnd := FindWindow(nil,'对对碰角色版');
    55. GetWindowThreadProcessId(hWnd,@dwProcessid);
    56. processh := OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessid);
    57. ReadProcessMemory(processh,Pointer($00490FC0),@Temp,4,bybyte);
    58. Result:= Temp;
    59. end;

    60. //更新棋盘数据
    61. procedure UpDataChess();
    62. var
    63. Gameh:HWND;
    64. ProcessId:DWORD;
    65. GameProch:THandle;
    66. ReadByte:DWORD;
    67. begin
    68. Gameh:=FindWindow(nil,'对对碰角色版');
    69. GetWindowThreadProcessId(Gameh,@ProcessId);
    70. GameProch:=OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
    71. ReadProcessMemory(GameProch,Pointer(SeatChessBase(SeatNum())),@DDPChessData,200,ReadByte);
    72. end;


    73. //测试交换过的棋盘 内是否有 三个相同棋子相连 3
    74. Function TestChess(ChessDataTemp:QPArray):BOOL;
    75. var
    76. r1,x,y:byte;
    77. begin
    78. Result:=false;
    79. for y:=1 to 8 do //1-8行坐标
    80. begin
    81. r1:=1;
    82. for x:=1 to 8 do //Y列坐标
    83. begin
    84. if ChessDataTemp[x][y]=ChessDataTemp[x+1][y] then
    85. begin
    86. r1:=r1+1 ; //累计相同棋子数
    87. if r1>=3 then
    88. begin
    89. Result:=true;
    90. exit;
    91. end;
    92. end
    93. else
    94. r1:=1; //初始化累计 1
    95. end;
    96. end;
    97. /////////////////////////////////////////////////////////////////////////////////////////
    98. //遍历 1-8 列 看是否有 3子 相连的
    99. for x:=1 to 8 do //
    100. begin
    101. r1:=1;
    102. for y:=1 to 8 do //列坐标
    103. begin
    104. if ChessDataTemp[x][y]=ChessDataTemp[x][y+1] then
    105. begin r1:=r1+1 ; //累计 相同的棋子数
    106. if r1>=3 then
    107. begin
    108. Result:=true;
    109. exit;
    110. end;
    111. end
    112. else
    113. r1:=1; //如果相临棋子 不同,则初如化累计值
    114. end;
    115. end;
    116. end; //end function



    117. //获得交换点
    118. function GetPoint():TwoXY;
    119. var
    120. x,y,t1:Byte;
    121. ChessDataTemp:QPArray;
    122. begin
    123. for x:=1 to 8 do //1-8列
    124. for y:=1 to 7 do // 遍历某列
    125. begin
    126. UpdataChess(); //更新棋盘数据
    127. ChessDataTemp:= DDPChessData;
    128. t1:=ChessDataTemp[x][y]; ChessDataTemp[x][y]:=ChessDataTemp[x][y+1]; ChessDataTemp[x][y+1]:=t1; //交换相临棋子
    129. if TestChess(ChessDataTemp) then
    130. begin
    131. result[1].X:=x;
    132. result[1].Y:=y;
    133. result[2].X:=x;
    134. result[2].Y:=y+1;
    135. exit;
    136. end;
    137. end;

    138. for y:=1 to 8 do
    139. for x:=1 to 7 do
    140. begin
    141. updataChess; //更新棋盘数据
    142. ChessDataTemp :=DDPChessData; //
    143. t1:=ChessDataTemp[x][y]; ChessDataTemp[x][y]:=ChessDataTemp[x+1][y]; ChessDataTemp[x+1][y]:=t1; //交换相临的2点

    144. if TestChess(ChessDataTemp) then
    145. begin //如果交换后的棋盘 存在 三个相同的棋子相连
    146. result[1].X:=x;
    147. result[1].Y:=y;
    148. result[2].X:=x+1;
    149. result[2].Y:=y;
    150. exit;
    151. end;
    152. end;//end for
    153. end;


    154. //自动交换棋子
    155. procedure AutoPlay(Pa:TPoint; Pb:TPoint);
    156. var
    157. Gameh:HWND;
    158. P1,P2:TPoint;
    159. lParam:DWORD;
    160. begin
    161. Gameh:=FindWindow(nil,'对对碰角色版');
    162. P1.X:=292+Pa.X*48-48; P1.Y:=118+Pa.Y*48-48;
    163. P2.X:=292+Pb.X*48-48; P2.Y:=118+Pb.Y*48-48;
    164. lParam:=(P1.Y shl 16)+P1.X;
    165. SendMessage(Gameh,messages.WM_LBUTTONDOWN,0,lParam);
    166. SendMessage(Gameh,messages.WM_LBUTTONUP,0,lParam);
    167. lParam:=(P2.Y shl 16)+P2.X;
    168. SendMessage(Gameh,messages.WM_LBUTTONDOWN,0,lParam);
    169. SendMessage(Gameh,messages.WM_LBUTTONUP,0,lParam);
    170. end;

    171. //实现单消
    172. procedure ClearOnec();
    173. var
    174. ChessXY:TwoXY;
    175. begin
    176. ChessXY:=GetPoint();
    177. AutoPlay(ChessXY[1],ChessXY[2]);
    178. end;

    179. //自动开始
    180. procedure AutoStart();
    181. var
    182. hWnd:THandle;
    183. r1:TRect;
    184. p:TPoint;
    185. begin
    186. hWnd := FindWindow(nil,'对对碰角色版');
    187. SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW);
    188. GetWindowRect(hWnd,r1);
    189. GetCursorPos(p);
    190. SetCursorPos(395+r1.left,395+r1.top);
    191. mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
    192. mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    193. mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
    194. Sleep(200);
    195. SetCursorPos(p.x,p.y);
    196. end;

    197. //优化速度
    198. procedure Accelerate();
    199. Var
    200. hWnd:THandle;
    201. processh:THandle;
    202. dwProcessId:DWORD;
    203. dwOldProtect:DWORD;
    204. bybyte:DWORD;
    205. Temp:Array [1..2] of Byte;
    206. begin
    207. hWnd := FindWindow(nil,'对对碰角色版');
    208. GetWindowThreadProcessId(hWnd,@dwProcessid);
    209. processh := OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessid);
    210. VirtualProtect(Pointer($004208CD), 4,PAGE_EXECUTE_READWRITE, &dwOldProtect);
    211. Temp[1] := $90;
    212. Temp[2] := $90;
    213. WriteProcessMemory(processh,Pointer($004208CD),@Temp[1],2,bybyte);
    214. VirtualProtect(Pointer($004208CD), 4,dwOldProtect, &dwOldProtect);
    215. end;

    216. end.
    复制代码




    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2024-10-30 21:11
  • 签到天数: 453 天

    [LV.9]以坛为家II

    发表于 2012-4-1 11:01:12 | 显示全部楼层
    支持源码发布,入门级源码。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-4-1 09:59
  • 签到天数: 76 天

    [LV.6]常住居民II

    发表于 2012-4-6 00:33:54 | 显示全部楼层
    曾经照着某教程,做过一个,后来版本更新,过不了TC的保护,找不到基址了,嘿嘿
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2024-10-30 21:11
  • 签到天数: 453 天

    [LV.9]以坛为家II

    发表于 2012-6-15 22:00:52 | 显示全部楼层
    2012-6-15最新版QQ对对碰数据:

    const
      gameName='对对碰角色版';   //游戏窗口标题
      sitNumBase=$00489E40;          //坐位号基址
    var
      pidGame:DWORD;     //保存进程ID
      hGame:HWND;        //游戏窗口句柄
      hProcess:THandle;  //游戏进程句柄
      readByte:DWORD;    //用来保存实际读取的字节数
      sitNum:DWORD;      //保存当前坐位号
      chessData:QP_Array;             //定义一个当前棋盘数组
      sitBase:array[0..3] of ^DWORD=(Pointer($00486880),
                                       Pointer($00487464),
                                       Pointer($00488048),
                                       Pointer($00488C2C));  //4个棋盘基址号
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2012-6-17 19:04:09 | 显示全部楼层
    delphi高手啊
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2012-6-24 00:46:08 | 显示全部楼层
    哈哈 高手哇~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2012-6-26 16:39:56 | 显示全部楼层
    支持啊,高手~~~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2012-9-16 21:41:10 | 显示全部楼层
    谢谢!学习一下!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-1-5 13:26
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2012-10-4 12:06:33 | 显示全部楼层
    有没有最新版的基址?
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表