【Python+OpenCV+PyTorch】基於Python的連連看自動操作器

基於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 遊戲流程

首先我們得手動打開雷電模擬器,進入單機連連看。之後的操作都是由程序進行。

  1. 獲取屏幕截圖,查找並點擊“單機連連看”按鈕
  2. 獲取屏幕截圖,查找並點擊“無盡模式”按鈕
  3. 獲取屏幕截圖,劃分塊,將每一塊分類,生成對應數字矩陣
  4. 根據數字矩陣通過連連看算法得出解
  5. 根據解模擬鼠標點擊消去塊
  6. 一關有三個階段,每三個階段後,獲取屏幕截圖,查找並點擊“下一關”按鈕
  7. 一直循環玩下去……

2.2.2 特殊情況

地圖長寬塊數改變
  • 如果我們不想玩無盡模式(無盡模式的地圖大小爲7*6),想玩如極速模式(極速模式的地圖大小爲11*8),需要將程序中的ROW_NUMCOL_NUM修改爲對應值
塊位置改變
  • 有的地圖會出現每消去一對塊就會更改原地圖其他塊位置
  • 如果出現無解情況,遊戲會自動重新排版塊位置
新塊生成
  • 如地獄模式中每消去若干對塊會刷新出新的一對塊

對於上述情況,均可以使用單對解生成方式。

3 待存在問題與思路

3.1 存在的問題

問題一

  • 使用單對解生成能夠解決很多特殊情況,但是,遊戲中連續點擊成功會出現“連擊數”,如果在程序中設置等待2秒(等待連擊消失),連擊數字樣會對地圖進行遮擋,在接下來的截圖識別中影響識別結果。

  • 如果不設置等待2秒,會導致結果處理太慢,使得不能夠在規定時間內解決連連看問題。

問題二

  • 模擬器的左上角必須與屏幕的左上角對齊(未實現軟件內相對位置點擊,使用了屏幕絕對位置點擊)

3.2 解決思路

3.2.1 方案一

擴充數據集數據,將被連擊數部分遮擋的塊加入數據集,改良訓練模型。

3.2.1 方案二

採用快速生成解單對解生成交替使用,使得處理特殊情況時速度變快,準確率變高。

3.2.3 方案三

對於每次解完一個階段/一關(無盡模式一關含3個階段),會出現下一個階段/下一關的提示。根據是否出現下一個階段/下一關的提示,來判斷本階段/本關是否解完,否則一直運行生成地圖快速生成解

4 使用方法

  • 配置好環境(最好爲對應版本)。

  • 打開雷電模擬器,將其放到屏幕左側(未實現軟件內相對位置座標點擊)

  • 用到的軟件、圖片、模型和數據集我免費放在CSDN下載中,也可自己下載和訓練。

  • 如果需要玩其他模式,請手動設置到對應的ROW_NUMCOL_NUM

  • 進入遊戲主菜單,運行程序。

  • 演示視頻(bilibili):https://www.bilibili.com/video/BV1sK4y1r7Uf

5 可參考文章

環境配置

代碼實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章