이 기사에서는 4399 미니 게임 "Pet Lianliankan Classic Edition 2"를 테스트 사례로 사용하여 작은 아이콘을 식별하고 마우스 클릭을 시뮬레이션함으로써 페어링을 빠르게 완료하여 게임 스크립트를 완성할 수 있습니다.
브라우저는 게임 창(단일 창)을 엽니다. 원점을 결정하려면 두 개의 좌표(왼쪽 위 모서리 좌표와 오른쪽 아래 모서리 좌표)가 필요합니다. 일반적으로 화면의 왼쪽 상단에 좌표값이 확실하지 않은 학생은 전체 화면 스크린샷을 찍어 이미지 편집 소프트웨어를 사용하여 좌표값을 확인할 수 있습니다. (추천 학습: Python 비디오 튜토리얼)
창 핸들 가져오기, 이것은 브라우저 제목 표시줄의 제목입니다(오른쪽 클릭-소스 코드 보기-제목, 플러스 소프트웨어 이름) 예: "Pet Lianliankan Classic 2, Pet Lianliankan Classic Edition 2 미니 게임, 4399 미니 게임 www.4399.com - Google Chrome". 창문 손잡이를 얻으면 출발이 좋습니다.
전체 개발 아이디어: 메인 게임 그림을 가로채기 ---> 작은 그림으로 분할하기 ---> 각 작은 그림을 비교하고 그림의 친숙도를 비교하여 행렬에 숫자를 저장합니다. ---> 행렬에 대해 연결 가능한 계산을 수행합니다 ---> 클릭을 시뮬레이션합니다.
창 핸들을 가져와서 창을 맨 위에 놓습니다.
Python은 win32gui 모듈을 사용하여 Windows API를 호출하여 창을 작동할 수 있으며, FindWindow() 메서드를 사용하여 창 핸들을 가져올 수 있습니다. 두 개의 매개변수를 전달해야 합니다. 첫 번째 매개변수는 상위 창 핸들(여기서는 0만 입력)이고 두 번째 매개변수는 창 이름( 라벨 제목 - Google Chrome). 핸들을 얻은 후 SetForegroundWindows()를 통해 창을 앞쪽으로 설정합니다. 여기서 게임 창의 보고서를 전달할 수 있습니다.
import win32gui class GameAssist: def __init__(self, wdname): """初始化""" # 取得窗口句柄 self.hwnd = win32gui.FindWindow(0, wdname) if not self.hwnd: print("窗口找不到,请确认窗口句柄名称:【%s】" % wdname ) exit() # 窗口显示最前面 win32gui.SetForegroundWindow(self.hwnd) if __name__ == "__main__": # wdname 为连连看窗口的名称,必须写完整 wdname = u'宠物连连看经典版2,宠物连连看经典版2小游戏,4399小游戏 www.4399.com - Google Chrome' demo = GameAssist(wdname) demo.start()
Intercept the game 인터페이스, 아이콘 분할 및 사진 비교#🎜 🎜#
초기화에서 설정한 왼쪽 상단과 오른쪽 하단의 두 좌표에 따라 ImageGrab.grab() 메소드를 사용하여 스크린샷을 찍고 튜플을 전달한 후 그런 다음 큰 이미지 분할에 대해 스크린샷을 수행하고 작은 아이콘으로 잘라서 Images_list 배열에 저장합니다.
def screenshot(self): """屏幕截图""" # 1、用grab函数截图,参数为左上角和右下角左标 # image = ImageGrab.grab((417, 257, 885, 569)) image = ImageGrab.grab(self.scree_left_and_right_point) # 2、分切小图 # exit() image_list = {} offset = self.im_width # 39 # 8行12列 for x in range(8): image_list[x] = {} for y in range(12): # print("show",x, y) # exit() top = x * offset left = y * offset right = (y + 1) * offset bottom = (x + 1) * offset # 用crop函数切割成小图标,参数为图标的左上角和右下角左边 im = image.crop((left, top, right, bottom)) # 将切割好的图标存入对应的位置 image_list[x][y] = im return image_list위 코드로 잘라낸 작은 아이콘은 디지털 매트릭스로 변환됩니다. 아이콘이 image_type_list에 저장되어 있으면 인덱스가 추가됩니다. 현재 길이는 새로 추가된 아이콘이 됩니다. 그림의 친숙도는 임계값을 10으로 설정합니다. 임계값보다 작을 경우 동일한 그림으로 간주됩니다.
def image2num(self, image_list): """将图标矩阵转换成数字矩阵""" # 1、创建全零矩阵和空的一维数组 arr = np.zeros((10, 14), dtype=np.int32) # 以数字代替图片 image_type_list = [] # 2、识别出不同的图片,将图片矩阵转换成数字矩阵 for i in range(len(image_list)): for j in range(len(image_list[0])): im = image_list[i][j] # 验证当前图标是否已存入 index = self.getIndex(im, image_type_list) # 不存在image_type_list if index Program Core-Icon Connection Algorithm (Path Search)<p># 🎜🎜#여기서는 프로그램을 잘 이해하지 못하는 경우 간단한 알고리즘 코드만 설명합니다. , 메시지를 남겨 주시면 나중에 그래픽 분석을 할 수 있습니다. </p><p>위의 개발 과정을 통해 기본적으로 다음과 같은 행렬이 얻어집니다. 동일한 숫자의 두 값을 비교하여 연결 가능한 경로를 찾으면 클릭 동작을 시뮬레이션합니다. 다음은 게임 규칙에 대한 간략한 소개입니다. 게임 아이콘 영역의 8행 x 12열은 실제로 경로를 찾을 때 통과할 수 있음을 나타냅니다. 예를 들어 좌표(1, 1)는 다음과 같습니다. (1,10), (7,1)과 연결됨 (7,2)와 연결됨. </p><pre class="brush:php;toolbar:false"># 检查数组中是否有图标,如果有则返回索引下表 def getIndex(self,im, im_list): for i in range(len(im_list)): if self.isMatch(im, im_list[i]): return i return -1 # 汉明距离判断两个图标是否一样 def isMatch(self, im1, im2): # 缩小图标,转成灰度 image1 = im1.resize((20, 20), Image.ANTIALIAS).convert("L") image2 = im2.resize((20, 20), Image.ANTIALIAS).convert("L") # 将灰度图标转成01串,即系二进制数据 pixels1 = list(image1.getdata()) pixels2 = list(image2.getdata()) avg1 = sum(pixels1) / len(pixels1) avg2 = sum(pixels2) / len(pixels2) hash1 = "".join(map(lambda p: "1" if p > avg1 else "0", pixels1)) hash2 = "".join(map(lambda p: "1" if p > avg2 else "0", pixels2)) # 统计两个01串不同数字的个数 match = sum(map(operator.ne, hash1, hash2)) # 阀值设为10 return match <p>방법 아이디어: 경로를 찾으려면 먼저 가로와 세로로 직접 연결할 수 있는 좌표 집합을 찾습니다. 예를 들어 좌표 p1(1,1)과 같은 집합입니다. [(0,1), (1,0)]이 있고 연결 가능한 다른 좌표 집합 p2 (1,10)은 [(0,10) ]입니다. 그런 다음 연결 가능한 좌표 집합 p1과 p2를 비교합니다. 세트 내에서도 연결 가능하다는 것은 p1과 p2가 연결될 수 있다는 의미입니다. 당연히 (0,1)과 (0,10)이 같은 라인에 있고 연결 가능하다는 의미입니다. p1과 p2의 코드는 다음과 같습니다. </p><p>코드 구현 과정에 대한 간략한 분석: isReachable()에서 비교해야 하는 두 개의 좌표 값을 전달한 후 의 좌표를 얻습니다. 가로, 세로로 연결할 수 있는 두 점(isRowConnect(), isColConnect())을 수집하고 마지막으로 컬렉션을 순회하여 연결 가능한 점이 있는지 비교하면 들어오는 두 좌표를 연결할 수 있음을 의미합니다. </p><pre class="brush:php;toolbar:false">arr = [ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 0, 1, 2, 3, 4, 5, 4, 6, 7, 2, 1, 1, 8, 0], [ 0, 9, 3, 3, 10, 4, 7, 11, 7, 2, 3, 1, 6, 0], [ 0, 6, 7, 4, 11, 5, 8, 1, 6, 5, 4, 2, 8, 0], [ 0, 6, 2, 9, 6, 8, 9, 7, 12, 11, 3, 11, 11, 0], [ 0, 5, 9, 8, 9, 2, 6, 11, 11, 3, 9, 2, 12, 0], [ 0, 12, 5, 12, 5, 10, 5, 6, 5, 7, 12, 4, 3, 0], [ 0, 1, 8, 10, 12, 9, 10, 4, 3, 7, 2, 1, 10, 0], [ 0, 1, 4, 10, 8, 12, 10, 10, 9, 12, 8, 7, 11, 0], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ]
이러한 게임 보조 스크립트를 배우는 것은 개인이 프로그래밍에 대한 관심을 키우는 데에도 매우 도움이 됩니다. 퇴근 후에는 이러한 방향으로 더 많이 공부하고 배울 것입니다. 미래.
더 많은 Python 관련 기술 기사를 보려면
Python Tutorial열을 방문하여 알아보세요!
위 내용은 Python으로 게임 스크립트를 만드는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Python과 C는 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1) Python은 간결한 구문 및 동적 타이핑으로 인해 빠른 개발 및 데이터 처리에 적합합니다. 2) C는 정적 타이핑 및 수동 메모리 관리로 인해 고성능 및 시스템 프로그래밍에 적합합니다.

Python 또는 C를 선택하는 것은 프로젝트 요구 사항에 따라 다릅니다. 1) 빠른 개발, 데이터 처리 및 프로토 타입 설계가 필요한 경우 Python을 선택하십시오. 2) 고성능, 낮은 대기 시간 및 근접 하드웨어 제어가 필요한 경우 C를 선택하십시오.

매일 2 시간의 파이썬 학습을 투자하면 프로그래밍 기술을 효과적으로 향상시킬 수 있습니다. 1. 새로운 지식 배우기 : 문서를 읽거나 자습서를 시청하십시오. 2. 연습 : 코드를 작성하고 완전한 연습을합니다. 3. 검토 : 배운 내용을 통합하십시오. 4. 프로젝트 실무 : 실제 프로젝트에서 배운 것을 적용하십시오. 이러한 구조화 된 학습 계획은 파이썬을 체계적으로 마스터하고 경력 목표를 달성하는 데 도움이 될 수 있습니다.

2 시간 이내에 Python을 효율적으로 학습하는 방법 : 1. 기본 지식을 검토하고 Python 설치 및 기본 구문에 익숙한 지 확인하십시오. 2. 변수, 목록, 기능 등과 같은 파이썬의 핵심 개념을 이해합니다. 3. 예제를 사용하여 마스터 기본 및 고급 사용; 4. 일반적인 오류 및 디버깅 기술을 배우십시오. 5. 목록 이해력 사용 및 PEP8 스타일 안내서와 같은 성능 최적화 및 모범 사례를 적용합니다.

Python은 초보자 및 데이터 과학에 적합하며 C는 시스템 프로그래밍 및 게임 개발에 적합합니다. 1. 파이썬은 간단하고 사용하기 쉽고 데이터 과학 및 웹 개발에 적합합니다. 2.C는 게임 개발 및 시스템 프로그래밍에 적합한 고성능 및 제어를 제공합니다. 선택은 프로젝트 요구와 개인적인 이익을 기반으로해야합니다.

Python은 데이터 과학 및 빠른 개발에 더 적합한 반면 C는 고성능 및 시스템 프로그래밍에 더 적합합니다. 1. Python Syntax는 간결하고 학습하기 쉽고 데이터 처리 및 과학 컴퓨팅에 적합합니다. 2.C는 복잡한 구문을 가지고 있지만 성능이 뛰어나고 게임 개발 및 시스템 프로그래밍에 종종 사용됩니다.

파이썬을 배우기 위해 하루에 2 시간을 투자하는 것이 가능합니다. 1. 새로운 지식 배우기 : 목록 및 사전과 같은 1 시간 안에 새로운 개념을 배우십시오. 2. 연습 및 연습 : 1 시간을 사용하여 소규모 프로그램 작성과 같은 프로그래밍 연습을 수행하십시오. 합리적인 계획과 인내를 통해 짧은 시간에 Python의 핵심 개념을 마스터 할 수 있습니다.

Python은 배우고 사용하기 쉽고 C는 더 강력하지만 복잡합니다. 1. Python Syntax는 간결하며 초보자에게 적합합니다. 동적 타이핑 및 자동 메모리 관리를 사용하면 사용하기 쉽지만 런타임 오류가 발생할 수 있습니다. 2.C는 고성능 응용 프로그램에 적합한 저수준 제어 및 고급 기능을 제공하지만 학습 임계 값이 높고 수동 메모리 및 유형 안전 관리가 필요합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
