반응형
파이썬으로 만드는 갤러그 게임: 추억의 슈팅 게임을 코드로🐍🎮
안녕하세요! Python Game Dev 블로그의 열아홉 번째 포스팅입니다. 지난 포스팅에서는 복잡한 미로를 탈출하는 '미로 탈출 게임'을 파이썬으로 구현해 보았는데요, 오늘은 약속드린 대로 추억의 슈팅 게임 '갤러그'를 Pygame으로 만들어 보겠습니다. 어린 시절 오락실에서 즐겼던 짜릿한 경험을 코드로 다시 느껴보세요!
오늘의 게임: 파이썬으로 만드는 갤러그 게임🚀👾
갤러그는 1980년대 초반 오락실을 휩쓸었던 전설적인 슈팅 게임입니다. 플레이어는 우주선을 조종하여 몰려오는 외계 적들을 격추하고, 높은 점수를 얻어야 합니다. 단순하면서도 중독성 강한 게임 플레이와 화려한 효과음은 당시 많은 사람들을 매료시켰습니다. 오늘은 Pygame 라이브러리를 사용하여 이 고전 게임을 현대적인 컴퓨터 환경에서 즐길 수 있도록 만들어 보겠습니다.
게임의 규칙📜
- 플레이어는 우주선을 좌우로 움직여 적들의 공격을 피하고, 미사일을 발사하여 적들을 격추합니다.
- 적들은 다양한 패턴으로 공격하며, 플레이어는 이를 피하고 반격해야 합니다.
- 적들을 격추하면 점수를 얻으며, 모든 적을 격추하거나 특정 조건을 만족하면 다음 단계로 넘어갑니다.
- 플레이어는 제한된 생명을 가지며, 적들의 공격에 맞으면 생명이 줄어듭니다.
- (선택 사항) 파워업 아이템, 보스 스테이지, 다양한 적 유형 등을 추가하여 게임의 재미를 높일 수 있습니다.
전체 코드 💻
import pygame
import random
# Pygame 초기화
pygame.init()
# 화면 설정
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("갤러그 게임")
# 색상 정의
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)
# 플레이어 우주선 설정
player_width = 50
player_height = 30
player_x = screen_width // 2 - player_width // 2
player_y = screen_height - player_height - 10
player_speed = 5
player_health = 3
# 미사일 설정
missile_width = 5
missile_height = 10
missile_speed = 10
missiles = []
# 적 우주선 설정
enemy_width = 40
enemy_height = 25
enemy_speed = 2
enemies = []
enemy_spawn_delay = 1000 # 1초마다 적 생성
last_enemy_spawn = 0
# 점수 설정
score = 0
font = pygame.font.Font(None, 36)
# 게임 루프
running = True
clock = pygame.time.Clock()
while running:
# 이벤트 처리
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
missiles.append(
[player_x + player_width // 2 - missile_width // 2, player_y]
)
# 플레이어 이동
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player_x > 0:
player_x -= player_speed
if keys[pygame.K_RIGHT] and player_x < screen_width - player_width:
player_x += player_speed
# 미사일 이동 및 충돌 처리
for missile in missiles:
missile[1] -= missile_speed
if missile[1] < 0:
missiles.remove(missile)
continue
for enemy in enemies:
if (
missile[0] < enemy[0] + enemy_width
and missile[0] + missile_width > enemy[0]
and missile[1] < enemy[1] + enemy_height
and missile[1] + missile_height > enemy[1]
):
missiles.remove(missile)
enemies.remove(enemy)
score += 10
break
# 적 생성
current_time = pygame.time.get_ticks()
if current_time - last_enemy_spawn > enemy_spawn_delay:
enemy_x = random.randint(0, screen_width - enemy_width)
enemy_y = 0
enemies.append([enemy_x, enemy_y])
last_enemy_spawn = current_time
# 적 이동 및 충돌 처리
for enemy in enemies:
enemy[1] += enemy_speed
if enemy[1] > screen_height:
enemies.remove(enemy)
continue
if (
player_x < enemy[0] + enemy_width
and player_x + player_width > enemy[0]
and player_y < enemy[1] + enemy_height
and player_y + player_height > enemy[1]
):
enemies.remove(enemy)
player_health -= 1
if player_health <= 0:
running = False # 게임 오버 처리
break
# 화면 그리기
screen.fill(black)
# 플레이어 우주선 그리기
pygame.draw.rect(screen, green, (player_x, player_y, player_width, player_height))
# 미사일 그리기
for missile in missiles:
pygame.draw.rect(
screen, white, (missile[0], missile[1], missile_width, missile_height)
)
# 적 우주선 그리기
for enemy in enemies:
pygame.draw.rect(
screen, red, (enemy[0], enemy[1], enemy_width, enemy_height)
)
# 점수 표시
score_text = font.render(f"Score: {score}", True, white)
screen.blit(score_text, (10, 10))
# 화면 업데이트
pygame.display.flip()
clock.tick(60)
# Pygame 종료
pygame.quit()
게임 화면📸
- 플레이어 우주선은 화면 하단에 위치하며, 좌우로 움직일 수 있습니다.
- 적 우주선은 화면 상단에서 나타나 아래로 내려옵니다.
- 플레이어는 스페이스바를 눌러 미사일을 발사하고, 적들을 격추합니다.
- 점수는 화면 좌측 상단에 표시됩니다.
화면 구성 요소 코드 설명📝
- 플레이어 우주선: Pygame의 draw.rect() 함수를 사용하여 사각형 모양으로 그립니다.
- 미사일: 리스트를 사용하여 여러 개의 미사일을 관리하고, 각 미사일의 위치를 업데이트합니다.
- 적 우주선: 랜덤한 위치에 적 우주선을 생성하고, 아래로 이동시킵니다.
- 충돌 처리: 플레이어 우주선, 미사일, 적 우주선 간의 충돌을 감지하고, 해당 객체를 제거하거나 플레이어의 생명을 감소시킵니다.
- 점수 표시: Pygame의 폰트 기능을 사용하여 점수를 화면에 표시합니다.
게임 실행 방법🚀
- 파이썬과 Pygame 라이브러리를 설치합니다.
- 위의 코드를 복사하여 Python 파일로 저장합니다.
- 터미널 또는 명령 프롬프트에서 해당 파일을 실행합니다.
게임에서 사용된 프로그래밍 개념📚
- 리스트: 여러 개의 미사일과 적 우주선을 관리하기 위해 리스트를 사용합니다.
- 랜덤 함수: 적 우주선을 랜덤한 위치에 생성하기 위해 random 모듈의 함수를 사용합니다.
- 충돌 감지: 객체 간의 충돌을 감지하기 위해 사각형 충돌 검사를 사용합니다.
- 폰트: 점수를 화면에 표시하기 위해 Pygame의 폰트 기능을 사용합니다.
알고리즘 설명🧮
- 적 생성 알고리즘: 일정 시간 간격으로 랜덤한 위치에 적 우주선을 생성합니다.
- 미사일 이동 알고리즘: 미사일은 위쪽으로 이동하며, 화면 밖으로 나가면 제거됩니다.
- 적 이동 알고리즘: 적 우주선은 아래쪽으로 이동하며, 화면 밖으로 나가면 제거됩니다.
- 충돌 감지 알고리즘: 플레이어 우주선, 미사일, 적 우주선 간의 충돌을 감지하기 위해 각 객체의 사각형 영역을 비교합니다.
추가 기능 (선택 사항)
- 다양한 적 유형: 적 우주선의 종류를 다양하게 추가하고, 각 유형에 따라 다른 공격 패턴과 점수를 부여할 수 있습니다.
- 파워업 아이템: 플레이어 우주선의 미사일 발사 속도, 공격력, 생명 등을 증가시키는 파워업 아이템을 추가할 수 있습니다.
- 보스 스테이지: 특정 스테이지마다 강력한 보스 적을 등장시켜 게임의 난이도를 높일 수 있습니다.
- 배경 음악 및 효과음: 게임의 분위기를 고조시키는 배경 음악과 효과음을 추가할 수 있습니다.
다음 포스팅 예고🔮
다음 포스팅에서는 '파이썬으로 만드는 팩맨 게임(Pac-Man)'에 대해 알아보겠습니다. 미로 속에서 유령을 피해 점을 먹는 고전 아케이드 게임 팩맨을 Pygame으로 구현해 볼 예정입니다. 팩맨 이동, 유령 AI, 미로 생성, 점수 시스템 등 게임의 핵심 요소들을 구현하는 방법을 자세히 살펴보겠습니다. 또한, 다양한 유령 패턴, 파워 알약 아이템 추가, 그리고 화려한 시각 효과를 통해 게임의 재미를 더욱 높이는 방법도 함께 배워볼 계획입니다. 🐍✨
반응형
'파이썬 기초문법 > 파이썬 게임 만들기' 카테고리의 다른 글
파이썬 게임 만들기 - 레이싱 게임 🏁🏎️ (2) | 2025.03.19 |
---|---|
파이썬 게임 만들기 - 팩맨 게임👾🧱 (0) | 2025.03.18 |
파이썬 게임 만들기 - 미로 탈출 게임 ️🧠🧩 (0) | 2025.03.15 |
파이썬 게임 만들기 - 두더지 잡기 게임 🦔🔨 (1) | 2025.03.15 |
파이썬 게임 만들기 - 플래피 버드 🐦🌵 (1) | 2025.03.15 |