文章目錄
基於Python的連連看自動操作器
1 設備與環境
1.1 設備
- CPU:Intel CORE i5
- 顯卡:NVIDIA GTX950M
- 內存:12GB
- 系統:Windows 10
1.2 環境
-
CUDA:v10.0
-
IDE:PyCharm
-
Python版本:Python3.6
-
主要Python包:
- cv2(OpenCV)
- PIL(pillow)
- torch(PyTorch)
- NumPy
- win32gui, win32ui, win32con,
- visdom
-
遊戲模擬器:LDPlayer
-
連連看遊戲:單機連連看
2 實現思路
2.1 類圖
2.1.1 圖像獲取器
- 圖像獲取:獲取雷電模擬器軟件截圖,用於後續處理
2.1.2 圖像處理器
- 圖像識別:使用cv中的匹配模型,輸入匹配圖片,在screen中查找對應圖像的位置。如“下一關”按鈕的位置。
- 生成地圖:獲取screen中游戲區域,根據長寬分割出每一個塊,根據神經網絡訓練測試器得到的網絡模型識別塊對應的類別,生成對應的數字矩陣。
- 條件驗證:驗證給定的兩個位置是否符合連連看消去條件
- 快速生成解:遍歷數字矩陣每對點,並驗證是否符合消去條件
- 單對解生成:只得到一對可消去點座標。用於解決有的圖每消去一對就會改變圖格局的情況。
2.1.3 輸出模擬器
- 模擬點擊:模擬鼠標點擊圖像識別得到的位置
- 模擬消除點擊:模擬鼠標點擊符合條件的一對位置座標
2.1.4 數據集生成器
- 圖片重命名:將得到的原始數據圖片按照規定格式命名
- 圖片循環平移:循環平移圖片
- 圖片生成:調用圖片循環平移,將一張原始圖片向上向下向左向右循環平移對應像素
- 獲取圖片名:獲取圖片名稱
2.1.5 神經網絡訓練測試器
基於PyTorch
- 模型訓練保存:訓練CNN模型,並將訓練好的模型保存下來
- 模型測試:測試訓練好的模型
2.1.6 日誌生成器
- 創建文件:創建空的日誌文件
- 寫入日誌:將日誌信息寫入日誌文件
2.2 時序圖
2.2.1 遊戲流程
首先我們得手動打開雷電模擬器,進入單機連連看。之後的操作都是由程序進行。
- 獲取屏幕截圖,查找並點擊“單機連連看”按鈕
- 獲取屏幕截圖,查找並點擊“無盡模式”按鈕
- 獲取屏幕截圖,劃分塊,將每一塊分類,生成對應數字矩陣
- 根據數字矩陣通過連連看算法得出解
- 根據解模擬鼠標點擊消去塊
- 一關有三個階段,每三個階段後,獲取屏幕截圖,查找並點擊“下一關”按鈕
- 一直循環玩下去……
2.2.2 特殊情況
地圖長寬塊數改變
- 如果我們不想玩無盡模式(無盡模式的地圖大小爲7*6),想玩如極速模式(極速模式的地圖大小爲11*8),需要將程序中的
ROW_NUM
和COL_NUM
修改爲對應值
塊位置改變
- 有的地圖會出現每消去一對塊就會更改原地圖其他塊位置
- 如果出現無解情況,遊戲會自動重新排版塊位置
新塊生成
- 如地獄模式中每消去若干對塊會刷新出新的一對塊
對於上述情況,均可以使用單對解生成方式。
3 待存在問題與思路
3.1 存在的問題
問題一
-
使用單對解生成能夠解決很多特殊情況,但是,遊戲中連續點擊成功會出現“連擊數”,如果在程序中設置等待2秒(等待連擊消失),連擊數字樣會對地圖進行遮擋,在接下來的截圖識別中影響識別結果。
-
如果不設置等待2秒,會導致結果處理太慢,使得不能夠在規定時間內解決連連看問題。
問題二
- 模擬器的左上角必須與屏幕的左上角對齊(未實現軟件內相對位置點擊,使用了屏幕絕對位置點擊)
3.2 解決思路
3.2.1 方案一
擴充數據集數據,將被連擊數部分遮擋的塊加入數據集,改良訓練模型。
3.2.1 方案二
採用快速生成解和單對解生成交替使用,使得處理特殊情況時速度變快,準確率變高。
3.2.3 方案三
對於每次解完一個階段/一關(無盡模式一關含3個階段),會出現下一個階段/下一關的提示。根據是否出現下一個階段/下一關的提示,來判斷本階段/本關是否解完,否則一直運行生成地圖和快速生成解。
4 使用方法
-
配置好環境(最好爲對應版本)。
-
打開雷電模擬器,將其放到屏幕左側(未實現軟件內相對位置座標點擊)
-
用到的軟件、圖片、模型和數據集我免費放在CSDN下載中,也可自己下載和訓練。
- 相關文件CSDN下載網址:https://download.csdn.net/download/ztmajor/12308823
-
如果需要玩其他模式,請手動設置到對應的
ROW_NUM
和COL_NUM
。 -
進入遊戲主菜單,運行程序。
-
演示視頻(bilibili):https://www.bilibili.com/video/BV1sK4y1r7Uf
5 可參考文章
環境配置
代碼實現
- 獲取windows窗口:https://ztmajor.blog.csdn.net/article/details/105376319
- python3應用windows api對後臺程序窗口及桌面截圖並保存:https://blog.csdn.net/zhuisui_woxin/article/details/84345036