이번 연재의 목표: Python과 pygame으로 빈 창 하나에서 시작해, 블록이 떨어지고 줄이 지워지고 점수와 레벨이 오르는 테트리스를 끝까지 만듭니다.
테트리스는 작은 게임이지만 게임 프로그램에 필요한 뼈대가 거의 다 들어 있습니다. 화면을 계속 다시 그리는 게임 루프, 2차원 격자로 표현한 판, 좌표 계산으로 하는 회전, 움직여도 되는지 먼저 따져 보는 충돌 검사, 시간에 따라 떨어지는 중력, 상태를 바꾸는 키 입력이 모두 나옵니다. 한 번 끝까지 만들어 보면 다른 2D 게임도 같은 틀로 시작할 수 있습니다.
기준 환경은 Python 3.10 이상과 pygame 2.6.1입니다. 연재의 코드는 모두 Python 3.10.12와 pygame 2.6.1에서 실행해 확인했습니다.
목차
01 — 준비와 첫 창 pygame을 설치하고, 닫기 버튼으로 끝나는 빈 창과 게임 루프를 만듭니다.
02 — 보드 그리기 가로 10칸, 세로 20칸 판을 2차원 리스트로 만들고 격자와 칸을 그립니다.
03 — 일곱 가지 블록 I, O, T, S, Z, J, L 모양을 좌표 목록으로 적고 판 위에 하나를 올립니다.
04 — 이동과 충돌 검사 방향키로 블록을 옮기되, 벽이나 쌓인 블록과 겹치면 움직이지 않게 합니다.
05 — 회전 좌표 하나를 바꾸는 공식으로 블록을 시계 방향으로 돌리고, 벽에 막히면 옆으로 비켜 봅니다.
06 — 중력과 고정 시간이 지나면 블록이 한 칸씩 내려오고, 바닥에 닿으면 판에 굳은 뒤 새 블록이 나옵니다.
07 — 줄 지우기 가득 찬 줄을 지우고 위의 줄을 내려 보냅니다.
08 — 점수와 레벨 지운 줄 수에 따라 점수를 주고, 열 줄마다 레벨과 낙하 속도를 올립니다.
09 — 다음 블록과 7-bag 일곱 개를 한 묶음으로 섞어 꺼내고, 다음에 나올 블록을 옆에 보여 줍니다.
10 — 하드 드롭과 고스트 스페이스로 한 번에 떨어뜨리고, 떨어질 자리를 테두리로 미리 보여 줍니다.
11 — 게임 오버와 완성 게임 오버, 일시정지, 재시작을 붙여 완성본을 만듭니다.
12 — 실행 파일과 다음 과제 완성본을 실행 파일로 묶고, 홀드 기능을 직접 붙여 봅니다.
학습 방법
작업 폴더에 tetris.py 파일 하나를 만들고, 편마다 본문 끝의 전체 코드로 파일 내용을 통째로 바꾼 뒤 실행합니다. 매 편의 코드는 그 자체로 실행되는 완성된 프로그램이라, 중간 편부터 시작해도 됩니다.
앞 편과 무엇이 달라졌는지는 본문에서 함수 단위로 짚습니다. 실행해 보고 설명과 다르게 움직이면 다음 편으로 넘어가지 말고, 어느 줄이 그 동작을 만드는지 먼저 찾아봅니다.
조작법(완성본 기준)
왼쪽·오른쪽 방향키: 이동 아래 방향키: 한 칸 내리기 위 방향키 또는 X: 회전 스페이스: 바로 떨어뜨리기 P: 일시정지 R: 게임 오버 뒤 다시 시작
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.