>  기사  >  백엔드 개발  >  Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

WBOY
WBOY앞으로
2023-04-13 10:04:023748검색

머리말

저는 최근에 프린세스 커넥트를 하고 있습니다. 저도 음양사 같은 게임을 해본 적이 있습니다. 그런 게임에는 초기 숫자 같은 것이 있거나 플레이할 수 있는 것이 있습니다.

물론 프로그래머로서 간과 같은 것들은 코드를 작성함으로써 자동으로 완성될 수 있습니다. 게임 스크립트는 실제로 고급이 아닙니다. 이를 경험하는 가장 간단한 방법은 Airtest를 다운로드하고, 사진 몇 장을 찍고, 몇 개의 코드 레이어를 작성한 다음 자신의 논리에 따라 게임을 플레이하는 것입니다.

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

물론 이 글은 Airtest 사용법에 관한 글이 아니고, 위의 연산을 구현하기 위해 원래의 python+opencv를 사용하고 있습니다.

지난 이틀 동안 초기 계정을 얻기 위해 Princess Link 프로그램을 작성했습니다. 게임 스크립트 작성의 베테랑이라고 할 수는 없습니다. 이 기사는 주로 몇 가지 기본 기술과 사용 경험을 공유하기 위한 것입니다.

준비

먼저 다음 준비를 완료해야 합니다.

Android 장치: 에뮬레이터 또는 실제 장치가 허용됩니다.

ADB를 설치하고 시스템 PATH에 추가: adb는

tesseract-ocr을 설치하고 시스템 PATH에 추가하는 데 사용됩니다. 간단한 문자 인식을 달성하는 데 도움이 됩니다.

python3.7 이상의 버전 설치

여기 Baidu 네트워크 디스크에 adb와 tesseract를 넣었고, 그 안에 녹화된 효과 영상도 있습니다.

링크: pan.baidu.com/s/1edTPu2o7… 추출 코드: 33aw

python 라이브러리 설치

pipinstall 베개 pytesseract opencv-python 복사 코드

또한 필요한 경우 uiautomator2를 설치할 수 있습니다. 기사에는 이러한 지식이 포함되어 있지 않습니다.

adb를 사용하여 Android 기기 얻기

여기서는 주로 단일 Android 기기의 ADB 연결 작업을 포함합니다. 먼저 에뮬레이터를 엽니다.

그런 다음 adb 장치를 호출하여 현재 Android 장치를 가져옵니다. 여기에 에뮬레이터가 있습니다.

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

다음으로 adb shell을 호출하여 Android 기기의 쉘 환경에 들어갈 수 있는지 테스트하고, 종료를 입력할 수 있는지 확인합니다.

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

때때로 쉘에 들어갈 수 없는 경우 adb kill-server를 먼저 호출한 다음 adb devices를 호출할 수 있습니다.

일반적으로 사용되는 ADB 쉘 명령

다음은 ADB 명령 작업 중 일부입니다. adb 명령을 통해 Python을 사용하여 Android 장치를 작동할 수 있습니다.

Screenshot

가장 일반적인 작업은 스크린샷을 찍는 것입니다. 먼저 screencap을 호출하여 스크린샷을 찍어 Android 기기에 넣은 다음 스크린샷을 컴퓨터로 가져옵니다.

def take_screenshot():
os.system("adb shell screencap -p /data/screenshot.png")
os.system("adb pull /data/screenshot.png ./tmp.png")

드롭다운 파일

드롭다운 파일은 방금 나온 adb pull입니다. Princess Link를 예로 들면, 다음 코드는 계정 정보의 xml을 내보내고 로그인할 수 있습니다. 앞으로는 xml을 통해

os.system(f"adb pull /data/data/tw.sonet.princessconnect/shared_prefs/tw.sonet.princessconnect.v2.playerprefs.xml ./user_info.xml")

파일 업로드

드롭다운을 이용하면 자연스럽게 업로드가 이루어지며, adb push를 통해 완료할 수 있습니다. Princess Link를 예로 들면, 다음 코드는 계정 전환을 완료할 수 있습니다.

# 切换账号1
os.system("adb push ./user_info1.xml /data/data/tw.sonet.princessconnect/shared_prefs/tw.sonet.princessconnect.v2.playerprefs.xml")
# 切换账号2
os.system("adb push ./user_info2.xml /data/data/tw.sonet.princessconnect/shared_prefs/tw.sonet.princessconnect.v2.playerprefs.xml")

화면 아무 곳이나 클릭하세요

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}")

텍스트 입력


text = "YourPassword"
os.system(f"adb shell input text {text}")

문자 삭제

가끔 입력 상자에 입력 캐시가 있을 수 있습니다 , 삭제 문자가 필요합니다.

# 删除10个字符
for i in range(10):
os.system("adb shell input keyevent 67")

현재 실행 중인 패키지명과 액티비티 조회

다음 코드를 사용하면 현재 실행 중인 프로그램의 액티비티를 조회할 수 있으며, 패키지명도 확인할 수 있습니다.

<span>xxxxxxxxxx</span>
1
<span role="presentation" style="padding-right: 0.1px;">adb shell dumpsys activity activities</span>

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

Stop an application

때로는 애플리케이션을 중지해야 하고 애플리케이션의 패키지 이름을 제공해야 합니다.

adb shell am force-stop tw.sonet.princessconnect

애플리케이션 열기

애플리케이션을 열려면 패키지 이름과 활동을 제공해야 합니다.


adb shell am start -W -n tw.sonet.princessconnect/jp.co.cygames.activity.OverrideUnityActivity

图像操作

对于图像的操作第一就是图像查找了,比如说像Airtest提供的这种,无非就是判断某个图像在不在截屏中,在的话在什么位置。

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

除此之外还需要一些抠图,比如说我们想获取账号的id,账号的等级,需要截取出一部分图片然后进行OCR操作。

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

图像查找

图像查找其实就是先拿到两张图片,然后调用cv2.matchTemplate方法来查找是否存在以及位置,这里匹配是一个相对模糊的匹配,会有一个相似度的概率,最高是1。我们设定一个阈值来判断模板是否在截屏里即可。

这里截屏如下,文件名为tmp.png:

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

模板如下:

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

代码如下:

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))

运行上述代码后,可以看到模板匹配出来的概率为0.9977,位置为(1165, 693),对于一张图片,左上角为原点,因为我的分辨率是1280 * 720,那么右下角的坐标就是(1280, 720)。可以看到我们这个选单其实就是刚好在右下角的位置。

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

如何快速裁剪模板?(win10)

游戏脚本其实并不是代码很难写,而是需要截很多的图,这些图要保证分辨率和原始一样。我发现在win10如果用画图打开图片

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

可以保证使用QQ截屏出来的分辨率,和图片本身的分辨率一样。

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

这个时候直接用qq截屏出来的模板即可直接用于识别。

图像裁剪

接下来就是有时候需要裁剪一些图像了,当然我们的模板图片也可以通过裁剪图片的方式得到,这样的模板图片是最准的。

裁剪其实就是需要裁剪的位置,以及需要的高度和宽度,说白了就是一篇长方形的区域,下面的代码使用PIL库实现。

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")

上面的代码以截取玩家的id为例。

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

运行代码后,得到截图如下:

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

简单的OCR

得到了以上的图片信息后就是进行OCR了,也就是光学字符识别。这里代码非常简单,只要调用API即可。


from PIL import Image
import pytesseract
image = Image.open('test_id.png')
content = pytesseract.image_to_string(image) # 识别图片
print(content)

Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.

不过需要注意的一点就是pytesseract识别出来的结果会有空格符,换行符这样的符号,真正要用的时候进行一些字符的过滤即可。

The End

这篇文章到这里就结束了,主要还是介绍一些ADB以及图像相关的基础操作。谢谢大家的观看。

위 내용은 Python으로 게임 스크립트를 작성하는 것은 매우 쉽습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제