Python에서 숫자 추측 게임을 만드는 방법은 무엇입니까?
이 글의 주제를 이미 예상하셨을지도 모릅니다. 아마도 숫자 추측 게임에 익숙하며, 파이썬을 활용하여 이 게임을 직접 만들어보고 싶으실 것입니다.
처음부터 차근차근 숫자 추측 게임을 만드는 과정을 함께 알아보겠습니다.
숫자 맞추기 게임 만들기
게임의 규칙은 간단합니다. 사용자는 1부터 100 사이의 범위에서 무작위로 생성된 숫자를 맞춰야 합니다. 이것이 전부입니다.
정말 이렇게 간단할까요?
네, 그렇습니다. 정말 간단합니다.
하지만, 사용자가 숫자를 맞추는 데 도움을 줄 수 있는 한 가지 요소가 필요합니다. 바로 힌트입니다. 사용자가 입력한 숫자가 정답보다 작은지, 또는 큰지를 알려주어, 사용자가 어떤 방향으로 추측해야 할지 방향을 제시해야 합니다.
추가적으로, 추측할 수 있는 최대 횟수를 제한하거나, 숫자 범위를 확장하거나, 타이머를 설정하는 등의 기능을 추가하여 게임을 더욱 흥미롭게 만들 수 있습니다.
가장 기본이 되는 게임을 만드는 것이 우선입니다. 이후에 논의된 것처럼 다양한 기능을 추가할 수 있습니다. 따라서 이 섹션에서는 게임의 기본 버전을 먼저 만들고, 그 다음 새로운 기능을 추가하는 방향으로 진행하겠습니다.
코드를 무작정 복사하기보다는 직접 게임을 만들어보는 것을 권장합니다. 먼저 알고리즘을 설명해 드릴 테니, 이를 참고하여 직접 코딩하거나, 코드를 빠르게 이해하는 데 도움이 되길 바랍니다.
이제 숫자 추측 게임을 만드는 알고리즘을 살펴보겠습니다.
작동 원리
코딩을 시작하기 전에, 알고리즘을 먼저 이해했는지 확인해 주세요.
- 숫자 범위를 설정합니다. 기본값은 1부터 100이지만, 필요에 따라 변경할 수 있습니다.
- 설정된 범위(1-100) 내에서 임의의 정수를 생성합니다.
- "X부터 Y까지의 숫자를 맞춰보세요"와 같은 메시지를 사용자에게 보여주면서 게임을 시작합니다. 이 메시지는 원하는 대로 수정할 수 있습니다.
- 사용자가 숫자를 맞추기 위해 시도한 횟수를 저장할 변수를 0으로 초기화합니다.
- 무한 루프를 시작합니다.
- 사용자에게 숫자를 추측하도록 요청합니다.
- 사용자가 입력한 숫자가 무작위로 생성된 숫자와 일치하면, 축하 메시지를 출력합니다. 예를 들어 "축하합니다! {시도 횟수}번 만에 맞추셨습니다!"와 같이 출력할 수 있습니다.
- 축하 메시지를 출력한 후 루프를 종료합니다.
- 만약 사용자가 입력한 숫자가 무작위로 생성된 숫자보다 작으면, "입력하신 숫자가 정답보다 작습니다"와 같은 힌트 메시지를 출력합니다.
- 만약 사용자가 입력한 숫자가 무작위로 생성된 숫자보다 크면, "입력하신 숫자가 정답보다 큽니다"와 같은 힌트 메시지를 출력합니다.
- 사용자의 시도 횟수를 1 증가시킵니다.
알고리즘을 확인했다면, 머릿속에 어느 정도 코드가 떠오르셨을 겁니다. 완벽한 코드를 떠올리지 못하더라도 걱정하지 마세요. 하지만 위에 제시된 알고리즘을 충분히 이해했는지 확인해 주세요.
이제 코딩을 시작할 때입니다. 주저하지 말고 코드를 작성해 봅시다.
코드 살펴보기
코드를 작성해 보셨나요?
만약 그렇다면, 정말 잘하셨습니다! 코드를 확인하고 이해하면서 더 많은 지식을 쌓아보세요.
아직 코드를 작성하지 못했더라도 걱정하지 마세요. 아래 코드를 보면서 이해해 보도록 합시다. 더 나은 이해를 위해 코드를 수정하거나, 자신만의 방식으로 작성해 보는 것도 좋은 방법입니다.
자, 코드를 함께 살펴봅시다.
import random
class NumberGuessingGame:
def __init__(self):
## define the range
self.LOWER = 1
self.HIGHER = 100
## method to generate the random number
def get_random_number(self):
return random.randint(self.LOWER, self.HIGHER)
## game start method
def start(self):
## generating the random number
random_number = self.get_random_number()
print(
f"Guess the randomly generated number from {self.LOWER} to {self.HIGHER}")
## heart of the game
chances = 0
while True:
user_number = int(input("Enter the guessed number: "))
if user_number == random_number:
print(
f"-> Hurray! You got it in {chances + 1} step{'s' if chances > 1 else ''}!")
break
elif user_number < random_number:
print("-> Your number is less than the random number")
else:
print("-> Your number is greater than the random number")
chances += 1
## instantiating and starting the game
numberGuessingGame = NumberGuessingGame()
numberGuessingGame.start()
코드에서 주목할 만한 부분은 다음과 같습니다.
- 범위는 클래스 메서드에서 사용할 수 있도록 __init__ 메서드 내부에 정의되어 있습니다.
- 코드 전체에서 변경해야 할 경우 한 곳에서 쉽게 변경할 수 있도록 했습니다.
- "관심사의 분리" 원칙에 따라 난수를 생성하는 별도의 메서드를 만들었습니다. 현재는 코드가 짧지만, 앞으로 더 많은 코드를 추가할 수 있습니다.
- 마지막으로, 게임과 관련된 모든 메서드가 클래스 내에 포함되도록 클래스를 사용했습니다. 이는 다른 애플리케이션에서 재사용하기 쉽게 만들기 위함입니다.
위에서 언급한 내용들은 모두 클린 코드 작성과 관련이 있습니다. 시간이 흘러도 쉽게 이해할 수 있는 클린 코드를 작성하도록 노력해야 합니다.
게임 실행 결과의 예시는 다음과 같습니다.
$ python number_guessing_game.py Guess the randomly generated number from 1 to 100 Enter the guessed number: 50 -> Your number is less than the random number Enter the guessed number: 75 -> Your number is less than the random number Enter the guessed number: 90 -> Your number is greater than the random number Enter the guessed number: 85 -> Your number is greater than the random number Enter the guessed number: 80 -> Hurray! You got it in 5 steps!
위 코드를 실행하기 위해서는 파이썬이 설치되어 있어야 합니다.
추가 기능 구현하기
이번에는 사용자가 숫자를 추측할 수 있는 최대 시도 횟수를 제한하는 기능을 추가해 보겠습니다. 만약 사용자가 지정된 횟수 안에 숫자를 맞추지 못하면 게임에서 패배하게 됩니다.
어떻게 추가할 수 있을까요?
간단한 2단계 프로세스입니다. 단계를 자세히 살펴보겠습니다.
- 사용자가 숫자를 추측할 수 있는 최대 시도 횟수를 정의합니다.
- 사용자에게 입력을 요청하기 전에, 사용자가 아직 기회가 남아있는지 확인합니다. 만약 주어진 기회를 모두 소진했다면 게임을 종료합니다.
다음 코드를 추가하면 기능을 구현할 수 있습니다.
- __init__ 메서드 안에 다음 코드를 추가합니다.
self.MAX_CHANCES = 10
- 사용자가 다음 추측을 입력하기 전에, 다음 조건을 추가합니다.
if chances == self.MAX_CHANCES:
print("-> Phew! You lost the game. You are out of chances")
이제 정답을 맞추지 못하고 게임을 플레이해 보세요. 다음과 유사한 결과를 확인할 수 있습니다.
$ python number_guessing_game.py Guess the randomly generated number from 1 to 100. You have 10 chances to guess. Enter the guessed number: 1 -> Your number is less than the random number Enter the guessed number: 2 -> Your number is less than the random number Enter the guessed number: 3 -> Your number is less than the random number Enter the guessed number: 4 -> Your number is less than the random number Enter the guessed number: 5 -> Your number is less than the random number Enter the guessed number: 6 -> Your number is less than the random number Enter the guessed number: 7 -> Your number is less than the random number Enter the guessed number: 8 -> Your number is less than the random number Enter the guessed number: 9 -> Your number is less than the random number Enter the guessed number: 10 -> Your number is less than the random number -> Phew! You lost the game. You are out of chances
축하합니다! 게임에 새로운 기능을 성공적으로 추가했습니다. 하지만 여기서 끝이 아닙니다. 더 많은 기능을 추가하여 사용자에게 더욱 매력적인 게임을 만들 수 있습니다. 이제 여러분의 차례입니다. 더 멋진 게임을 만들어 보세요! 🙂
결론
우리는 기본적인 숫자 추측 게임을 만들었습니다. 이제 어린 시절에 즐겨 했던 게임들을 떠올려 보세요. 프로그래밍 언어를 사용하여 만들어보고, 친구들과 공유해 보세요. 어린 시절 추억이 담긴 대부분의 게임들을 디지털화할 수 있습니다.
다음으로는, 파이썬 IDE 및 온라인 컴파일러를 사용하여 파이썬 코드를 실행하는 방법을 알아보겠습니다.
즐거운 코딩 되세요! 🙂
만약 바이럴 단어 게임에 만족하지 못한다면, Wordle 실력을 향상시키는 방법도 있습니다.
재미있게 읽으셨나요? 이 글을 다른 사람들과 공유해 보는 건 어떨까요?