본문 바로가기

파이썬으로 모바일 게임 매크로 코딩하기

by 머니해커_개발자 2020. 4. 27.

안녕하세요. 개발자입니다.

이번 포스팅에서는 파이썬 코드를 작성해서 간단한 매크로 프로그램을 만들어보도록 하겠습니다.

자세한 작업 과정이 담긴 영상입니다. 참고해서 작성해보세요!

Pycharm과 같은 IDE를 쓰시면 편하게 작업하실 수 있습니다. 저는 파이참을 잘 이용하고 있습니다.

*파이참은 아래 링크를 통해 다운받으실 수 있습니다. 안드로이드 스튜디오와 UI가 동일해서 작업하기 편합니다.

https://www.jetbrains.com/ko-kr/pycharm/download/#section=windows

개발에 사용한 라이브러리들은 다음과 같습니다.

import pyautogui as pag
import mss
import numpy as np
import cv2
import time

개발에 사용한 안드로이드 게임은 다음과 같습니다. 참고로 광고 아니고 모르는 회사입니다. 그냥 컨셉이 너무 재밌어서 했습니다. 

 

고양이 초밥 - Google Play 앱

고양이 초밥은 단순합니다. 하지만 어렵습니다! 그렇지만.. 너무나도 귀엽다! 재밌다! 세상에서 제일 귀여운 고양이 초밥 20종 더 추가! 두 줄 쌓기 불가능! 하드모드 추가! 하드모드 100개 끝에는 고양이 초밥의 비밀이 숨겨져 있다...? 한번 시작하면 멈출 수 없는 고양이 초밥!! 비행기 안에서도 플레이 가능!! 장시간 교통에 든든한 벗, 고양이초밥!! 지금 바로 다운로드~!! 하세요~~!! ---- 개발자 연락처 : CRN : 491-87-00755

play.google.com

게임 매크로 개발의 순서를 소개하겠습니다.

<작업 순서>

1. 특정 구간을 실시간으로 확인해서 스크린샷을 딴다.
2. 해당 구간의 색상 평균을 판별해 흰색 접시가 왔는지 확인한다.
3. 접시가 왔다면 터치해서 고양이 초밥을 쌓는다.

->접시가 무너진다면 자신의 코드의 단점을 찾고 보완한다. = 성능 향상

스크린샷을 얻기 전에, 파이썬 코드들에 쓸 좌표들을 얻는 방법을 먼저 알아야 합니다.

마우스 좌표는 해상도마다 달라서 pyautogui의 position() 함수를 이용해서 구하시면 됩니다.

while True:
	print(pag.position())

이렇게 작성해주시면 마우스의 실시간 좌표를 확인할 수 있으니, 본 코드 작성 전에 좌표를 얻어 기록해놓으시길 바랍니다.

계속해서, 스크린샷 따는 것을 코드로 확인하겠습니다.

while(frames >= 0 ) :
    frames = frames -1
    with mss.mss() as sct:
        plate_img = np.array(sct.grab(plate_pos))[:,:,:3]
        cv2.imshow('plate_img', plate_img)
        cv2.waitKey(1)
    time.sleep(0.03)

코드 실행 결과를 볼 수 있다.

프로그램을 실행하면 반복적으로 스크린샷을 따는 것입니다. 이 스크린샷을 얻으면 get_color() 함수로 넣어서 해당 스크린샷에 흰색 접시가 왔는지 판별합니다.

다음으로, 흰색 접시를 판별하는 함수입니다. img를 매개변수로 받아서, 해당 이미지를 mean으로 평균값을 얻어낸 뒤 각각 210이 넘으면(흰 색에 가까우면) 접시가 왔다고 판단해서 터치를 하는 코드입니다. 생각보다 간단하고 짧은 코드입니다.

def get_color(img) :
    mean = np.mean(img, axis=(0,1))
    Rcolor = mean[0]
    Gcolor = mean[1]
    Bcolor = mean[2]
    if Rcolor >= 210 and Gcolor >= 210 and Bcolor >=210:
        pag.moveTo(1000,100)
        pag.click()

이렇게 짧게 코드를 작성해서 스마트폰 게임 매크로 프로그램을 작성해보았습니다.

전체 코드는 다음과 같습니다.

import pyautogui as pag
import mss
import  numpy as np
import cv2
import time

mouse_act = [462, 194]
plate_pos = { 'left' : 1002, 'top': 120,
              'width' : 120, 'height' : 100}
frames = 100

def get_color(img) :
    mean = np.mean(img, axis=(0,1))
    Rcolor = mean[0]
    Gcolor = mean[1]
    Bcolor = mean[2]
    if Rcolor >= 210 and Gcolor >= 210 and Bcolor >=210:
        pag.moveTo(1000,100)
        pag.click()

while(frames >= 0 ) :
    frames = frames -1
    with mss.mss() as sct:
        plate_img = np.array(sct.grab(plate_pos))[:,:,:3]
        cv2.imshow('plate_img', plate_img)
        cv2.waitKey(1)
        get_color(plate_img)
    time.sleep(0.03)

작성 과정은 유튜브 영상을 확인하시면 자세히 볼 수 있습니다.

앞으로 프로그램 개발 관련한 영상을 많이 쓰도록 하겠습니다. 구독과 좋아요 부탁드리겠습니다.

긴 글 읽어주셔서 감사합니다.

*위 내용은 탈잉 강의를 통해서 자세히 보실 수 있으며, 강의를 구매하시면 자동화 프로그램 실행파일 전자책을 받아보실 수 있습니다.

10년간의 노하우를 통해서 올바른 방법으로 프로그래밍을 공부하실 수 있도록 도와드리겠습니다. 개발자 올림.

 

프로그래밍, 결과 위주로 제대로 알려드립니다 | 58,000원부터 시작 가능한 총 평점 4.9점의 문서·�

10개 총 작업 개수 완료한 총 평점 4.9점인 풀스텍Lastdebugging의 문서·취업, 노하우·전자책, 노하우·전자책 서비스를 5개의 리뷰와 함께 확인해 보세요. 문서·취업, 노하우·전자책, 노하우·전자��

kmong.com

댓글

최신글 전체

이미지
제목
글쓴이
등록일