
안녕하세요? 초코쌤입니다.
10월호에 저와 함께 같이 Pygame으로 스베랑카 게임을 만들었었는데(링크), 오늘 조금 업그레이드 해보려고합니다!
10월호에서는
이렇게까지 했었는데요.
이번호에서는 아래 4단계를 하려고 합니다.
1️⃣ 떨어지는 오브젝트 화면 밖으로 나가면 삭제하기
2️⃣ 떨어지는 오브젝트 속도 다르게 하기
3️⃣ 점수 추가
****4️⃣ 이미지 추가


먼저, 지난시간에 했던 스베랑카 게임을 키면 위와 같이 화면이 나올 것입니다. 이 게임을 오른쪽으로 변화시키는 것이 목표입니다!
import pygame #Pygame 기능 쓰기 위함
import sys #sys.exit()를 사용하기 위함
import random
WIDTH, HEIGHT = 400, 600 # 창 크기
FPS = 60 # 초당 60프레임
WHITE = (255, 255, 255)
BLACK = (0,0,0)
BROWN = (150, 75, 0)
OBJECT_SIZE = 30
class Player:
def __init__(self, x, y, w, h, speed, color):
self.rect = pygame.Rect(x, y, w, h) # 위치/크기
self.speed = speed # 한 프레임당 이동 픽셀
self.color = color
def handle_input(self):
# 현재 눌려 있는 키 상태를 한 번에 가져옵니다.
keys = pygame.key.get_pressed()
# ← 방향키가 눌렸으면 x값을 감소시켜서 위치를 왼쪽으로 이동
if keys[pygame.K_LEFT]:
self.rect.x -= self.speed
# → 방향키가 눌렸으면 x값을 증가시켜서 위치를 오른쪽으로 이동
if keys[pygame.K_RIGHT]:
self.rect.x += self.speed
def draw(self, screen):
# 플레이어(검정 사각형) 그리기
pygame.draw.rect(screen, self.color, self.rect)
class FallObject:
def __init__(self):
x = random.randint(0, WIDTH - OBJECT_SIZE )
y = -OBJECT_SIZE # 화면 위(밖)에서 시작
self.rect = pygame.Rect(x, y, OBJECT_SIZE , OBJECT_SIZE )
self.speed = 5 # 낙하 속도
def update(self):
self.rect.y += self.speed
def draw(self, screen):
cx, cy = self.rect.center
r = OBJECT_SIZE // 2
pygame.draw.circle(screen, BROWN, (cx, cy), r)
class Game:
def __init__(self): # Pygame 초기화
pygame.init()
#위에서 설정한 변수로 게임 스크린 크기 설정
self.screen = pygame.display.set_mode(
(WIDTH, HEIGHT)
)
# 창 제목 설정
pygame.display.set_caption("Suberunker Game")
# FPS를 제어해주는 '시계' 생성
self.clock = pygame.time.Clock()
#run이라는 함수를 계속 돌릴지 여부
self.running = True
# 플레이어 화면 아래 중앙 배치
px = WIDTH//2 - 20; py = HEIGHT - 60
self.player = Player(px, py, 40, 40, 5, BLACK)
# 떨어지는 오브젝트 리스트
self.objects = []
# 일정 주기로 자동 생성되는 이벤트
self.SPAWN = pygame.USEREVENT + 1
pygame.time.set_timer(self.SPAWN, 600)
def spawn_object(self):
self.objects.append(FallObject())
def update_objects(self):
for p in self.objects[:]:
p.update()
def draw_objects(self):
for p in self.objects:
p.draw(self.screen)
def check_collision(self):
for p in self.objects:
if self.player.rect.colliderect(p.rect):
self.running = False # ← '맞으면 끝'
break
def run(self):
while self.running: # running이 True인 동안 계속 반복
self.clock.tick(FPS) # 프레임 속도 제어
for e in pygame.event.get(): # 마우스/키보드 등 이벤트를 꺼낸다.
if e.type == pygame.QUIT: # 꺼낸 이벤트가 종료라면 running을
self.running = False # false로 만들어서 게임 종료.
if e.type == self.SPAWN:
self.spawn_object()
self.player.handle_input() # 입력처리
self.update_objects()
self.check_collision() # 충돌감지
self.screen.fill(WHITE) # 배경을 하얀색으로 칠하고
self.player.draw(self.screen) # 플레이어 그리기
self.draw_objects()
pygame.display.flip() # 화면 업데이트
pygame.quit() #Pygame 닫기
sys.exit() #파이썬 프로그램 완전 종료
game = Game()
game.run()
지난 시간에 했던 코드입니다. 이번호부터 보시는 분들은 이걸 복사해서 같이 따라해보시죠.