본문 바로가기

Study Information Technology

Pygame으로 클래식 아케이드 게임 개발하기

728x90
반응형

Pygame으로 클래식 아케이드 게임 개발하기

Overview

Pygame은 파이썬으로 게임을 만들 수 있는 강력한 라이브러리입니다. 이 라이브러리는 2D 게임 개발을 위한 다양한 도구와 기능을 제공하며, 특히 게임 메커니즘을 이해하는 데 큰 도움을 줍니다. 이번에는 Pygame을 사용하여 클래식 아케이드 게임을 만드는 과정을 자세히 설명해 보겠습니다. 예제로는 간단한 슈팅 게임을 다뤄볼 것입니다. 이 게임은 기본적인 게임 루프, 사용자 입력 처리, 충돌 감지, 점수 시스템 등 여러 가지 게임 메커니즘을 포함하고 있습니다.

게임 개발의 기초

게임 개발의 기초는 다음과 같습니다:

  1. 게임 루프: 게임의 핵심입니다. 게임 루프는 게임이 실행되는 동안 반복적으로 실행되는 코드 블록입니다. 여기서는 화면을 업데이트하고, 사용자 입력을 처리하며, 게임 상태를 변경하는 작업이 이루어집니다.

  2. 이벤트 처리: 사용자의 입력(키보드, 마우스 등)을 처리하는 부분입니다. Pygame에서는 pygame.event.get() 메서드를 사용하여 이벤트를 감지하고 처리합니다.

  3. 게임 상태 업데이트: 게임의 상태를 업데이트하는 부분입니다. 예를 들어, 플레이어의 위치를 업데이트하거나 적의 위치를 이동시키는 등의 작업을 포함합니다.

  4. 화면 그리기: 게임의 현재 상태를 화면에 그리는 부분입니다. Pygame의 blit() 메서드를 사용하여 화면에 이미지를 그리거나 텍스트를 표시할 수 있습니다.

  5. 충돌 감지: 게임 객체 간의 충돌을 감지하고 처리하는 부분입니다. Pygame의 Rect 객체를 사용하여 충돌을 감지할 수 있습니다.

  6. 점수 및 UI: 게임의 점수를 추적하고 사용자 인터페이스(UI)를 업데이트하는 부분입니다. 점수판을 화면에 그리거나 게임 오버 화면을 표시하는 등의 작업이 포함됩니다.

Pygame으로 간단한 슈팅 게임 만들기

이제 간단한 슈팅 게임을 만드는 과정을 단계별로 설명하겠습니다. 이 게임에서는 플레이어가 적을 향해 총알을 발사하며, 적을 맞추면 점수를 얻는 구조입니다.

1. Pygame 설치 및 기본 설정

먼저, Pygame을 설치합니다. 터미널에서 다음 명령어를 입력하여 설치할 수 있습니다:

pip install pygame

설치가 완료되면, 기본적인 Pygame 프로그램을 작성하여 창을 열어보겠습니다.

import pygame
import sys

# 초기화
pygame.init()

# 화면 크기와 색상 정의
WIDTH, HEIGHT = 800, 600
WHITE = (255, 255, 255)

# 화면 생성
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Simple Shooting Game')

# 게임 루프
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()

# 화면 색상 채우기
screen.fill(WHITE)

# 화면 업데이트
pygame.display.flip()

이 코드에서는 Pygame을 초기화하고, 화면을 생성한 후, 기본 게임 루프를 설정합니다. 화면이 흰색으로 채워지고, pygame.display.flip() 메서드를 통해 화면이 업데이트됩니다.

2. 플레이어와 적 추가하기

플레이어와 적의 이미지를 화면에 표시해 보겠습니다. 플레이어와 적을 나타내기 위해 간단한 사각형을 사용할 수 있습니다.

import pygame
import sys

# 초기화
pygame.init()

# 화면 크기와 색상 정의
WIDTH, HEIGHT = 800, 600
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)

# 화면 생성
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Simple Shooting Game')

# 플레이어와 적의 사각형 정의
player = pygame.Rect(WIDTH // 2 - 25, HEIGHT - 50, 50, 30)
enemy = pygame.Rect(WIDTH // 2 - 25, 50, 50, 30)

# 게임 루프
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()

# 화면 색상 채우기
screen.fill(WHITE)

# 플레이어와 적 그리기
pygame.draw.rect(screen, GREEN, player)
pygame.draw.rect(screen, RED, enemy)

# 화면 업데이트
pygame.display.flip()

이 코드에서는 플레이어와 적을 나타내기 위해 pygame.Rect 객체를 사용하고, pygame.draw.rect() 메서드를 통해 화면에 사각형을 그립니다.

3. 사용자 입력 처리 및 플레이어 이동

이제 사용자 입력을 처리하여 플레이어를 이동시키는 기능을 추가하겠습니다.

import pygame
import sys

# 초기화
pygame.init()

# 화면 크기와 색상 정의
WIDTH, HEIGHT = 800, 600
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)

# 화면 생성
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Simple Shooting Game')

# 플레이어와 적의 사각형 정의
player = pygame.Rect(WIDTH // 2 - 25, HEIGHT - 50, 50, 30)
enemy = pygame.Rect(WIDTH // 2 - 25, 50, 50, 30)
player_speed = 5

# 게임 루프
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()

# 사용자 입력 처리
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= player_speed
if keys[pygame.K_RIGHT]:
player.x += player_speed

# 화면 색상 채우기
screen.fill(WHITE)

# 플레이어와 적 그리기
pygame.draw.rect(screen, GREEN, player)
pygame.draw.rect(screen, RED, enemy)

# 화면 업데이트
pygame.display.flip()

여기서는 pygame.key.get_pressed() 메서드를 사용하여 현재 눌린 키를 확인하고, 왼쪽과 오른쪽 화살표 키에 따라 플레이어의 위치를 변경합니다.

4. 총알 발사 및 충돌 감지

이제 플레이어가 총알을 발사하고, 총알이 적과 충돌했을 때 점수를 올리는 기능을 추가하겠습니다.

import pygame
import sys

# 초기화
pygame.init()

# 화면 크기와 색상 정의
WIDTH, HEIGHT = 800, 600
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

# 화면 생성
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Simple Shooting Game')

# 플레이어와 적의 사각형 정의
player = pygame.Rect(WIDTH // 2 - 25, HEIGHT - 50, 50, 30)
enemy = pygame.Rect(WIDTH // 2 - 25, 50, 50, 30)
player_speed = 5
bullet_speed = 7
bullets = []

# 점수 초기화
score = 0

# 폰트 설정
font = pygame.font.Font(None, 36)

def draw_score():
score_text = font.render(f'Score: {score}', True, (0, 0, 0))
screen.blit(score_text, (10, 10))

# 게임 루프
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
bullet = pygame.Rect(player.centerx - 5, player.top - 10, 10, 20)
bullets.append(bullet)

# 사용자 입력 처리
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= player_speed
if keys[pygame.K_RIGHT]:
player.x += player_speed

# 총알 이동
for bullet in bullets[:]:
bullet.y -= bullet_speed
if bullet.colliderect(enemy):
score += 10
bullets.remove(bullet)
enemy.x = WIDTH // 2 - 25  # 적 위치 초기화
enemy.y = 50
elif bullet.bottom < 0:
bullets.remove(bullet)

# 화면 색상 채우기
screen.fill(WHITE)

# 플레이어, 적, 총알 그리기
pygame.draw.rect(screen, GREEN, player)
pygame.draw.rect(screen, RED, enemy)
for bullet in bullets:
pygame.draw.rect(screen, BLUE, bullet)

# 점수 그리기
draw_score()

# 화면 업데이트
pygame.display.flip()

이 코드에서는 `pygame

728x90
반응형