파 이 썬 은 이렇게 할 수 있어 요.파 이 썬 으로 작은 게임 의 외 장 을 만 들 수 있어 요.

머리말
나 는 4399 작은 게임 망 을 열 고 이름 모 를 게임 을 시 켰 다.으,초밥 을 만 드 는 사람 은 재료 가 옆 에 있 고 손님 이 와 서 그들의 요 구 를 말 하면 메뉴 에 따라 가 져 다 주면 된다.그 가 자동 으로 요 리 를 하 는 것 을 어떻게 실현 해 야 할 까?
在这里插入图片描述
2.도구 의 준비
autopy 와 PIL,pywin 32 패 키 지 를 설치 해 야 합 니 다.
1.캡 처 및 이미지 처리 도구
캡 처 는 게임 알림 을 분석 하기 위해 게임 이미 지 를 가 져 오 는 것 입 니 다.사실은 전문 적 인 도구 가 없 으 면 화면 을 이미지 처리 도구 에 직접 붙 여도 됩 니 다.저 는 PicPick 을 사용 합 니 다.아주 좋 습 니 다.그리고 개인 사용 자 는 무료 입 니 다.이미지 처 리 는 각종 정 보 를 얻 기 위해 서 입 니 다.우 리 는 이 를 통 해 주문 한 이미 지 를 얻 은 후에 저장 하여 외부 에서 분석 하고 판단 할 수 있 도록 해 야 합 니 다.
2.편집기
VIM 이나 보드 를 사용 해도 됩 니 다.
3.게임 원리 분석
이 게임 을 보면 8 가지 요리 가 있 습 니 다.모든 요 리 는 일정한 방법 이 있 습 니 다.고객 이 앉 으 면 머리 위 에 그림 이 있 습 니 다.그림 을 보면 그 가 어떤 요 리 를 주문 하고 싶 은 지 알 수 있 습 니 다.왼쪽 원료 구역 을 클릭 한 다음 에 클릭 하 세 요...............................................................
고객 의 머리 에 표 시 된 그림 의 위 치 는 고정 되 어 있 고 모두 네 개의 위치 만 있 습 니 다.우 리 는 하나씩 분석 할 수 있 습 니 다.그리고 원료 의 위치 도 고정 되 어 있 습 니 다.모든 요리 의 방법 이 더욱 뚜렷 합 니 다.그러면 우 리 는 판단 할 수 있 습 니 다.절 차 는 우리 에 게 좋 은 요 리 를 만들어 주 고 받 을 수 있 습 니 다.그래서 돈 이 굴 러 왔 습 니 다.
3.끊 기 단계
 1.마우스 이동

import autopy
autopy.mouse.move(100, 100) #     
autopy.mouse.smooth_move(400, 400) #       (        )
이 명령 은 왼쪽 상단(0,0)과 같은 지 정 된 화면 좌표 로 마 우 스 를 빠르게 이동 시 킨 다음 오른쪽 에서 아래로 이동 시 켜 1024×768 화면의 오른쪽 아래 좌 표 는(1023,767)이다.
2.마우스 클릭

#  autopy  
# ***
import autopy
autopy.mouse.click() #   
autopy.mouse.toggle(True) #     
autopy.mouse.toggle(False) #     
이것 은 비교적 간단 하지만 이곳 의 조작 은 모두 매우 빠르다 는 것 을 기억 합 니 다.게임 이 아직 반응 하지 않 았 을 수도 있 습 니 다.당신 은 완성 해서 실 패 했 습 니 다.그래서 필요 할 때 잠깐 자 도록 하 세 요.
3.유사 이미지 찾기 원리
Google 의'그림 찾기'기능 을 사용 하여 그림 한 장 을 입력 하면 이 그림 과 비슷 한 이미 지 를 모두 보 여 줍 니 다.따라서 마음 에 드 는 그림 을 찾 아 벽 지 를 만 들 려 고 해도 너무 어 릴 때 이 방법 으로 적합 한 것 을 찾 을 수 있 습 니 다.이와 비슷 한 원 리 를 이용 하여 사용자 의 주문 을 판단 해 야 합 니 다.

def get_hash(self, img):
   #  PIL      ,***
  image = img.resize((18, 13), Image.ANTIALIAS).convert("L")
   pixels = list(image.getdata())
  avg = sum(pixels) / len(pixels)
   return "".join(map(lambda p : "1" if p > avg else "0", pixels))
이것 은 하나의 방법 이기 때문에 self 매개 변수 가 있어 서 무시 합 니 다.이 img 은 이미지 파일 을 읽 은 결과 일 수도 있 고 캡 처 한 결과 일 수도 있 습 니 다.그리고 크기 조정 사이즈(18,13)는 제 가 실제 상황 에 따라 정 한 것 입 니 다.왜냐하면 고객 의 얼굴 에 있 는 요리 의 이미지 가 대체적으로 이 비율 이기 때 문 입 니 다.사실은 이 비율 이 매우 중요 하 다 는 것 을 증명 한다.왜냐하면 우리 의 요 리 는 약간 비슷 하기 때문이다.만약 비율 이 적당 하지 않 으 면 압축 한 후에 진실 을 잃 고 오심 하기 쉽다.
그림 의'지문'을 얻 은 후에 우 리 는 표준 그림 지문 과 비교 할 수 있 습 니 다.어떻게 비교 해 야 합 니까?'한 명 거리',즉 두 문자열 이 대응 하 는 위치 에 있 는 서로 다른 문자 의 개 수 를 사용 해 야 합 니 다.

def hamming_dist(self, hash1, hash2):
return sum(itertools.imap(operator.ne, hash1, hash2))
자,우 리 는 준 비 된 표준 이미지 로 계산 특징 코드 를 미리 읽 고 저장 한 다음 에 캡 처 를 해서 그것들 과 비교 하면 됩 니 다.거리 가 가장 작은 것 이 바로 대응 하 는 요리 입 니 다.코드 는 다음 과 같 습 니 다.

def order(self, i):
    l, t = self.left + i * self.step, self.top
    r, b = l + self.width, t + self.height
    hash2 = self.get_hash(ImageGrab.grab((l, t, r, b)))
    (mi, dist) = None, 50
    for i, hash1 in enumerate(self.maps):
      if hash1 is None:
        continue
      this_dist = self.hamming_dist(hash1, hash2)
      if this_dist < dist:
        mi = i
        dist = this_dist
    return mi
그림 을 캡 처 하 는 것 이 어떤 메뉴 보다 50 이상 이면 무엇 을 설명 합 니까?현재 그 위치의 이미 지 는 요리 가 아니 라 는 것 을 설명 한다.즉,고객 이 아직 그 자리 에 앉 지 않 았 거나 우 리 는 게임 을 최소 화 했다.이렇게 처리 하 는 것 은 매우 중요 하 다.가장 가 깝 지만 전혀 어 울 리 지 않 는 요 리 를 찾 아서 처리 하지 않도록 하 는 것 이다.
4.끊 기 실현,자동 요리
이 문 제 는 매우 간단 합 니 다.우 리 는 메뉴 의 원 료 를 기록 한 후에 해당 위 치 를 클릭 하면 됩 니 다.나 는 그것 을 하나의 유형 으로 써 서 호출 할 수 있 습 니 다.

class Menu:
  def __init__(self):
    self.stuff_pos = []
    self.recipes = [None] * 8
    self.init_stuff()
    self.init_recipe()
  def init_stuff(self):
    for i in range(9):
      self.stuff_pos.append( (L + 102 + (i % 3) * 42, T + 303 + (i / 3) * 42) )
  def init_recipe(self):
    self.recipes[0] = (1, 2)
    self.recipes[1] = (0, 1, 2)
    self.recipes[2] = (5, 1, 2)
    self.recipes[3] = (3, 0, 1, 2)
    self.recipes[4] = (4, 1, 2)
    self.recipes[5] = (7, 1, 2)
    self.recipes[6] = (6, 1, 2)
    self.recipes[7] = (8, 1, 2)
  def click(self, i):
    autopy.mouse.move(self.stuff_pos[i][0] + 20, self.stuff_pos[i][1] + 20)
    autopy.mouse.click()
  def make(self, i):
    for x in self.recipes[i]:
      self.click(x)
    autopy.mouse.move(L + 315, T + 363)
    autopy.mouse.click()

class Menu:
  def __init__(self):
    self.stuff_pos = []
    self.recipes = [None] * 8
    self.init_stuff()
    self.init_recipe()
  def init_stuff(self):
    for i in range(9):
      self.stuff_pos.append( (L + 102 + (i % 3) * 42, T + 303 + (i / 3) * 42) )
  def init_recipe(self):
    self.recipes[0] = (1, 2)
    self.recipes[1] = (0, 1, 2)
    self.recipes[2] = (5, 1, 2)
    self.recipes[3] = (3, 0, 1, 2)
    self.recipes[4] = (4, 1, 2)
    self.recipes[5] = (7, 1, 2)
    self.recipes[6] = (6, 1, 2)
    self.recipes[7] = (8, 1, 2)
  def click(self, i):
    autopy.mouse.move(self.stuff_pos[i][0] + 20, self.stuff_pos[i][1] + 20)
    autopy.mouse.click()
  def make(self, i):
    for x in self.recipes[i]:
      self.click(x)
    autopy.mouse.move(L + 315, T + 363)
    autopy.mouse.click()
파 이 썬 이 이렇게 할 수 있 는 파 이 썬 으로 작은 게임 을 할 수 있 는 외 장 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 게임 의 외 장 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기