tft每日頭條

 > 遊戲

 > qq連連看怎麼設置圖

qq連連看怎麼設置圖

遊戲 更新时间:2024-11-25 15:41:20

qq連連看怎麼設置圖?數據我們已經獲取到了,接下來 沒有什麼能阻止我們實現外挂了~,現在小編就來說說關于qq連連看怎麼設置圖?下面内容希望能幫助到你,我們來一起看看吧!

qq連連看怎麼設置圖(CC遊戲輔助基礎05之QQ連連看輔助的功能實現)1

qq連連看怎麼設置圖

數據我們已經獲取到了,接下來 沒有什麼能阻止我們實現外挂了~

我們先在我們的遊戲中,定義一個[11][19]的byte類型數組 用以存儲數據

byte m_szGameData[11][19];

然後再寫一個 ReadGameData() 函數 用以讀取數據

bool CKyodaiPluginDlg::ReadGameData()

{

HWND hGameWnd = GetGameHwnd();

ZeroMemory(m_szGameData, 11 * 19);

if (!hGameWnd)

{

return FALSE;

}

DWORD dwPid = false;

GetWindowThreadProcessId(hGameWnd, &dwPid);

HANDLE hGameProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);

if (!hGameProcess)

{

MessageBox(L”打開進程失敗”);

return false;

}

if (!ReadProcessMemory(hGameProcess, (LPVOID)0x00199F68, m_szGameData, sizeof(m_szGameData), NULL))

{

return false;

}

}

上面這段代碼大家都很熟悉了,就不做講解了(若想了解更多,請關注我的博客 http://www點dbgpro點com)

接下來就是要怎麼消除的問題了,如下圖,是否可以消除無非就是三種情況,兩個在同一條線上,這也就一條線可以消除,要要門就是2條線段可以消除,最多隻能有3條線

我們要判斷x1,y1 x2,y能否消除 我們要先構建2個點x3y3,x4y4 如果 x1y1能到達x3y3(也就是說他們直接的數據都是0) 并且x3y3能到達x4y4 并且 x2y2能到達x4y4則 可以消除

//判斷兩個點之間是不是連通的

bool CLLK_WGDlg::LineIsNull(int nRow, int nCol, int nRow2, int nCol2)

{

if (nRow2 == nRow && nCol2 != nCol)

{

int nColMax = max(nCol2,nCol);

int nColMin = min(nCol2,nCol);

for (int y = nColMin; y <= nColMax;y )

{

if (m_szGameData[nRow][y] != 0)

{

return false;

}

}

return true;

}

else if (nCol == nCol2 && nRow != nRow2)

{

int nRowMin = min(nRow,nRow2);

int nRowMax = max(nRow,nRow2);

for (int x = nRowMin; x <= nRowMax;x )

{

if (m_szGameData[x][nCol] != 0)

{

return false;

}

}

return true;

}

else if (nRow2 == nRow && nCol2 == nCol) // 2點為同一點的情況

{

return true;

}

else

{

return false;

}

return true;

}

bool CLLK_WGDlg::IsClear(int nRow, int nCol, int nRow2, int nCol2)

{

//先把兩個點的數據拿出來

byte data1 = m_szGameData[nRow][nCol];

byte data2 = m_szGameData[nRow2][nCol2];

//把兩個點的數據置0 是為了兩個貼在一起的能消除

m_szGameData[nRow][nCol] = 0;

m_szGameData[nRow2][nCol2] = 0;

int nTmpRow1 = nRow;

int nTmpRow2 = nRow2;

for (int nTmpCol = 0; nTmpCol < 19;nTmpCol )

{

if (LineIsNull(nTmpRow1, nTmpCol, nTmpRow2, nTmpCol) && LineIsNull(nTmpRow1, nTmpCol, nRow, nCol) && LineIsNull(nTmpRow2, nTmpCol, nRow2, nCol2))

{

m_szGameData[nRow][nCol] = data1;

m_szGameData[nRow2][nCol2] = data2;

return true;

}

}

int nTmpCol1 = nCol;

int nTmpCol2 = nCol2;

for (int nTmpRow = 0; nTmpRow < 11;nTmpRow )

{

if (LineIsNull(nTmpRow, nTmpCol1,nTmpRow, nTmpCol2) && LineIsNull(nTmpRow,nTmpCol1,nRow, nCol) && LineIsNull(nTmpRow,nTmpCol2, nRow2, nCol2))

{

m_szGameData[nRow][nCol] = data1;

m_szGameData[nRow2][nCol2] = data2;

return true;

}

}

m_szGameData[nRow][nCol] = data1;

m_szGameData[nRow2][nCol2] = data2;

return false;

}

我們再添加一個函數 ClearOne 用于消除一對

void CKyodaiPluginDlg::ClearOne()

{

ReadGameData();

for (int nRow = 0; nRow < 11; nRow )

{

for (int nCol = 0; nCol < 19; nCol )

{

if (m_szGameData[nRow][nCol] == 0)

{

continue;

}

for (int nRow2 = 0; nRow2 < 11; nRow2 )

{

for (int nCol2 = 0; nCol2 < 19; nCol2 )

{

if ((nRow2 != nRow || nCol2 != nCol) && m_szGameData[nRow][nCol] == m_szGameData[nRow2][nCol2] && IsClear(nRow, nCol, nRow2, nCol2))

{

SelectChess(nRow, nCol);

SelectChess(nRow2, nCol2);

return;

}

}

}

}

}

}

clearOne中 如果判斷可以消除 則調用SelectChess

可以消的算法有了,我們雙擊單消按鈕,然後添加代碼如下

void CKyodaiPluginDlg::SelectChess(int nRow, int nCol)

{

HWND hGameWnd = GetGameHwnd();

if (hGameWnd)

{

int nPosXBase = 5;

int nPosYBase = 165;

int xPos = (nCol 1) * 30 nPosXBase;

int yPos = (nRow 1) * 35 nPosYBase;

::PostMessage(hGameWnd, WM_LBUTTONDOWN, 0, MAKELPARAM(xPos, yPos));

::PostMessage(hGameWnd, WM_LBUTTONUP, 0, MAKELPARAM(xPos, yPos));

}

}

上面代碼中5,165是第一個圖片的位置,30,35是每一格圖片的大小

接着,我們在按鈕消除一對的響應函數中 增加如下調用一下 ClearOne

//消除一對

void CKyodaiPluginDlg::OnBnClickedBtnremove()

{

ClearOne();

}

接着我們運行遊戲 測試一下....本篇文章到此結束(若想了解更多,請關注我的博客 http://www點dbgpro點com)...QQ連連看寫輔助系列未完待續...

QQ連連看寫輔助系列每篇都有源代碼,若想獲取源代碼請私信我。

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关遊戲资讯推荐

热门遊戲资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved