티스토리 뷰
반응형
pygame을 사용하여 위와같이 장애물을 피하는 게임을 구현하는 방법을 안내해 드리겠습니다.
여기에 사용될 캐릭터와 장애물은 아래와 같이 bird.png와 tree.png 이미지를 사용합니다.
아래는 게임을 구현하기 위한 단계별 코드와 설명입니다.
1. 기본 설정 및 초기화
import pygame
import random
# 초기화
pygame.init()
# 화면 크기 설정
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Flappy Bird Clone")
# 색상 설정
WHITE = (255, 255, 255)
# 이미지 로드
bird_img = pygame.image.load('/mnt/data/bird.png')
tree_img = pygame.image.load('/mnt/data/tree.png')
# 프레임 설정
clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 35)
2. 게임 클래스 정의
class Bird:
def __init__(self):
self.image = bird_img
self.x = 50
self.y = SCREEN_HEIGHT // 2
self.vel_y = 0
def draw(self):
screen.blit(self.image, (self.x, self.y))
def move(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_UP]:
self.vel_y = -5
elif keys[pygame.K_DOWN]:
self.vel_y = 5
else:
self.vel_y = 0
self.y += self.vel_y
class Tree:
def __init__(self, x, y):
self.image = tree_img
self.x = x
self.y = y
def draw(self):
screen.blit(self.image, (self.x, self.y))
def move(self, speed):
self.x -= speed
if self.x < -self.image.get_width():
self.x = SCREEN_WIDTH
self.y = random.randint(50, SCREEN_HEIGHT - 50)
3. 게임 루프 및 메인 함수
def game_loop():
bird = Bird()
trees = [Tree(700, random.randint(50, SCREEN_HEIGHT - 50)),
Tree(1000, random.randint(50, SCREEN_HEIGHT - 50))]
score = 0
start_time = pygame.time.get_ticks()
run = True
while run:
screen.fill(WHITE)
elapsed_time = (pygame.time.get_ticks() - start_time) // 1000
time_text = font.render(f"Time: {elapsed_time}", True, (0, 0, 0))
screen.blit(time_text, (650, 10))
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
bird.move()
bird.draw()
for tree in trees:
tree.move(5)
tree.draw()
if bird.x + bird.image.get_width() > tree.x and bird.x < tree.x + tree.image.get_width():
if bird.y < tree.y + tree.image.get_height() and bird.y + bird.image.get_height() > tree.y:
run = False
pygame.display.update()
clock.tick(30)
pygame.quit()
if __name__ == "__main__":
game_loop()
주요 부분 설명
- Bird 클래스: 새 캐릭터의 위치와 움직임을 관리합니다. 화살표 키를 이용해 위아래로 이동합니다.
- Tree 클래스: 크리스마스 트리 장애물을 관리합니다. 장애물은 왼쪽으로 이동하며, 화면을 벗어나면 새 위치에서 다시 나타납니다.
- 게임 루프: 게임의 메인 루프로, 새와 장애물을 화면에 그리고 이동을 처리합니다. 장애물에 충돌하면 게임이 종료됩니다.
전체 코드는 다음과 같습니다.
import pygame
import random
class Bird:
def __init__(self):
self.image = bird_img
self.x = 50
self.y = SCREEN_HEIGHT // 2
self.vel_y = 0
def draw(self):
screen.blit(self.image, (self.x, self.y))
def move(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_UP]:
self.vel_y = -5
elif keys[pygame.K_DOWN]:
self.vel_y = 5
else:
self.vel_y = 0
self.y += self.vel_y
class Tree:
def __init__(self, x, y):
self.image = tree_img
self.x = x
self.y = y
def draw(self):
screen.blit(self.image, (self.x, self.y))
def move(self, speed):
self.x -= speed
if self.x < -self.image.get_width():
self.x = SCREEN_WIDTH
self.y = random.randint(50, SCREEN_HEIGHT - 50)
# 초기화
pygame.init()
# 화면 크기 설정
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Flappy Bird Clone")
# 색상 설정
WHITE = (255, 255, 255)
# 이미지 로드
bird_img = pygame.image.load('bird.png')
tree_img = pygame.image.load('tree.png')
# 프레임 설정
clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 35)
def game_loop():
bird = Bird()
trees = [Tree(700, random.randint(50, SCREEN_HEIGHT - 50)),
Tree(1000, random.randint(50, SCREEN_HEIGHT - 50))]
score = 0
start_time = pygame.time.get_ticks()
run = True
while run:
screen.fill(WHITE)
elapsed_time = (pygame.time.get_ticks() - start_time) // 1000
time_text = font.render(f"Time: {elapsed_time}", True, (0, 0, 0))
screen.blit(time_text, (650, 10))
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
bird.move()
bird.draw()
for tree in trees:
tree.move(5)
tree.draw()
if bird.x + bird.image.get_width() > tree.x and bird.x < tree.x + tree.image.get_width():
if bird.y < tree.y + tree.image.get_height() and bird.y + bird.image.get_height() > tree.y:
run = False
pygame.display.update()
clock.tick(60) #30은 느린감이 있어서 60으로 바꿈
pygame.quit()
if __name__ == "__main__":
game_loop()
실행 방법
- 파이썬과 pygame이 설치되어 있어야 합니다.
- 위 코드파일이 있는 위치에 bird.png와 tree.png가 함께 있어야 합니다
- 위 코드를 실행하여 게임을 시작합니다.
이제 위 코드를 실행하여 Flappy Bird와 비슷한 게임을 즐겨보세요!
필요한 이미지 파일(bird.png, tree.png)을 프로젝트 폴더에 저장하고 경로를 정확히 지정해 주세요.
반응형
'[실전] 파이썬 (Python)' 카테고리의 다른 글
알아두면 편리한 파이썬 아나콘다 (Anaconda) 기본 명령어들 (0) | 2024.12.22 |
---|---|
[크롤링 기초] 웹 크롤링 방법 (requests, BeautifulSoup) (0) | 2024.12.22 |
[selenium 기초] Selenium(셀레니윰) 기본 사용법 및 명령어 (0) | 2024.12.11 |
[fastapi 기초] 서버와 통신하는html웹페이지를 띄워보자 (0) | 2024.12.11 |
[fastapi 심화] 파이썬FastApi & Firebase 커뮤니티 웹개발: 환경세팅 및 코드 (2) | 2024.12.04 |