發(fā)布時間:2023-11-29 16:04:59 瀏覽量:128次
最近在玩兒公主連結(jié),之前也玩兒過陰陽師這樣的游戲,這樣的游戲都會有個初始號這樣的東西,或者說是可以肝的東西。
當然,作為一名程序員,肝這種東西完全可以用寫代碼的方式幫我們自動完成。游戲腳本其實并不高深,最簡單的體驗方法就是下載一個Airtest了,直接截幾個圖片,寫幾層代碼,就可以按照自己的邏輯玩兒游戲了。
當然,本篇文章不是要講Airtest這個怎么用,而是用原始的python+opencv來實現(xiàn)上面的操作。
這兩天我寫了一個公主連結(jié)刷初始號的程序,也不能算寫游戲腳本的老手,這篇文章主要是分享一些基礎(chǔ)的技術(shù)和使用上的心得吧。
首先,我們要完成以下準備。
這里adb和tesseract我放在百度網(wǎng)盤里了,里面順便放了一個錄制的效果視頻。
pip install pillow pytesseract opencv-python
復(fù)制代碼
除此以外,如果有需要可以安裝uiautomator2,這篇文章就不涉及這塊知識了。
這里我們主要是涉及到單個安卓設(shè)備的ADB連接操作,首先我們打開模擬器。
然后我們調(diào)用adb devices來獲取當前的安卓設(shè)備,我這里是一個模擬器。
接下來可以調(diào)用adb shell測試一下是否能進入到安卓設(shè)備的shell環(huán)境下,確認可以輸入exit退出即可。
如果有的時候進不了shell,可以先調(diào)用一下adb kill-server,然后再調(diào)用adb devices。
接下來是一些ADB的命令操作。通過adb命令,我們可以用python來操作的安卓設(shè)備。
最常見的操作就是截圖了,先調(diào)用screencap截圖放到安卓設(shè)備里,然后再把截圖下拉到電腦。
def take_screenshot():
os.system("adb shell screencap -p /data/screenshot.png")
os.system("adb pull /data/screenshot.png http://www.toutiao.com/a6876231028982153739/tmp.png")
復(fù)制代碼
下拉文件就是剛剛那個adb pull了,以公主連結(jié)為例,以下代碼可以導(dǎo)出賬號信息的xml,以后通過xml就可以登錄了。
os.system(f"adb pull /data/data/tw.sonet.princessconnect/shared_prefs/tw.sonet.princessconnect.v2.playerprefs.xml http://www.toutiao.com/a6876231028982153739/user_info.xml")
復(fù)制代碼
有了下拉自然就有上傳了,通過adb push即可完成。以公主連結(jié)為例,以下代碼可以完成賬號的切換。
# 切換賬號1
os.system("adb push http://www.toutiao.com/a6876231028982153739/user_info1.xml /data/data/tw.sonet.princessconnect/shared_prefs/tw.sonet.princessconnect.v2.playerprefs.xml")
# 切換賬號2
os.system("adb push http://www.toutiao.com/a6876231028982153739/user_info2.xml /data/data/tw.sonet.princessconnect/shared_prefs/tw.sonet.princessconnect.v2.playerprefs.xml")
復(fù)制代碼
def adb_click(center, offset=(0, 0)):
(x, y) = center
x += offset[0]
y += offset[1]
os.system(f"adb shell input tap {x} {y}")
復(fù)制代碼
text = "YourPassword"
os.system(f"adb shell input text {text}")
復(fù)制代碼
有的時候輸入框會有輸入的緩存,我們需要刪除字符。
# 刪除10個字符
for i in range(10):
os.system("adb shell input keyevent 67")
復(fù)制代碼
通過以下代碼,可以查詢當前運行的程序的Activity,也可以順便查包名。
adb shell dumpsys activity activities
復(fù)制代碼
有時候會需要停止某個應(yīng)用,需要提供應(yīng)用的包名。
adb shell am force-stop tw.sonet.princessconnect
復(fù)制代碼
開啟某個應(yīng)用需要提供包名以及Activity。
adb shell am start -W -n tw.sonet.princessconnect/jp.co.cygames.activity.OverrideUnityActivity
復(fù)制代碼
對于圖像的操作第一就是圖像查找了,比如說像Airtest提供的這種,無非就是判斷某個圖像在不在截屏中,在的話在什么位置。
除此之外還需要一些摳圖,比如說我們想獲取賬號的id,賬號的等級,需要截取出一部分圖片然后進行OCR操作。
圖像查找其實就是先拿到兩張圖片,然后調(diào)用cv2.matchTemplate方法來查找是否存在以及位置,這里匹配是一個相對模糊的匹配,會有一個相似度的概率,最高是1。我們設(shè)定一個閾值來判斷模板是否在截屏里即可。
這里截屏如下,文件名為tmp.png:
模板如下:
代碼如下:
import cv2
def image_to_position(screen, template):
image_x, image_y = template.shape[:2]
result = cv2.matchTemplate(screen, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
print("prob:", max_val)
if max_val > 0.98:
global center
center = (max_loc[0] + image_y / 2, max_loc[1] + image_x / 2)
return center
else:
return False
if __name__ == "__main__":
screen = cv2.imread('tmp.png')
template = cv2.imread('Xuandan.png')
print(image_to_position(screen, template))
復(fù)制代碼
運行上述代碼后,可以看到模板匹配出來的概率為0.9977,位置為(1165, 693),對于一張圖片,左上角為原點,因為我的分辨率是1280 * 720,那么右下角的坐標就是(1280, 720)??梢钥吹轿覀冞@個選單其實就是剛好在右下角的位置。
游戲腳本其實并不是代碼很難寫,而是需要截很多的圖,這些圖要保證分辨率和原始一樣。我發(fā)現(xiàn)在win10如果用畫圖打開圖片
可以保證使用QQ截屏出來的分辨率,和圖片本身的分辨率一樣。
這個時候直接用qq截屏出來的模板即可直接用于識別。
接下來就是有時候需要裁剪一些圖像了,當然我們的模板圖片也可以通過裁剪圖片的方式得到,這樣的模板圖片是最準的。
裁剪其實就是需要裁剪的位置,以及需要的高度和寬度,說白了就是一篇長方形的區(qū)域,下面的代碼使用PIL庫實現(xiàn)。
from PIL import Image
def crop_screenshot(img_file, pos_x, pos_y, width, height, out_file):
img = Image.open(img_file)
region = (pos_x, pos_y, pos_x + width, pos_y + height)
cropImg = img.crop(region)
cropImg.save(out_file)
print("exported:", out_file)
if __name__ == "__main__":
crop_screenshot("tmp.png", 817,556, 190, 24, "test_id.png")
復(fù)制代碼
上面的代碼以截取玩家的id為例。
運行代碼后,得到截圖如下:
得到了以上的圖片信息后就是進行OCR了,也就是光學(xué)字符識別。這里代碼非常簡單,只要調(diào)用API即可。
from PIL import Image
import pytesseract
image = Image.open('test_id.png')
content = pytesseract.image_to_string(image) # 識別圖片
print(content)
復(fù)制代碼
不過需要注意的一點就是pytesseract識別出來的結(jié)果會有空格符,換行符這樣的符號,真正要用的時候進行一些字符的過濾即可。
這篇文章到這里就結(jié)束了,主要還是介紹一些ADB以及圖像相關(guān)的基礎(chǔ)操作。謝謝大家的觀看。
本文的文字及圖片來源于網(wǎng)絡(luò)加上自己的想法,僅供學(xué)習(xí)、交流使用,不具有任何商業(yè)用途,版權(quán)歸原作者所有,如有問題請及時聯(lián)系我們以作處理。
熱門資訊
探討游戲引擎的文章,介紹了10款游戲引擎及其代表作品,涵蓋了RAGE Engine、Naughty Dog Game Engine、The Dead Engine、Cry Engine、Avalanche Engine、Anvil Engine、IW Engine、Frostbite Engine、Creation引擎、Unreal Engine等引擎。借此分析引出了游戲設(shè)計領(lǐng)域和數(shù)字藝術(shù)教育的重要性,歡迎點擊咨詢報名。
2. 手機游戲如何開發(fā)(如何制作傳奇手游,都需要準備些什么?)
?如何制作傳奇手游,都需要準備些什么?提到傳奇手游相信大家都不陌生,他是許多80、90后的回憶;從起初的端游到現(xiàn)在的手游,說明時代在進步游戲在更新,更趨于方便化移動化。而如果我們想要制作一款傳奇手游的
3. B站視頻剪輯軟件「必剪」:免費、炫酷特效,小白必備工具
B站視頻剪輯軟件「必剪」,完全免費、一鍵制作炫酷特效,適合新手小白。快來試試!
游戲中玩家將面臨武俠人生的掙扎抉擇,戰(zhàn)或降?殺或放?每個抉定都將觸發(fā)更多愛恨糾葛的精彩奇遇。《天命奇御》具有多線劇情多結(jié)局,不限主線發(fā)展,高自由...
5. Bigtime加密游戲經(jīng)濟體系揭秘,不同玩家角色的經(jīng)濟活動
Bigtime加密游戲經(jīng)濟模型分析,探討游戲經(jīng)濟特點,幫助玩家更全面了解這款GameFi產(chǎn)品。
6. 3D動畫軟件你知道幾個?3ds Max、Blender、Maya、Houdini大比拼
當提到3D動畫軟件或動畫工具時,指的是數(shù)字內(nèi)容創(chuàng)建工具。它是用于造型、建模以及繪制3D美術(shù)動畫的軟件程序。但是,在3D動畫軟件中還包含了其他類型的...
7. 3D動漫建模全過程,不是一般人能學(xué)的會的,會的多不是人?
步驟01:面部,頸部,身體在一起這次我不準備設(shè)計圖片,我從雕刻進入。這一次,它將是一種純粹關(guān)注建模而非整體繪畫的形式。像往常一樣,我從Sphere創(chuàng)建它...
8. 如何自己開發(fā)一款游戲(游戲開發(fā)入門必看:五大獨立游戲開發(fā)技巧)
?游戲開發(fā)入門必看:五大獨立游戲開發(fā)技巧無論您是剛剛起步開發(fā)自己的第一款游戲,還是已經(jīng)制作了幾款游戲,本篇文章中的5大獨立游戲開發(fā)技巧都可以幫助您更好地設(shè)計下一款游戲。無論你對游戲有著什么樣的概念,都
?三昧動漫對于著名ARPG游戲《巫師》系列,最近CD Projekt 的高層回應(yīng)并不會推出《巫師4》。因為《巫師》系列在策劃的時候一直定位在“三部曲”的故事框架,所以在游戲的出品上不可能出現(xiàn)《巫師4》
10. 3D打印技巧揭秘!Cura設(shè)置讓你的模型更堅固
想讓你的3D打印模型更堅固?不妨嘗試一下Cura參數(shù)設(shè)置和設(shè)計技巧,讓你輕松掌握!
最新文章
同學(xué)您好!