본문 바로가기
Programming/Python

파이썬 미니 게임 만들기 - 행맨 (Hangman) - 심코딩

by 심코딩 2023. 1. 16.

오늘은 파이썬을 이용해 우리가 초등학교 때 선생님들과 많이 해본 행맨 (Hangman) 을 만들어 보도록 하겠습니다. 

 

행맨 (Hangman) 이란?

출처: 구글 플레이 스토어

행맨 (Hangman)은 말 그대로 해석을 하자면 사람을 어딘가에 매달아 놓는 (Hang) 게임이라는 뜻이죠. 잔인해 보일 수 있지만 어렸을 때는 그런 생각은 못했었네요.. 어쨌든 이 게임은 누군가가 영어단어를 하나 생각을 하고, 다른 사람은 알파벳을 하나씩 대면서 해당 단어가 어떤건지 맞추는 게임입니다. 어렸을 적 굉장히 많이 한 게임이죠.

 

제가 만들 코드에서 이 게임은 아래와 같이 실행이 됩니다.

 

  1. 컴퓨터가 단어를 하나 생각을 합니다.
  2. 사용자는 알파벳을 하나 입력 합니다.
  3. 해당 알파벳이 단어 안에 있다면 빈칸이 채워지고, 없으면 채워지지 않습니다.
  4. 사용한 단어는 계속해서 옆쪽에 나옵니다.
  5. 알파벳이 완성이 되면 프로그램은 중단 됩니다.

 

저희가 평소에 사용하던 행맨과 다른점은 바로 목숨이 무제한 이라는 겁니다. 목숨을 무제한으로 둔 이유는 실제 사람이랑 하는게 아니기 때문에 가끔 진짜 이게 무슨단어가 정말 궁금한데 이놈의 컴퓨터는 그런 질문엔 대답을 해주지 않기 때문이죠.. 물론 그 단어를 출력해라 라는 명령어를 입력할 수 있게 하면 되지만 그건 행맨게임과는 조금 무관한거 같아 넣지 않았습니다.

 

 

준비물

 

이 게임을 위한 코드를 작성하기에 앞서 준비물이 하나 있습니다. 바로 "단어 리스트" 인데요, 컴퓨터가 랜덤한 단어를 가져오려면 컴퓨터는 어떤 단어들이 있는지를 알아야 합니다. 아래 제가 json 파일을 첨부하였으니 다운 받아주시면 되십니다.

 

word.json
0.02MB

 

그리고 파이썬 파일로 words.py 라는 파일을 만드신 후, 그 안에 아래와 같이 입력 후 그 다음에 위 json 파일을 복사하여 붙여놓기 해주시면 되십니다.

 

words =

 

그렇게 하시면 words 라고 하는 엄청나게 많은 단어들이 들어있는 리스트가 만들어 지게 됩니다. 

 

 

행맨 (Hangman) 코드 만들기

 

words.py라는 파일을 만드셨다면 동일한 폴더에 hangman.py를 만들어 줍시다. 파일명은 어떠한거라도 상관없습니다.

본격적으로 행맨을 만드는 코드는 아래와 같습니다.

 

import random
from words import words
import string

def get_valid_word(words):
    word = random.choice(words) 
    while '-' in word or ' 'in word:
        word = random.choice(words)
    
    return word.upper()

def hangman():
    word = get_valid_word(words)
    word_letters = set(word) 
    alphabet = set(string.ascii_uppercase)
    used_letters = set()

    while len(word_letters) > 0:
        print('You have used these letters: ',''.join(used_letters))

        word_list = [letter if letter in used_letters else '-' for letter in word]
        print('Current word: ', ' '.join(word_list))

        user_letter = input("Guess a letter: ").upper()
        if user_letter in alphabet - used_letters: 
            used_letters.add(user_letter)
            if user_letter in word_letters:
                word_letters.remove(user_letter)
                print('')

        elif user_letter in used_letters:
            print(" You have already used that character. Please try again. ")
        else:
            print("Invalid character")

hangman()

 

첫 함수인 get_valid_word 에서는 우리가 받은 word.json 파일에서 정상적이지 않은 알파벳 배열을 가진 단어들을 골라냅니다. 실제로 해당 json파일을 열어보면 단어에 ' - ' 이나 공백이 포함되어 있는 경우가 있습니다. 

 

실행 해보기

 

해당 파일을 실행하면 아래와 같이 우리가 아는 행맨게임이 실행되는 것을 알 수 있습니다.

총 일곱자리의 단어네요.
A, B, C, D를 입력했지만 반응 X
두번째 자리에 E! 드디어 맞췄네요
점차 완성 되가는 모습
SERIOUS 완성되자마자 종료 되는 모습


오늘은 파이썬을 통해 간단한 미니 게임을 만들어 보았습니다! 어렸을 때 많이 놀았던 행맨 게임을 제 스스로 프로그래밍을 통해 만들어 보니 또 감회가 많이 다르네요!

 

댓글