python import pygame import random import sys # 초기화 pygame.init() # 색상 정의 WHITE = (255, 255, 255) BLACK = (0, 0, 0) RED = (255, 0, 0) GREEN = (0, 255, 0) # 화면 설정 WIDTH, HEIGHT = 640, 480 SCREEN = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("숫자 맞추기 게임") # 폰트 설정 FONT = pygame.font.SysFont(None, 36) # 이미지 로드 try: background = pygame.image.load('images/background.png') logo = pygame.image.load('images/logo.png') submit_button = pygame.image.load('images/submit.png') reset_button = pygame.image.load('images/reset.png') except pygame.error as e: print(f"이미지 로드 실패: {e}") pygame.quit() sys.exit() # 게임 변수 MAX_ATTEMPTS = 5 NUMBER_RANGE = (1, 100) secret_number = random.randint(*NUMBER_RANGE) attempts = 0 guess = "" feedback = "" # 버튼 직사각형 설정 submit_rect = submit_button.get_rect(topleft=(WIDTH//2 - 100, HEIGHT//2 + 50)) reset_rect = reset_button.get_rect(topleft=(WIDTH//2 + 50, HEIGHT//2 + 50)) # 입력 박스 설정 input_box = pygame.Rect(WIDTH//2 - 50, HEIGHT//2, 100, 40) def draw_text(text, color, rect): """텍스트를 화면에 그리는 함수""" img = FONT.render(text, True, color) SCREEN.blit(img, rect) def reset_game(): """게임 상태를 초기화하는 함수""" global secret_number, attempts, guess, feedback secret_number = random.randint(*NUMBER_RANGE) attempts = 0 guess = "" feedback = "" def main(): global guess, attempts, feedback clock = pygame.time.Clock() active = False while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() # 마우스 클릭 처리 if event.type == pygame.MOUSEBUTTONDOWN: if input_box.collidepoint(event.pos): active = True else: active = False if submit_rect.collidepoint(event.pos): if guess.isdigit(): guess_num = int(guess) attempts += 1 if guess_num < secret_number: feedback = "너무 낮아요!" elif guess_num > secret_number: feedback = "너무 높아요!" else: feedback = "정답입니다!" else: feedback = "유효한 숫자를 입력하세요." if reset_rect.collidepoint(event.pos): reset_game() # 키보드 입력 처리 if event.type == pygame.KEYDOWN and active: if event.key == pygame.K_RETURN: if guess.isdigit(): guess_num = int(guess) attempts += 1 if guess_num < secret_number: feedback = "너무 낮아요!" elif guess_num > secret_number: feedback = "너무 높아요!" else: feedback = "정답입니다!" else: feedback = "유효한 숫자를 입력하세요." elif event.key == pygame.K_BACKSPACE: guess = guess[:-1] elif event.unicode.isdigit(): if len(guess) < 3: guess += event.unicode # 배경 그리기 SCREEN.blit(background, (0, 0)) SCREEN.blit(logo, (WIDTH//2 - logo.get_width()//2, 50)) # 입력 박스 그리기 pygame.draw.rect(SCREEN, WHITE, input_box, 2) draw_text(guess, WHITE, (input_box.x + 10, input_box.y + 5)) # 버튼 그리기 SCREEN.blit(submit_button, submit_rect) SCREEN.blit(reset_button, reset_rect) # 피드백 표시 feedback_rect = pygame.Rect(WIDTH//2 - 100, HEIGHT//2 + 100, 200, 50) draw_text(feedback, RED if feedback != "정답입니다!" else GREEN, feedback_rect) # 시도 횟수 표시 attempts_text = f"시도: {attempts}/{MAX_ATTEMPTS}" draw_text(attempts_text, WHITE, (10, 10)) # 게임 승리 조건 if feedback == "정답입니다!" or attempts >= MAX_ATTEMPTS: pygame.time.delay(2000) reset_game() pygame.display.flip() clock.tick(30) if __name__ == "__main__": main() |
프로그램 설명
이 파이썬 프로그램은 Pygame 라이브러리를 사용하여 간단한 숫자 맞추기 미니게임을 구현합니다. 게임의 목표는 1부터 100 사이의 임의의 숫자를 제한된 시도 내에 맞추는 것입니다.
- 초기 설정:
- Pygame을 초기화하고, 기본 색상과 화면 크기를 설정합니다.
- 게임에 사용할 이미지들(배경, 로고, 제출 버튼, 리셋 버튼)을 로드합니다. 이미지 로딩에 실패하면 프로그램을 종료합니다.
- 게임 변수:
- 최대 시도 횟수, 숫자 범위, 비밀 숫자, 현재 시도 횟수, 플레이어의 추측, 피드백 메시지를 설정합니다.
- 버튼 및 입력 박스 설정:
- 제출 버튼과 리셋 버튼의 위치를 설정하고, 사용자가 숫자를 입력할 수 있는 입력 박스를 정의합니다.
- 유틸리티 함수:
- draw_text: 지정된 위치에 텍스트를 그리는 함수입니다.
- reset_game: 게임 상태를 초기화하여 새로운 게임을 시작하는 함수입니다.
- 메인 루프:
- 이벤트를 처리하여 사용자의 입력과 버튼 클릭을 감지합니다.
- 사용자가 숫자를 입력하고 제출하면, 입력한 숫자가 비밀 숫자보다 높은지 낮은지 또는 맞는지를 평가하여 피드백을 제공합니다.
- 리셋 버튼을 클릭하면 게임이 초기화됩니다.
- 배경과 로고, 버튼, 입력 박스, 피드백 메시지를 화면에 렌더링합니다.
- 게임이 종료 조건(정답을 맞추거나 시도 횟수가 초과)에 도달하면 잠시 후 게임을 재설정합니다.
- 프로그램 시작:
- main 함수를 실행하여 게임을 시작합니다.
이 게임은 사용자가 간단하게 숫자를 추측하며, Pygame을 통해 시각적으로 상호작용할 수 있도록 설계되었습니다. 필요한 이미지는 Stable Diffusion과 같은 도구를 사용하여 생성한 후 images 폴더에 저장해야 합니다.
댓글 없음:
댓글 쓰기