Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 만드는 행맨(Hangman) 게임 – 초보자를 위한 단계별 가이드

행맨(Hangman)은 오랫동안 사랑받아 온 고전 단어 맞추기 게임입니다. 제한된 기회 안에 숨겨진 비밀 단어를 알파벳 한 글자씩 추리며 맞히는 방식이라, 게임을 즐기면서 자연스럽게 새로운 단어를 익힐 수 있습니다.

이번 글에서는 이 클래식한 게임을 파이썬 스크립트로 직접 구현해 보겠습니다. time 모듈, while 루프, 조건문 등 파이썬의 기초 문법을 고루 활용하기 때문에 초보자에게도 훌륭한 연습 프로젝트가 됩니다.

행맨 게임 파이썬 코드

# time 모듈 임포트
import time

# 사용자 환영
name = input("이름이 무엇인가요? ")

print("안녕하세요,", name, "행맨 게임을 시작합니다!")

print("")

# 1초 대기
time.sleep(1)

print("단어를 맞혀보세요...")
time.sleep(0.5)

# 비밀 단어 설정
word = ("Secret")
word = word.lower()

# 빈 값으로 추측 기록 변수 생성
guesses = ''

# 시도 횟수(기회) 설정
turns = 12

# while 루프 생성

# 기회가 0보다 많은 동안 반복
while turns > 0:

    # 0부터 시작하는 실패 카운터 생성
    failed = 0

    # 비밀 단어의 각 문자에 대해
    for char in word:

        # 해당 문자를 이미 맞혔는지 확인
        if char in guesses:
            # 맞혔다면 문자 출력
            print(char,)
        else:
            # 아니라면 밑줄(_) 출력
            print("_",)
            # 실패 카운터 1 증가
            failed += 1

    # failed가 0이면 모든 글자를 맞힌 것
    if failed == 0:
        print("You won!")
        # 스크립트 종료
        break

    print()

    # 사용자에게 글자 입력 요청
    guess = input("글자를 하나 입력하세요: ")

    # 입력한 글자를 guesses에 추가
    guesses += guess

    # 입력한 글자가 비밀 단어에 없다면
    if guess not in word:
        # 기회 1 감소
        turns -= 1
        # 오답 메시지 출력
        print("틀렸습니다!")
        # 남은 기회 출력
        print("남은 기회:", turns, "번")

        # 기회가 0이면
        if turns == 0:
            # 패배 메시지 출력
            print("게임 오버! 아쉽지만 패배했습니다.")

실행 결과

================== RESTART: C:\\Python\\Python361\\hangman1.py ==================
이름이 무엇인가요? Raj
안녕하세요, Raj 행맨 게임을 시작합니다!

단어를 맞혀보세요...
_
_
_
_
_
_
글자를 하나 입력하세요: s
s
_
_
_
_
_
글자를 하나 입력하세요: h
틀렸습니다!
남은 기회: 11 번
s
_
_
_
_
_
글자를 하나 입력하세요: e
s
e
_
_
e
_
글자를 하나 입력하세요: c
s
e
c
_
e
_
글자를 하나 입력하세요: r
s
e
c
r
e
_
글자를 하나 입력하세요: e
s
e
c
r
e
_
글자를 하나 입력하세요: t
s
e
c
r
e
t
You won!
>>>

코드 핵심 포인트

  • time.sleep(): 지정한 시간(초)만큼 프로그램 실행을 잠시 멈춰 게임에 리듬감을 더합니다.
  • while 루프: 남은 기회(turns)가 0보다 큰 동안 게임을 계속 반복합니다.
  • for 루프와 in 연산자: 비밀 단어의 각 글자가 지금까지 입력한 글자(guesses)에 포함되어 있으면 글자를, 없으면 밑줄(_)을 출력합니다.
  • failed 카운터: 아직 맞히지 못한 글자 수를 셉니다. 이 값이 0이면 단어를 모두 맞힌 것이므로 승리 메시지를 출력하고 break로 루프를 종료합니다.
  • 기회 감소 로직: 입력한 글자가 단어에 없으면 기회가 1씩 줄어들고, 기회가 0이 되면 패배 메시지와 함께 게임이 끝납니다.

더 발전시키고 싶다면?

기본 버전에 익숙해졌다면 다음과 같은 기능을 추가해 보세요.

  • random 모듈을 사용해 미리 준비한 단어 목록에서 무작위로 단어 선택하기
  • 알파벳이 아닌 입력이 들어왔을 때 예외 처리하기
  • 이미 입력한 글자를 다시 입력하지 못하도록 중복 입력 방지하기
  • 틀릴 때마다 ASCII 아트로 행맨 그림이 완성되도록 만들기