본문 바로가기
프로그래밍

파이썬을 이용한 우주선 슈팅 게임 만들기

by 코드금융 2025. 1. 6.
728x90
반응형

 

 

Python으로 우주선 슈팅 게임 만들기

Pygame을 활용한 단계별 코딩 튜토리얼

1. Pygame 설치

먼저 Pygame 라이브러리를 설치하세요:

pip install pygame
        

2. 기본 게임 창 설정

게임 화면을 생성하고 배경을 설정합니다.

import pygame
import sys

pygame.init()

# 화면 설정
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("우주선 슈팅 게임")

# 색상 설정
background_color = (0, 0, 20)  # 어두운 배경

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill(background_color)
    pygame.display.flip()

pygame.quit()
sys.exit()
        

3. 플레이어 우주선 추가

우주선을 화면에 추가합니다.

player_color = (0, 255, 0)
player_width = 50
player_height = 50
player_x = screen_width // 2 - player_width // 2
player_y = screen_height - player_height - 20
player_speed = 5
        

4. 적 우주선 추가

랜덤으로 생성되는 적 우주선을 추가합니다.

import random

enemy_color = (255, 0, 0)
enemy_width = 50
enemy_height = 50
enemy_x = random.randint(0, screen_width - enemy_width)
enemy_y = -enemy_height
enemy_speed = 3
        

5. 총알 발사 구현

스페이스바를 눌러 총알을 발사합니다.

bullet_color = (255, 255, 0)
bullet_width = 5
bullet_height = 10
bullets = []
bullet_speed = 7

# 총알 발사
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
    bullets.append([player_x + player_width // 2, player_y])
        

6. 충돌 감지

총알이 적 우주선과 충돌하면 적을 제거합니다.

for bullet in bullets:
    bullet[1] -= bullet_speed
    if enemy_x < bullet[0] < enemy_x + enemy_width and enemy_y < bullet[1] < enemy_y + enemy_height:
        bullets.remove(bullet)
        enemy_x = random.randint(0, screen_width - enemy_width)
        enemy_y = -enemy_height
        break
        

7. 전체 코드

아래는 모든 단계를 통합한 완성된 우주선 슈팅 게임 코드입니다. 복사해서 실행해 보세요!

import pygame
import sys
import random

pygame.init()

# 화면 설정
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("우주선 슈팅 게임")

# 색상 설정
background_color = (0, 0, 20)
player_color = (0, 255, 0)
enemy_color = (255, 0, 0)
bullet_color = (255, 255, 0)

# 플레이어 설정
player_width = 50
player_height = 50
player_x = screen_width // 2 - player_width // 2
player_y = screen_height - player_height - 20
player_speed = 5

# 적 설정
enemy_width = 50
enemy_height = 50
enemy_x = random.randint(0, screen_width - enemy_width)
enemy_y = -enemy_height
enemy_speed = 3

# 총알 설정
bullet_width = 5
bullet_height = 10
bullets = []
bullet_speed = 7

running = True
while running:
    pygame.time.delay(30)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            bullets.append([player_x + player_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

    # 적 이동
    enemy_y += enemy_speed
    if enemy_y > screen_height:
        enemy_y = -enemy_height
        enemy_x = random.randint(0, screen_width - enemy_width)

    # 총알 이동
    for bullet in bullets:
        bullet[1] -= bullet_speed
        if bullet[1] < 0:
            bullets.remove(bullet)
        if enemy_x < bullet[0] < enemy_x + enemy_width and enemy_y < bullet[1] < enemy_y + enemy_height:
            bullets.remove(bullet)
            enemy_x = random.randint(0, screen_width - enemy_width)
            enemy_y = -enemy_height

    # 화면 그리기
    screen.fill(background_color)
    pygame.draw.rect(screen, player_color, (player_x, player_y, player_width, player_height))
    pygame.draw.rect(screen, enemy_color, (enemy_x, enemy_y, enemy_width, enemy_height))
    for bullet in bullets:
        pygame.draw.rect(screen, bullet_color, (bullet[0], bullet[1], bullet_width, bullet_height))
    pygame.display.flip()

pygame.quit()
sys.exit()
728x90
반응형