갤러그 클론
2020
·
중학교 때 pygame으로 만든 갤러그 스타일 슈팅 게임. 적, 무지개 미사일, 그리고 릭롤 재시작 버튼이 있습니다.
AI 번역
이 글은 AI의 도움을 받아 번역되었습니다. 일부 내용에 오류가 있을 수 있습니다.
무엇인가
galaga-clone은 Python이랑 pygame으로 짠 갤러그 스타일 세로 슈팅 게임이다. 파일 하나(galaga.py)에 200줄쯤, 스프라이트 PNG랑 BGM 트랙이 같이 들어있다. 그때 코딩 학원(C3 Coding)에서 게임 개발 배우면서 만든, 일종의 졸업작품 같은 거였다.
재시작 로직 살짝 손본 beta/main.py도 있고, 만들면서 연습한 작은 pygame 예제들(마우스 추적, 폰트 렌더링, BGM 재생 같은 거)이 tutorials/ 폴더에 잔뜩 있다.
어떻게 플레이하나
640×650 창, 60 FPS. 화면 아래쪽 우주선(forces.png)을 좌우 방향키로 움직이고(프레임당 3px, 화면 밖으론 안 나감) 스페이스로 쏜다.
적(enemy.png)은 1초마다 화면 위쪽 아무 X 위치에서 튀어나온다. Enermy(그렇다, 코드엔 이렇게 오타로 박혀있다)는 떨어지는 속도(2~6)랑 좌우 방향을 랜덤으로 정하고 점점 빨라지면서 내려온다(매 프레임 dy += 0.1). 좌우 벽에 닿으면 dx를 뒤집어서 튕긴다.
미사일은 스프라이트가 아니라 pygame.draw.line으로 그린 6px 두께 선인데, 매 프레임 색이 랜덤 RGB로 바뀐다. 진짜 2020년 감성.
적 맞히면 점수 +1에 둘 다 사라지고, 적이 우주선에 닿으면 게임 오버 화면(game-over.png)이랑 재시작 버튼이 뜬다. 누르면 다시 시작.
코드 구조
루프 하나에 클래스 네 개:
| 클래스 | 역할 |
|---|---|
Enermy | 등장, 이동, 튕김, 미사일과 충돌 |
Forces | 플레이어 우주선. 이동, 그리기, 발사, 적과 충돌 |
Missile | 프레임당 5px로 위로 날아가고, 화면 밖이면 삭제 |
Button | 재시작 이미지 히트 테스트 |
충돌 판정은 그냥 손으로 다 짰다. 중첩 while 루프 돌면서 인덱스 줄여가며 리스트에서 지우는 식이다. pygame 스프라이트 그룹도 안 쓰고 물리 엔진도 없다. 그냥 rect랑 collidepoint로 어찌어찌 굴러간다.
게임 오버되면 gaming = False로 바꾸고, 적 다 지우고, 점수 0으로 되돌린 다음, (250, 510)에 있는 재시작 버튼을 클릭할 때까지 기다린다.
에셋
enemy.png,forces.png: 검은색 컬러키 입힌 우주선 스프라이트game-over.png,restart.png: 종료 화면 UIForget Me Not - Patrick Patrikios.mp3: 배경 음악 (튜토리얼 폴더에 pygame BGM 로딩 코드가 있다)
솔직히
지금 보면 좀 엉성하다. 클래스 이름 오타에, while 루프 안에서 리스트 건드리고, 재시작 누르기도 전에 점수가 리셋되고. 그래도 처음부터 끝까지 완성한 첫 게임이었고, 적 튕기는 거 구현했을 때 그 뿌듯함은 아직도 기억난다. README엔 그냥 c3coding pygame이라고만 써있고, 결국 흐지부지된 후속작 codingPro01/galaga를 가리킨다.