예전에 했던 잡코딩 중 하나를 소개하려 한다.
테트리스는 전세계에서 오랫동안 많은 사랑을 받은 고전 게임이다.
너무 유명하니까 자세한 설명은 생략한다.
게임의 목적은 5가지 모양으로 구성된 블록들을 통해
한 층을 빼곡히 채우도록 하면 점수를 얻는 간단한 게임이다.
게임 룰 자체는 간단하지만 빠른 속도와 T 스핀 등의 기술을 통해 많은 점수를 얻을 수 있는 만큼
테트리스 고인물도 전세계에 많이 분포해 있다.
테트리스는 넷마블, tetris.io 등 다양한 플랫폼에서 할 수 있는데,
이번 시간에 만져볼 테트리스는 Online Poland Tetris로 정했다.
왜 이름이 폴란드 테트리스 인지는 모르겠다.
준비물은 폴란드 테트리스(TetrisOnlinePoland)와 pycharm(python IDE)
게임을 키면 위 화면과 같이 나온다.
training을 가보자
Training 버튼을 누르면 위 화면과 같이 나온다.
단계가 높아질 수록 테트리스 블록의 속도가 빨라지기 때문에 어렵다
테트리스를 잘하는 친구가 13 레벨까지 플레이해서 위 화면처럼 보인다.
실제 본인의 테트리스 실력은 대략 3~4 레벨 정도 된다.
시험삼아 테트리스를 해봤다.
엉망으로 두었지만 앞으로의 코딩에 있어서 해야할 여러가지 정보를 얻을 수 있었다.
첫번째, 총 블록의 가지 수는 총 7가지라는 것
두 번째, 넥스트에 보이는 부분을 통해 다음에 나올 블록의 정확한 종류를 파악할 수 있다는 것
세번째, 화살표 위 버튼을 누르면 항상 시계 방향으로 블록이 변화한다는 것.
python프로그램이 게임화면을 보고 상황을 판단할 수 있도록 전처리 코딩을 해보자.
if __name__ == "__main__":
# finding windows handle of tetris
windows_list = []
toplist = []
def enum_win(hwnd, result):
win_text = win32gui.GetWindowText(hwnd)
windows_list.append((hwnd, win_text))
win32gui.EnumWindows(enum_win, toplist)
game_hwnd = 0
for (hwnd, win_text) in windows_list:
if "TetrisOnline" in win_text:
game_hwnd = hwnd
# set to foreground
win32gui.SetForegroundWindow(game_hwnd)
# get image fr om the window
position = win32gui.GetWindowRect(game_hwnd)
while True:
# Take screenshot
screenshot = grab_screen(position)
위 코드는 TetrisOnline이라는 이름의 윈도우를 활성화시키고 캡쳐하는 코드이다.
grab_screen은 외부 사이트에서 가져온것으로, 추후에 설명하도록 하겠다.
screenshot은 아래와 같이 나온다.
게임화면이 잘 캡쳐된 것을 확인할 수 있다.
이제 화면 정보를 통해서 AI를 만들어보자
2부에서 계속
'기타 잡 코딩' 카테고리의 다른 글
슈퍼마리오 1을 플레이하는 AI를 만드는 방법(4) (1) | 2021.07.11 |
---|---|
슈퍼마리오 1을 플레이하는 AI를 만드는 방법(3) (0) | 2021.07.10 |
슈퍼마리오 1을 플레이하는 AI를 만드는 방법(2) (0) | 2021.07.09 |
슈퍼마리오 1을 플레이하는 AI를 만드는 방법 (0) | 2021.07.07 |
폴란드 테트리스를 플레이하는 AI를 만드는 방법(2) (0) | 2021.07.06 |