728x90

1. 이번 강의 목표
이번 강의에서는 적 전투기를 화면 상단에서 생성하고,
아래 방향으로 이동하도록 구현합니다.
이번 강의에서 추가되는 핵심 요소는 다음과 같습니다.
- 적 전투기 생성
- 랜덤 위치 스폰
- 아래 방향 이동
- 화면 밖으로 나간 적 제거
2. 적 전투기 개념 정리
적 전투기는 총알과 마찬가지로 여러 개가 동시에 존재합니다.
따라서 총알과 동일하게 리스트(List) 로 관리합니다.
적 전투기 하나는 다음 정보를 가집니다.
- 위치(x, y)
- 크기(width, height)
- 이동 속도(speed)
3. 적 전투기 변수 설정
적 전투기의 기본 설정을 추가합니다.
enemy_width = 40
enemy_height = 40
enemy_speed = 3
enemies = []
4. 적 전투기 생성 (상단 랜덤 위치)
적 전투기는 화면 상단에서 랜덤한 x 위치로 생성합니다.
import random
enemy_x = random.randint(0, SCREEN_WIDTH - enemy_width)
enemy_y = -enemy_height
enemies.append([enemy_x, enemy_y])
y 좌표를 음수로 설정하면 화면 위에서 자연스럽게 내려옵니다.
5. 일정 시간마다 적 생성하기
매 프레임마다 적을 생성하면 너무 많아지므로
프레임 카운터를 사용하여 일정 간격으로 생성합니다.
enemy_spawn_delay = 60
enemy_timer = 0
enemy_timer += 1
if enemy_timer >= enemy_spawn_delay:
enemy_timer = 0
enemy_x = random.randint(0, SCREEN_WIDTH - enemy_width)
enemy_y = -enemy_height
enemies.append([enemy_x, enemy_y])
FPS가 60일 때 약 1초마다 적이 생성됩니다.
6. 적 전투기 이동 처리
모든 적 전투기를 아래 방향으로 이동시킵니다.
for enemy in enemies:
enemy[1] += enemy_speed
7. 화면 밖 적 제거
화면 아래로 완전히 벗어난 적은 제거합니다.
for enemy in enemies[:]:
if enemy[1] > SCREEN_HEIGHT:
enemies.remove(enemy)
8. 적 전투기 그리기
사각형으로 적 전투기를 화면에 그립니다.
for enemy in enemies:
pygame.draw.rect(
screen,
(255, 60, 60),
(enemy[0], enemy[1], enemy_width, enemy_height)
)
9. 마무리
이번 강의에서는 다음 기능을 구현했습니다.
- 적 전투기 생성
- 화면 상단 랜덤 스폰
- 아래 방향 이동
- 화면 밖 적 제거
이제 플레이어 + 총알 + 적 전투기가 모두 등장했습니다.
다음 강의에서는 드디어 총알과 적의 충돌 처리를 구현합니다.
전체 코드
더보기
import pygame
import sys
import random
pygame.init()
# 화면 설정
SCREEN_WIDTH = 480
SCREEN_HEIGHT = 640
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Shooting Game")
# FPS 설정
clock = pygame.time.Clock()
FPS = 60
# 플레이어 설정
player_width = 40
player_height = 40
player_x = SCREEN_WIDTH // 2 - player_width // 2
player_y = SCREEN_HEIGHT - player_height - 20
player_speed = 5
# 총알 설정
bullet_width = 5
bullet_height = 15
bullet_speed = 8
bullets = []
# 적 설정
enemy_width = 40
enemy_height = 40
enemy_speed = 3
enemies = []
enemy_spawn_delay = 60
enemy_timer = 0
# 게임 루프
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
# 플레이어 이동
if keys[pygame.K_w]:
player_y -= player_speed
if keys[pygame.K_s]:
player_y += player_speed
if keys[pygame.K_a]:
player_x -= player_speed
if keys[pygame.K_d]:
player_x += player_speed
# 화면 밖 제한
if player_x < 0:
player_x = 0
if player_x > SCREEN_WIDTH - player_width:
player_x = SCREEN_WIDTH - player_width
if player_y < 0:
player_y = 0
if player_y > SCREEN_HEIGHT - player_height:
player_y = SCREEN_HEIGHT - player_height
# 총알 발사
if keys[pygame.K_SPACE]:
bullet_x = player_x + player_width // 2 - bullet_width // 2
bullet_y = player_y
bullets.append([bullet_x, bullet_y])
# 총알 이동
for bullet in bullets:
bullet[1] -= bullet_speed
# 총알 제거
for bullet in bullets[:]:
if bullet[1] < 0:
bullets.remove(bullet)
# 적 생성
enemy_timer += 1
if enemy_timer >= enemy_spawn_delay:
enemy_timer = 0
enemy_x = random.randint(0, SCREEN_WIDTH - enemy_width)
enemy_y = -enemy_height
enemies.append([enemy_x, enemy_y])
# 적 이동
for enemy in enemies:
enemy[1] += enemy_speed
# 적 제거
for enemy in enemies[:]:
if enemy[1] > SCREEN_HEIGHT:
enemies.remove(enemy)
# 화면 그리기
screen.fill((0, 0, 0))
pygame.draw.rect(
screen,
(0, 200, 255),
(player_x, player_y, player_width, player_height)
)
for bullet in bullets:
pygame.draw.rect(
screen,
(255, 255, 0),
(bullet[0], bullet[1], bullet_width, bullet_height)
)
for enemy in enemies:
pygame.draw.rect(
screen,
(255, 60, 60),
(enemy[0], enemy[1], enemy_width, enemy_height)
)
pygame.display.update()
clock.tick(FPS)
pygame.quit()
sys.exit()
728x90
'⚙️ Python > 🎮 Pygame 실전' 카테고리의 다른 글
| [Pygame] ✈️ 전투기 슈팅 게임 만들기 6강 | 사각형 대신 스프라이트 적용하기 (0) | 2026.01.16 |
|---|---|
| [Pygame] ✈️ 전투기 슈팅 게임 만들기 5강 | 총알과 적 전투기 충돌 처리 (0) | 2026.01.15 |
| [Pygame] ✈️ 전투기 슈팅 게임 만들기 3강 | 스페이스바로 총알 발사하기 (0) | 2026.01.13 |
| [Pygame] ✈️ 전투기 슈팅 게임 만들기 2강 | 플레이어 전투기 생성과 WASD 이동 구현 (0) | 2026.01.12 |
| [Pygame] ✈️ 전투기 슈팅 게임 만들기 1강 | 프로젝트 시작과 세로 슈팅 게임 구조 이해 (0) | 2026.01.11 |