遊戲掛機腳本製作教程,手遊掛機腳本怎麼寫
2023-04-02 05:05:51
本文將以4399小遊戲《寵物連連看經典版2》為測試用例,通過識別小圖標,模擬滑鼠點擊,快速完成遊戲腳本。
打開瀏覽器窗口(單個窗口)。遊戲主界面截圖需要兩個坐標(左上角和右下角)來確定。原點一般是屏幕的左上角。不確定坐標點數值的同學可以全屏截圖,用圖片編輯軟體查看坐標值。
獲取窗口句柄,這裡是瀏覽器標題欄的標題(右鍵查看原始碼-標題,加上軟體名稱),例如:「寵物連連看經典2、寵物連連看經典版2遊戲、4399遊戲www.4399.com-Google Chrome」。抓住窗戶把手,你就可以開始了。
總體開發思路:截取遊戲主畫面——分割成小畫面——比較每一個小畫面,比較畫面的熟悉程度,將數字存入矩陣——連接性計算矩陣——模擬點擊。
抓住窗戶把手,關上窗戶。
Python可以使用win32gui模塊調用Windows API來操作窗口,FindWindow方法可以獲得窗口的句柄。需要傳入兩個參數,第一個是父窗口的句柄(這裡填0就行),第二個是窗口的名稱(標籤標題——Google Chrome)。獲取句柄然後通過SetForegroundWindows將窗口設置在前面,在這裡可以發送遊戲窗口的報告。代碼如下:
抓取遊戲界面,拆分圖標,對比圖片。
在這裡檢查程序需要一些時間。如果抓拍的畫面不好,會影響後續的操作,所以更重要的是確認遊戲的左上角和右下角兩個坐標值,以及每個小圖標的寬度和高度。如下圖所示,先截取整個遊戲界面圖,然後劃分小圖標,再比較每個圖標,然後用數字替換圖標,存入矩陣(這裡的編號矩陣和遊戲圖不一致,原理相同)。
根據初始化設置的左上角和右下角兩個坐標,使用ImageGrab.grab方法截圖,然後傳入一個元組。然後,將大圖分割,剪成小圖標,存儲在images_list數組中。
上面代碼剪下的小圖標轉換成數字矩陣。如果圖標已經存儲在image_type_list中,將返回該索引。如果不存在,就會追加,然後當前長度就是這個新添加圖標的編號。代碼如下:
上面的getIndex是對比圖片,判斷圖標是否出現過(是否已經存在於image_type_list中,如果沒有出現,則添加)。這裡用海明距離來判斷兩張圖片的相識度,閾值設為10。當它小於閾值時,它被認為是相同的圖片。具體代碼如下:
核心-圖標連接算法(路徑查找)
這裡簡單分析一下算法代碼。如果對程序理解不太好,可以留言,然後可以做圖文分析。
通過以上開發過程,基本得到以下矩陣。只要比較兩個相同編號的值,就搜索可連通路徑,如果找到,就執行模擬點擊操作。這裡簡單介紹一下遊戲的規則:8排12列的遊戲圖標區域,外圍的0其實是表示你可以找到通過它的路徑。例如,坐標(1,1)可以與(1,10)、(7,1)和(7,2)連接。
方法的思路:路徑搜索的第一步是找到一個可以橫向和縱向直接連通的坐標集。比如坐標p1(1,1)的集合有[(0,1),(1,0)],另一個坐標p2(1,10)的可連通集合是[(0,10)],然後進行p1和p2的可連通坐標集合。
代碼實現過程簡單分析:在isReachable中傳入兩個需要比較的坐標值,然後分別得到兩個可以水平連接和垂直連接的坐標集(isRowConnect、isColConnect)。最後遍歷集合,比較是否存在連通性,如果存在,則傳遞的兩個坐標可以連通。
學習這樣的遊戲輔助腳本,對於個人培養編程興趣也是有幫助的。是工作之餘很好的消遣,以後會往這些方向學習。