import pygame
import random
# 초기화
pygame.init()
# 화면 설정
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("괴물 피하기 게임")
# 색상
WHITE = (255, 255, 255)
RED = (255, 0, 0)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
# 플레이어 설정
player_size = 50
player_pos = [width // 2, height - 2 * player_size]
# 괴물 설정
monster_size = 50
monster_speed = 10
monsters = [[random.randint(0, width - monster_size), 0] for _ in range(5)]
# 점수 및 보호막 설정
score = 0
shield_active = False
shield_duration = 200 # 보호막 지속 시간 (프레임 수)
shield_timer = 0
font = pygame.font.Font(None, 36)
# 게임 루프
game_over = False
clock = pygame.time.Clock()
def reset_game():
global player_pos, monsters, score, game_over, shield_active, shield_timer
player_pos = [width // 2, height - 2 * player_size]
monsters = [[random.randint(0, width - monster_size), 0] for _ in range(5)]
score = 0
game_over = False
shield_active = False
shield_timer = 0
while True:
while game_over:
screen.fill(WHITE)
text = font.render("게임 오버! 점수: " + str(score), True, BLACK)
screen.blit(text, (width // 2 - text.get_width() // 2, height // 2 - text.get_height() // 2))
restart_text = font.render("R 키를 눌러 재시작", True, BLACK)
screen.blit(restart_text, (width // 2 - restart_text.get_width() // 2, height // 2 + 30))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_r:
reset_game()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player_pos[0] > 0:
player_pos[0] -= 5
if keys[pygame.K_RIGHT] and player_pos[0] < width - player_size:
player_pos[0] += 5
if keys[pygame.K_SPACE] and not shield_active: # 보호막 활성화
shield_active = True
shield_timer = shield_duration
# 괴물 이동 및 점수 증가
for monster_pos in monsters:
monster_pos[1] += monster_speed
if monster_pos[1] > height:
monster_pos[1] = 0
monster_pos[0] = random.randint(0, width - monster_size)
score += 1
# 충돌 감지
for monster_pos in monsters:
if shield_active:
continue
if (player_pos[0] < monster_pos[0] < player_pos[0] + player_size or
player_pos[0] < monster_pos[0] + monster_size < player_pos[0] + player_size) and \
(player_pos[1] < monster_pos[1] < player_pos[1] + player_size or
player_pos[1] < monster_pos[1] + monster_size < player_pos[1] + player_size):
game_over = True
# 보호막 타이머 관리
if shield_active:
shield_timer -= 1
if shield_timer <= 0:
shield_active = False
# 화면 그리기
screen.fill(WHITE)
pygame.draw.rect(screen, RED, (player_pos[0], player_pos[1], player_size, player_size))
if shield_active:
pygame.draw.rect(screen, GREEN, (player_pos[0], player_pos[1], player_size, player_size), 3) # 보호막 시각화
for monster_pos in monsters:
pygame.draw.rect(screen, BLACK, (monster_pos[0], monster_pos[1], monster_size, monster_size))
# 점수 표시
score_text = font.render("점수: " + str(score), True, BLACK)
screen.blit(score_text, (10, 10))
pygame.display.update()
clock.tick(30)