728x90

1. 이번 강의 목표
이번 강의에서는 스페이스바를 눌러 총알을 발사하는 기능을 구현합니다.
총알은 플레이어 전투기에서 발사되어 위 방향으로 이동합니다.
구현할 핵심 요소는 다음과 같습니다.
- 스페이스바 입력 처리
- 총알 생성
- 총알 이동
- 화면 밖으로 나간 총알 제거
2. 총알 기본 개념
총알은 여러 개가 동시에 존재할 수 있기 때문에
리스트(List) 로 관리하는 것이 좋습니다.
총알 하나는 다음 정보를 가집니다.
- 위치(x, y)
- 크기(width, height)
- 속도(speed)
3. 총알 변수 설정
먼저 총알 관련 변수를 설정합니다.
bullet_width = 5
bullet_height = 15
bullet_speed = 8
bullets = []
bullets 리스트에는 화면에 존재하는 모든 총알이 저장됩니다.
4. 스페이스바 입력으로 총알 생성
스페이스바를 누르면 총알을 생성하여 리스트에 추가합니다.
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])
총알은 플레이어 전투기의 가운데 상단에서 발사되도록 위치를 계산합니다.
현재는 스페이스바를 누르고 있으면 연속 발사가 됩니다.
발사 제한은 이후 강의에서 처리합니다.
5. 총알 이동 처리
리스트에 들어 있는 모든 총알을 위로 이동시킵니다.
for bullet in bullets:
bullet[1] -= bullet_speed
y 좌표를 감소시키면 총알은 위로 이동합니다.
6. 화면 밖 총알 제거
화면 밖으로 나간 총알은 메모리 관리를 위해 제거합니다.
for bullet in bullets[:]:
if bullet[1] < 0:
bullets.remove(bullet)
리스트 복사본(bullets[:])을 사용하는 이유는
반복 중 요소 제거로 인한 오류를 방지하기 위함입니다.
7. 총알 그리기
모든 총알을 화면에 그립니다.
for bullet in bullets:
pygame.draw.rect(
screen,
(255, 255, 0),
(bullet[0], bullet[1], bullet_width, bullet_height)
)
8. 실행 결과
이제 게임을 실행하면 다음과 같은 동작을 확인할 수 있습니다.
- WASD로 전투기 이동
- 스페이스바를 누르면 총알 발사
- 총알이 위로 이동
- 화면 밖으로 나가면 자동 제거
9. 마무리
이번 강의에서는 다음 내용을 구현했습니다.
- 스페이스바 입력 처리
- 총알 생성 및 관리
- 총알 이동과 제거
이제 게임다운 형태가 보이기 시작합니다.
다음 강의에서는 적 전투기를 화면 상단에서 생성해 보겠습니다.
전체 코드
더보기
import pygame
import sys
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 = []
# 게임 루프
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)
# 화면 그리기
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)
)
pygame.display.update()
clock.tick(FPS)
pygame.quit()
sys.exit()
728x90
'⚙️ Python > 🎮 Pygame 실전' 카테고리의 다른 글
| [Pygame] ✈️ 전투기 슈팅 게임 만들기 5강 | 총알과 적 전투기 충돌 처리 (0) | 2026.01.15 |
|---|---|
| [Pygame] ✈️ 전투기 슈팅 게임 만들기 4강 | 적 전투기 생성 및 움직임 구현 (0) | 2026.01.14 |
| [Pygame] ✈️ 전투기 슈팅 게임 만들기 2강 | 플레이어 전투기 생성과 WASD 이동 구현 (0) | 2026.01.12 |
| [Pygame] ✈️ 전투기 슈팅 게임 만들기 1강 | 프로젝트 시작과 세로 슈팅 게임 구조 이해 (0) | 2026.01.11 |
| [Pygame] 🐍 스네이크 게임 만들기 9강 | 게임 오버 화면 + R키로 재시작 (0) | 2026.01.09 |