행맨 게임

김주언·2022년 6월 25일
0

Python

목록 보기
1/3
post-thumbnail

반복문과 조건문을 활용한다~~

Flow Chart

행맨게임을 만들어볼거시다 이렇게

아주 간단하긔


랜덤 단어 생성

단어를 생성하고 플레이어에게 글자를 입력받는다

import random
word_list = ["aardvark", "baboon", "camel", "octopus"]

chosen_word = random.choice(word_list)
word_length = len(chosen_word)
user_guess = []

for _ in range(word_length):
    user_guess += "_"
    
guess = input("알파벳을 하나 입력하세요 : ").lower()
  • random.choice : 리스트의 원소 중 하나 선택

빈칸을 맞은 글자로 바꾸기

import random
word_list = ["aardvark", "baboon", "camel", "octopus"]

chosen_word = random.choice(word_list)
word_length = len(chosen_word)
user_guess = []

for _ in range(word_length):
    user_guess += "_"


guess = input("알파벳을 하나 입력하세요 : ").lower()

for idx, letter in enumerate(chosen_word):
    if letter == guess:
        print("right")
        print(idx)
        user_guess[idx] = letter
    else:
        print("wrong")
print(user_guess)
  • enumerate 이용하여 리스트의 인덱스와 값을 사용한다.

플레이어가 이겼는지 확인

while 이용하여 플레이어가 입력한 문자가 모두 맞을 때까지 반복한다.


#Step 1
import random
word_list = ["aardvark", "baboon", "camel", "octopus"]

chosen_word = random.choice(word_list)
word_length = len(chosen_word)
user_guess = []
gameOver = False

for _ in range(word_length):
    user_guess += "_"

while not gameOver:
    guess = input("알파벳을 하나 입력하세요 : ").lower()

    for idx, letter in enumerate(chosen_word):
        if letter == guess:
            print("right")
            print(idx)
            user_guess[idx] = letter
        else:
            print("wrong")
    print(user_guess)

    if "_" not in user_guess:
        gameOver = True
  • if...in 리스트 이용하여 플레이어의 리스트에 빈칸이 남아있는지 확인한다.
    빈칸이 없으면 gameOver 플래그를 True로 바꿔주고 while 반복문 종료

남은 목숨 세기

라이프 개수는 6부터 시작한다.

import random

word_list = ["aardvark", "baboon", "camel", "octopus"]

chosen_word = random.choice(word_list)
word_length = len(chosen_word)
user_guess = []
gameOver = False
life = 6

for _ in range(word_length):
    user_guess += "_"
while not gameOver:

    guess = input("알파벳을 하나 입력하세요 : ").lower()

    for idx, letter in enumerate(chosen_word):
        if letter == guess:
            user_guess[idx] = letter
            
	# 플레이어의 알파벳이 틀린 경우 라이프 차감
    if guess not in chosen_word:
        life -= 1
        # 라이프가 0되면 게임 오버
        if life == 0:
            gameOver = True
            print("you lose")

    if "_" not in user_guess:
        gameOver = True
        print("you win")
        
    print(user_guess)
    # 행맨 그림 출력
    print(f"{stages[life]}")

개선

  1. from ... import 이용하여 단어 리스트 업데이트
  2. 행맨 UI 추가하기
  3. 플레이어가 이미 맞춘 알파벳 다시 입력하면 알려주기
  4. 플레이어의 추측 알파벳이 단어에 없는 알파벳이면 알려주기

hangman.py 와 hangman_ui.py, hangman_words.py는 같은 폴더 내에 위치한다.

hangman.py

import random
# 1. from ... import 이용하여 단어 리스트 업데이트
from hangman_words import word_list

# 2. 행맨 UI 추가하기
from hangman_ui import stages, logo

chosen_word = random.choice(word_list)
word_length = len(chosen_word)
user_guess = []

# 3. 플레이어가 이미 맞춘 알파벳 다시 입력하면 알려주기
guess_set = set()

gameOver = False
life = 6

# 2. 게임 시작 전 행맨 로고 출력
print(f"{logo}")

for _ in range(word_length):
    user_guess += "_"
    
while not gameOver:

    guess = input("알파벳을 하나 입력하세요 : ").lower()

    for idx, letter in enumerate(chosen_word):
        if letter == guess:
            user_guess[idx] = letter

    if guess not in chosen_word:
        life -= 1
        # 4. 알려주기 
        print("단어 내에 존재하지 않는 철자입니다")
        if life == 0:
            gameOver = True
            print("you lose")
            
    print(f"{' '.join(user_guess)}")

    if "_" not in user_guess:
        gameOver = True
        print("you win")

	# 2. 행맨 UI 추가하기 - 목숨 수 알려주는 그림
    print(f"{stages[life]}")

게임 화면


이렇다.

profile
학생 점심을 좀 차리시길 바랍니다

0개의 댓글