숫자 맞추기 게임
Contents
7.1. 숫자 맞추기 게임¶
몸풀기 예제로 “숫자 맞추기 게임
”을 만들어보겠습니다.
사용자가 컴퓨터가 랜덤으로 생성한 숫자를 맞추는 게임입니다.
7.1.2. 코드 설계¶
게임 클래스(NumberGuessingGame
)
__init__
메서드: 초기 설정, GUI 요소 생성create_widgets
메서드: 라벨, 입력 필드, 버튼 등 필요한 위젯을 생성check_guess
메서드: 사용자 입력을 확인하고 결과를 라벨에 표시, 맞췄을 경우 메시지 팝업 실행reset_game
메서드: 게임 초기화
GUI 요소
Label
위젯: 텍스트를 표시Entry
위젯: 사용자의 입력 받기Button
위젯: 사용자에게 추측 버튼 제공messagebox
모듈: 사용자가 맞췄을 때 팝업 메시지를 표시
7.1.3. 실행 방법¶
python your_script_name.py
코드를 실행하면 tkinter 윈도우가 열립니다.
숫자를 입력하고 “Guess” 버튼을 클릭하여 게임을 진행합니다.
사용자가 맞출 때까지 추측을 계속하고, 맞추면 팝업 창이 나타나고 게임이 초기화됩니다.
7.1.4. 예제 코드¶
다음 코드를 참고하여 숫자 맞추기 게임을 구현해 봅니다.
Note
개인 취향에 맞게 코드를 변형해 보는 것도
아주 좋은 시도입니다.
import tkinter as tk
from tkinter import messagebox
import random
class NumberGuessingGame:
def __init__(self):
self.window = tk.Tk()
self.window.geometry('500x300+500+500')
self.window.title("숫자 맞추기 게임")
self.lower = 1
self.upper = 100
self.number_to_guess = random.randint(self.lower, self.upper)
self.num_guesses = 0
self.create_widgets()
def create_widgets(self):
tk.Label(
master=self.window,
text="숫자 맞추기 게임에 오신 것을 환영합니다!"
).pack(pady=20)
tk.Label(
master=self.window,
text=f"{self.lower}과 {self.upper} 사이의 숫자를 맞춰보세요."
).pack(pady=20)
self.entry = tk.Entry(master=self.window, justify='center')
self.entry.pack(pady=20)
self.guess_button = tk.Button(
master=self.window,
text="Guess",
command=self.check_guess
)
self.guess_button.pack(pady=20)
self.result_label = tk.Label(master=self.window, text="")
self.result_label.pack()
def check_guess(self):
try:
user_guess = int(self.entry.get())
self.num_guesses += 1
if user_guess < self.number_to_guess:
self.result_label.config(text="너무 낮아요!")
elif user_guess > self.number_to_guess:
self.result_label.config(text="너무 높아요!")
else:
self.result_label.config(
text=f"Congratulations! 정답 {self.num_guesses} 맞추셨습니다."
)
messagebox.showinfo(
"Game Over", f"{self.num_guesses}번 만에 맞췄습니다."
)
self.reset_game()
except ValueError:
self.result_label.config(text="입력 오류, 정수를 입력하세요 ^^.")
def reset_game(self):
self.number_to_guess = random.randint(self.lower, self.upper)
self.num_guesses = 0
self.entry.delete(0, tk.END)
self.result_label.config(text="")
if __name__ == "__main__":
game = NumberGuessingGame()
game.window.mainloop()