別實(shí)現(xiàn) QQ 連連看秒破)
從截圖到一鍵清空Auto-Lianliankan 用 Python 圖像識(shí)別實(shí)現(xiàn) QQ 連連看秒破【免費(fèi)下載鏈接】Auto-Lianliankan基于python圖像識(shí)別實(shí)現(xiàn)的連連看外掛可實(shí)現(xiàn)QQ連連看秒破項(xiàng)目地址: https://gitcode.com/gh_mirrors/au/Auto-Lianliankan你有沒有過這樣的時(shí)刻在連連看里盯著滿屏方塊拼命尋找最后幾對(duì)匹配倒計(jì)時(shí)卻冷酷地歸零功虧一簣Auto-Lianliankan 就是為這種崩潰瞬間而生的——一個(gè)基于 Python 圖像識(shí)別實(shí)現(xiàn)的連連看外掛它負(fù)責(zé)替你睜大眼睛找方塊也負(fù)責(zé)替你果斷點(diǎn)下鼠標(biāo)目標(biāo)只有一個(gè)QQ 連連看秒破整盤一鍵清空。先把戰(zhàn)果擺出來三張截圖里的秒破現(xiàn)場(chǎng)在講任何原理之前我想先讓你看看它到底能做到什么程度。下面這三張截圖是作者把配置文件里的TIME_INTERVAL點(diǎn)擊間隔直接調(diào)成0后跑出來的效果場(chǎng)面相當(dāng)震撼棋盤上鋪滿白色爆炸特效右上角赫然寫著連擊 37/37剩余方塊0——注意是 0。也就是說一整盤方塊都被配對(duì)消除了全程沒有人動(dòng)過鼠標(biāo)。第二張截圖里連擊 39/39再次刷滿屏黃色爆炸特效呈對(duì)稱狀鋪開。這恰恰說明程序并不是在瞎點(diǎn)它每次選中的都是當(dāng)前可連通的正確配對(duì)否則不可能打出如此整齊的連擊。最后這張更有意思棋盤中央炸出螺旋狀閃電特效連擊數(shù)飆到47/47。把這三張圖連起來看你大概能想象出那個(gè)畫面游戲開局腳本啟動(dòng)幾十秒后整盤方塊消失全程你只需要端著茶杯在旁邊看戲。這就是 Auto-Lianliankan 的日常戰(zhàn)績。它不是魔法而是一條七步通關(guān)流水線很多人第一次看到這種自動(dòng)秒破的效果第一反應(yīng)是開掛了用了什么黑科技。其實(shí)拆開看Auto-Lianliankan 做的事情特別樸素一共就七步像一條小工廠流水線定位窗體——用 Windows API 找到游戲窗口把它頂?shù)阶钋懊娼仄痢颜麄€(gè)屏幕抓下來交給 OpenCV 讀取切片——按照方塊的寬高把棋盤區(qū)域切成一塊一塊的小圖歸類——把長得一樣的圖案歸成一類記一個(gè)編號(hào)轉(zhuǎn)矩陣——把所有方塊從圖片翻譯成數(shù)字矩陣找對(duì)——在數(shù)字矩陣上跑連連看算法找出可連通的配對(duì)點(diǎn)擊——模擬鼠標(biāo)左鍵依次點(diǎn)掉這一對(duì)然后循環(huán)。這套流程在入口文件run.py里寫得明明白白主流程只有十幾行if __name__ __main__: game_pos getGameWindowPosition() # 1. 定位游戲窗體 screen_image getScreenImage() # 2. 截取整塊屏幕 all_square_list getAllSquare(screen_image, game_pos) # 3. 切片成小方塊 types getAllSquareTypes(all_square_list) # 4. 按圖案歸類 result np.transpose(getAllSquareRecord(all_square_list, types)) # 5. 轉(zhuǎn)成數(shù)字矩陣 autoRemove(result, game_pos) # 6. 循環(huán)找對(duì)并模擬點(diǎn)擊你會(huì)發(fā)現(xiàn)整個(gè)過程里根本沒有作弊兩個(gè)字——沒有去讀游戲內(nèi)存沒有去改游戲數(shù)據(jù)它只是把你眼睛能看到的畫面換成了計(jì)算機(jī)能理解的信息然后再替你執(zhí)行你本來就會(huì)做的操作。就像你請(qǐng)了一位蒙著眼但手很穩(wěn)的代練他看不見游戲卻比誰都清楚該點(diǎn)哪里。把圖片翻譯成數(shù)字OpenCV 圖像識(shí)別的三個(gè)關(guān)鍵動(dòng)作既然要讓計(jì)算機(jī)認(rèn)識(shí)圖片那第一步就是解決翻譯問題。Auto-Lianliankan 的圖像識(shí)別核心就是三個(gè)動(dòng)作。動(dòng)作一切片 內(nèi)縮去干擾。程序根據(jù)配置文件里的MARGIN_LEFT、MARGIN_HEIGHT定位棋盤左上角再按SQUARE_WIDTH × SQUARE_HEIGHT的尺寸用 numpy 數(shù)組切片把棋盤切成一個(gè)個(gè)小方塊。有趣的是作者還特意做了內(nèi)縮處理——用小方塊內(nèi)部的SUB_LT_X / SUB_LT_Y / SUB_RB_X / SUB_RB_Y四個(gè)坐標(biāo)把邊緣裁掉一圈因?yàn)榭瞻讌^(qū)域的切圖邊緣往往不一致裁掉外緣能避免干擾。動(dòng)作二圖案歸類。每一塊小圖都要和已記錄的類型庫比對(duì)相同圖案歸為同一類型。你可能會(huì)問為什么空白也算一種類型因?yàn)槌绦虬裡mpty.png當(dāng)作0 號(hào)類型單獨(dú)塞進(jìn)數(shù)組——空白是連連看算法里的通路必須單獨(dú)標(biāo)記。動(dòng)作三數(shù)字矩陣。每個(gè)方塊最后都變成一個(gè)數(shù)字編號(hào)整個(gè)棋盤就成了一串二維數(shù)組比如11×6的棋盤就是一個(gè)11×6的數(shù)字矩陣。到這里圖片的世界徹底翻譯成了計(jì)算機(jī)的世界。這里還有一個(gè)很值得品味的細(xì)節(jié)empty.png這張圖的分辨率是21×25 像素正好等于切片內(nèi)縮后的小圖尺寸26-52130-525。也就是說如果你改了內(nèi)縮坐標(biāo)就必須同步替換一張對(duì)應(yīng)大小的empty.png否則程序會(huì)直接報(bào)錯(cuò)。這種配置和資源強(qiáng)綁定的約束恰恰暴露了它作為學(xué)習(xí)項(xiàng)目的那種真實(shí)感——它不是包裝精美的商業(yè)軟件而是一個(gè)工程師手把手教你寫出來的作業(yè)。能不能連藏在 matching.py 里的兩拐角判定圖像識(shí)別只是看清楚真正決定勝負(fù)的是matching.py里的連通算法。連連看的規(guī)則大家都很熟兩個(gè)相同圖案之間只能通過不超過兩個(gè)拐角的空路徑相連。這套判定邏輯被作者拆成了四個(gè)函數(shù)層層遞進(jìn)horizontalCheck/verticalCheck0 拐角也就是水平或垂直直線相連中間全是空白turnOnceCheck1 個(gè)拐角想象兩個(gè)方塊在一個(gè) L 形的兩端turnTwiceCheck2 個(gè)拐角路徑像 Z 形或 U 形需要遍歷整個(gè)棋盤找合適的拐點(diǎn)。入口函數(shù)canConnect把這些判斷按順序串起來任何一層通過就立刻放行def canConnect(x1, y1, x2, y2, r): if result[x1][y1] 0 or result[x2][y2] 0: # 空白方塊直接排除 return False if result[x1][y1] ! result[x2][y2]: # 圖案不同直接排除 return False if horizontalCheck(x1, y1, x2, y2): # 0 拐角水平直連 return True if verticalCheck(x1, y1, x2, y2): # 0 拐角垂直直連 return True if turnOnceCheck(x1, y1, x2, y2): # 1 個(gè)拐點(diǎn)L 形 return True if turnTwiceCheck(x1, y1, x2, y2): # 2 個(gè)拐點(diǎn)Z/U 形 return True return False這套邏輯本質(zhì)上和你肉眼看圖時(shí)想的事情一模一樣——只不過你每看一對(duì)要花幾秒而程序遍歷全部方塊找一對(duì)只需要不到一眨眼的功夫。更妙的是找對(duì)和點(diǎn)擊是交替進(jìn)行的每消掉一對(duì)棋盤數(shù)字矩陣就實(shí)時(shí)更新下一對(duì)的判定永遠(yuǎn)基于最新局面所以它幾乎不會(huì)陷入消到最后沒路走的死局。3 分鐘跑起來環(huán)境準(zhǔn)備、啟動(dòng)命令與第一盤勝利講了一堆原理你肯定已經(jīng)手癢了。別急上手其實(shí)非??鞚M打滿算三步。第一步克隆倉庫。在命令行執(zhí)行g(shù)it clone https://gitcode.com/gh_mirrors/au/Auto-Lianliankan第二步裝依賴。項(xiàng)目環(huán)境要求不高Python 3.5 及以上再加上 OpenCV、pywin32Windows API 庫、PIL屏幕截圖庫這幾個(gè)常用包。如果你在 Windows 上安裝 OpenCV 時(shí)踩坑run.py文件頭部就貼心標(biāo)注了當(dāng)年驗(yàn)證過的版本號(hào)和下載地址照著來基本不會(huì)錯(cuò)。第三步跑起來。倉庫里隨附了一個(gè)連連看.rar解壓打開里面的游戲等開局之后再運(yùn)行python run.py然后你就可以放下鼠標(biāo)了。程序會(huì)自動(dòng)定位窗體找不到會(huì)每 5 秒重試一次、置頂窗口、截屏分析、找對(duì)消除直到整盤清空。有兩個(gè)小提醒一是游戲窗口千萬別拖出屏幕外程序抓不到屏幕以外的數(shù)據(jù)二是倉庫里開源的配置是針對(duì)隨附的連連看.rar那款游戲的如果你想把目標(biāo)換成 QQ 連連看需要自己照著[config.py](https://link.gitcode.com/i/8102295ad1f3352840cde6c5bf0ffeea)的格式重新量一遍對(duì)應(yīng)的偏移和尺寸。想更快更準(zhǔn)這份配置調(diào)優(yōu)小清單請(qǐng)收好Auto-Lianliankan 的全部手感幾乎都藏在config.py那二十行配置里。我?guī)湍阏沓闪艘粡埍砀哪膫€(gè)參數(shù)、有什么效果一目了然參數(shù)默認(rèn)值作用WINDOW_TITLEPictureMatching3游戲窗口標(biāo)題用于定位窗體TIME_INTERVAL0.5兩次點(diǎn)擊的間隔秒數(shù)越小越快MARGIN_LEFT/MARGIN_HEIGHT100 / 100棋盤相對(duì)窗體左上角的偏移H_NUM/V_NUM11 / 6棋盤橫向、縱向的方塊數(shù)量SQUARE_WIDTH/SQUARE_HEIGHT65 / 65單個(gè)方塊的像素寬高SUB_LT_X/Y、SUB_RB_X/Y5 / 5 / 26 / 30切片內(nèi)縮區(qū)域需與empty.png配套調(diào)優(yōu)思路其實(shí)就兩條線速度線和適配線。想體驗(yàn)演示級(jí)的刺激效果把TIME_INTERVAL壓到 0就是文章開頭那三張截圖的狀態(tài)日常求穩(wěn)的話保持在 0.3~0.5 就夠用了。換了游戲版本或窗口分辨率優(yōu)先檢查MARGIN_*和SQUARE_*因?yàn)檫@兩個(gè)參數(shù)一錯(cuò)切片位置就全亂了。調(diào)整完別忘了跑一次看打印出來的數(shù)字矩陣是否和棋盤布局對(duì)得上。翻車現(xiàn)場(chǎng)急救常見問題排查清單既然是工具就不可能永遠(yuǎn)一次成功。我把最容易遇到的幾個(gè)問題整理成了一份急救清單一直提示定位游戲窗體失敗5 秒后重試...多半是窗口標(biāo)題對(duì)不上檢查WINDOW_TITLE是否與游戲標(biāo)題欄完全一致同時(shí)記住要先開游戲、再跑腳本。方塊識(shí)別錯(cuò)亂、連錯(cuò)對(duì)基本可以鎖定是配置和游戲版本不匹配。先核對(duì)MARGIN、SQUARE、H_NUM、V_NUM是否準(zhǔn)確再檢查empty.png尺寸是否和切片內(nèi)縮區(qū)域配套。鼠標(biāo)在點(diǎn)但游戲沒反應(yīng)窗口被遮擋或者沒被置頂了。別把游戲窗體拖到屏幕外也盡量別讓其他窗口蓋住它。運(yùn)行偏慢試著把TIME_INTERVAL調(diào)小或者關(guān)掉幾個(gè)后臺(tái)程序給截屏和計(jì)算騰點(diǎn)資源。如果以上都不行最穩(wěn)妥的辦法是回去對(duì)照run.py每一步的print輸出——作者很貼心地把每個(gè)階段都打了日志從捕獲屏幕截圖到轉(zhuǎn)置成數(shù)字矩陣你能清楚地看到程序卡在了哪一步。寫在最后工具無罪邊界在心說到這Auto-Lianliankan 的技術(shù)含量你已經(jīng)心里有數(shù)了一段不到兩百行的run.py一份二十行的config.py一個(gè)幾十行就講完連通判定的matching.py卻組合出了秒破一整盤的效果。它最打動(dòng)我的地方不是那個(gè)炫酷的戰(zhàn)績而是它把看圖和點(diǎn)鼠標(biāo)這件人人都會(huì)的事翻譯成了一段計(jì)算機(jī)能執(zhí)行的指令——這正是圖像識(shí)別與自動(dòng)化最迷人的入門范式。當(dāng)然越是好用的工具越要守住使用的邊界。這個(gè)項(xiàng)目開源的目的很明確就是交流與學(xué)習(xí)請(qǐng)僅用于個(gè)人學(xué)習(xí)研究不要用于商業(yè)用途不要在競(jìng)技環(huán)境中使用也請(qǐng)自覺遵守游戲與平臺(tái)規(guī)則。技術(shù)本身是中性的讓它發(fā)光還是添亂取決于使用它的人。如果你也想親手體驗(yàn)一把鼠標(biāo)自己會(huì)通關(guān)的樂趣或者想拿它當(dāng)一個(gè)絕佳的圖像識(shí)別學(xué)習(xí)案例現(xiàn)在就訪問項(xiàng)目倉庫把代碼拉下來跑一局吧。相信看完這份奇跡是怎么發(fā)生的你收獲的不僅是一次輕松通關(guān)更是一整套關(guān)于圖像識(shí)別與自動(dòng)化的完整思維模型?!久赓M(fèi)下載鏈接】Auto-Lianliankan基于python圖像識(shí)別實(shí)現(xiàn)的連連看外掛可實(shí)現(xiàn)QQ連連看秒破項(xiàng)目地址: https://gitcode.com/gh_mirrors/au/Auto-Lianliankan創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考