天天看點

自制 QQ遊戲 連連看 外挂 ~~

這幾天期末考,完全沒有考試的心情,又無聊到玩起連連看,可惜輸得太多,非常不爽,于是自己做個連連看外挂玩一下。網上有很多連連看的外挂可以下載下傳,不過自己做一個來用,感覺自然不一樣,畢竟還是學計算機的嘛~~這裡簡要記下做的過程,有興趣自己寫的朋友可以參考參考~~~

我是用MFC做的~開發環境:Xp sp2 、Visual Studio.NET 2003

    一、QQ遊戲連連看玩法。

自制 QQ遊戲 連連看 外挂 ~~

玩法非常簡單,用滑鼠點選兩個相同的格子,如果兩個格子可以用一條“線”連起來,則這兩個格子可以消去。關鍵是這條“線”最多隻能有兩個拐點!~

二、外挂的功能需求。

功能簡單:一個按鍵,讓遊戲自動消去一對格子········

三、外挂原理。

1.獲得遊戲資料:

  首先,需要獲得遊戲的格子資料,才能進一步用算出哪兩個格子可以消去。對于QQ遊戲連連看,可以采用網上比較普遍的做法,讀取螢幕像素點,根據像素點判斷是什麼格子(紅球or藍球or黑桃or······)。

  為了獲得遊戲的像素資料,必須先獲得遊戲視窗的指針,在程式中我注冊了幾個全局熱鍵,我的機制是使用者激活遊戲視窗,按下外挂注冊的全局熱鍵(例如我的是F1鍵)。這個時候利用一個API獲得視窗指針。

// CWnd*        m_pGameWindow; //遊戲視窗

m_pGameWindow = GetForegroundWindow();//取出最“頂”的視窗

   接着就可以讀取遊戲視窗的像素值了,基本思想就是寫一個循環

for(int i=0;i<11;i++)// 11行

{

    for(int j=0;j<19;j++)//19列  全世界都知道QQ的連連看方格是11行19列

        //具體讀取像素操作

}

具體代碼就不貼了~太多了。。最終的結果是将螢幕的格子資料儲存到一個11X19的二維數組中,數組的坐标(i,j)就代表在遊戲中第幾行,幾列。array[i][j]的值如果為0就代表該處為空沒有格子,1、2、3····就代表不同的格子。像上面那張圖檔編碼後應該就為:

1 0 0 2 3 0 0 4 5 0 0 6 7 0 0 8 3 0 0 第一行編碼的結果 。。其它行的就不再貼了。

2.計算可消去的一對格子:

   我已經将遊戲資料儲存到了一個二維數組了。接下來就是如何計算一個哪兩個格子可以消去.我的做法是将這個二維數組看成一個圖,利用我針對連連看改進的寬度圖搜尋算法。

3.模拟滑鼠點選消去格子:

當算法算出兩個可消去的格子的數組坐标後,需要将其轉換到實際的螢幕坐标,再進行滑鼠模拟點選。

void CLLKCheatDlg::Imitate(int beginX,int beginY,int endX,int endY)

{

    //相對于遊戲視窗的兩個坐标

    CPoint begin = getPoint(beginX,beginY);

    CPoint end = getPoint(endX,endY);

    //轉換到螢幕坐标

    m_pGameWindow->ClientToScreen(&begin);

    m_pGameWindow->ClientToScreen(&end);

    //移動滑鼠到第一個點

    ::SetCursorPos(begin.x,begin.y);

    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);

    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

    ::SetCursorPos(end.x,end.y);

    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);

    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

}

//getPoint是我自己寫的,用來計算邏輯坐标到遊戲視窗坐标的轉換。

四、測試

看看我使用該工具秒殺的截圖吧。提供了一個按鍵,全部消去的功能。

自制 QQ遊戲 連連看 外挂 ~~
自制 QQ遊戲 連連看 外挂 ~~