이미지 출처: https://wikidocs.net/192339
저번 시간에 만들었던 Hangman 소스코드에다가 저장장치에 있는 소리를 재생할 수 있는 기능을 넣어 보고, 저번 시간에 정답단어인 butterfly를 fix 해서 문제를 변경할 경우 계속 수정하는 불편함이 있습니다. 외부 파일에서 문제를 불러서 배운 오픈할 수를 이용하고, 힌트까지 추가해서 최종 프로그램을 테스트해 보겠습니다.
Hangman 미니 게임 제작(2)
저번에 말씀드린 resource라는 폴더에 word_list.csv 파일을 만들었습니다.
문제 정답과 힌트입니다.
문제가 만약 나온다면 힌트는 과일이 되고 5글자이다, 정답은 grape가 되겠죠?
힌트로 자동차가 나오고 5글자로 구성된 단어이다. 이런 식으로도 가능합니다.
아래 문제들이 랜덤으로 나오게 만들어보겠습니다.
Name,Hint
strawberry,fruit
grape,fruit
melon,fruit
orange,fruit
wagon,type of vehicle
van,type of vehicle
sedan,type of vehicle
sound 폴더에는 두 개의 wav파일이 있습니다.
문제를 최종적으로 정답을 맞혔을 경우 딩동 소리가 나오게 되고
열 번의 기회를 다 쓰고 게임 풀이에 실패 했을 때 경고음 소리가 나오게 만들겁니다.
good.wav
bad.wav
저번시간에 만든 코드에 word_list.csv와 사운드를 재생하는 부분만 추가하면 됩니다.
먼저 word_list.csv를 문제로 가져오는 코딩을 해보겠습니다.
# 시간에 관한 처리가 있다. import time # csv 처리 import csv # 랜덤 import random # 사운드 처리 import winsound # CSV 단어 리스트 words = [] with open('./resource/word_list.csv', 'r') as f: reader = csv.reader(f) # Header Skip(Name, Hint 부분은 필요없기에 skip) next(reader) for c in reader: words.append(c) # words에 word_list.csv있는 내용들이 리스트르 들어갑니다. words에서 하나를 랜덤으로 뽑아서 정답단어 word에 넣어주면 되겠죠?
# 리스트 섞기 random.shuffle(words) # 랜덤으로 아무거나 하나를 뽑아온다. q = random.choice(words) print(q) >>> ['melon', 'fruit'] >>> ['van', 'type of vehicle']
여기서 word를 설정하기 전에 한번 출력해 보겠습니다.
위와 같이 리스트로 출력되며 0번째 인덱스가 정답단어이고 1번째가 힌트입니다.
이제 정답단어를 설정해줍시다.
# 정답단어 # q의 0번째 인덱스 값을 가져오고 공백을 지워줍니다. # 실행시켜보면 문제가 랜덤으로 출제되는게 보이실겁니다. word = q[0].strip()
이제는 csv 파일에서 힌트를 표시해 주는 걸 넣어보겠습니다.
힌트는 우리가 정답을 입력하는 부분의 위에다 코드를 작성해 주면 되겠죠.
# 추측 단어 문자 단위 입력 - 내가 입력하는 단어를 input으로 guesses 로 받기 print() print('Hint : {}'.format(q[1].strip())) guess = input('guess a charater :')
그러면 다시 코드를 실행해보겠습니다.
import time import csv import random import winsound name = input('what is your name? : ') print('Hi, ' + name, 'Time to play hangman game!') print() time.sleep(1) print('Start Loading.....') #수가 있다. print() time.sleep(0.5) words = [] # 문제 Csv 파일 로드 with open('./resource/word_list.csv', 'r') as f: reader = csv.reader(f) # Header Skip next(reader) for c in reader: words.append(c) # 리스트 섞기 random.shuffle(words) q = random.choice(words) # 정답 단어 word = q[0].strip() # 양쪽 공백제거# 추측 단어 guesses = '' # 기회 turns = 10 # 핵심 while Loop # 찬스 카운트가 남아 있을 경우 while turns > 0: # 실패 횟수(단어 매치 수) failed = 0 # 정답 단어 반복 (핵심) for char in word: # 정답 단어 내에 추측 문자가 포함되어 있는 경우 if char in guesses: # 추측 단어 출력 print(char, end='') else: print('_', end=' ') failed+=1 # 단어 추측이 성공한 경우 - 모두 다 돌았는데 failed가 0인경우 if failed == 0: print() print() print('Congratulations! The guesses is correct.') # while 구문 중단 break print() # 추측 단어 문자 단위 입력 - 내가 입력하는 단어를 input으로 guesses 로 받기 print() print('Hint : {}'.format(q[1].strip())) guess = input('guess a charater :') # 단어 더하기 guesses += guess # 만약에 위 guess에서 a를 입력하면 guesses는 기억하고 있어야하기에, 입력하는 것을 누적 # 정답 단어에 추측한 문자가 포함되어 있지 않으면 if guess not in word: # 기회 횟수 감소 turns -=1 # 오류 메시지 print('OOps! Wrong') # 남은 기회 출력 print('You hane', turns, 'more guesses!') # 열번의 기회가 끝나고 실패했을때의 문자 메시지 if turns == 0: # 실패 메시지 print('You hangman game failed bye') >>>> what is your name? : youn Hi, youn Time to play hangman game! start Loading..... _ _ _ _ _ _ _ _ _ _ Hint : fruit guess a charater :banannaa OOps! Wrong You hane 9 more guesses! _ _ _ a_ b_ _ _ _ Hint : fruit guess a charater :efwafew OOps! Wrong You hane 8 more guesses! _ _ _ awbe_ _ _ Hint : fruit guess a charater :str strawberr_ Hint : fruit guess a charater :strawberry strawberry Congratulations! The guesses is correct.
힌트가 나오면서 풀이가 되는 걸 보실 수 있습니다.
실행할 때마다 문제와 힌트가 무작위로 나옵니다.
이제는 소리를 넣어보겠습니다.
먼저 단어 추측이 성공 한 경우에 소리를 넣어봅시다.
if failed == 0: print() print() # 성공 사운드(두번째 인자로는 사운드 파일의 형식을 지정할 수 있다.) winsound.PlaySound('./sound/good.wav', winsound.SND_FILENAME) print('Congratulations! The guesses is correct.') # while 구문 중단 break print()
실패한 경우도 넣어봅시다.
# 열번의 기회가 끝나고 실패했을때의 문자 메시지 if turns == 0: # 실패 사운드, 두번째 인자로는 사운드 파일의 형식을 지정할 수 있다. winsound.PlaySound('./sound/bad.wav',winsound.SND_FILENAME) # 실패 메시지 print('You hangman game failed bye')
다시 한번 코드를 실행해 보시면 분명히 정답을 맞혔을 때랑 기회를 모두 날렸을 경우 소리가 재생되는 것을 확인하실 수 있습니다.
최종적으로 완성된 코드에서 여러분이 다시 한번 코드를 바꿀 수 있습니다
예를 들어 🤔
한 문제가 아니라 두 문제를 맞혀야 성공이고, 두 문제 중의 하나라도 못 맞히면 실패라든지 코딩해서 문제를 새롭게 바꿀 수 있겠죠 ㅎㅎ
공부하면 좋은 파트 추천
전 세계적으로 파이썬이 많이 쓰이고 있고, 세계적으로 트랜드를 이끌어가는 프로그래밍 언어 중 하나입니다. 내가 원하는 분야를 살펴보고 필요하면 심화 과정을 공부하는 것도 좋을듯좋을 듯합니다. 😃😊
많은 분들이 말씀하시는 것 중 하나는 코드를 갖다 쓰고 만들어진 것들을 Copy & Paste만 사용하면 실력이 늘지 않는다고 하십니다. 힘들더라도 한 줄 한 줄 코드를 리뷰하고 개선하는 것도 중요하다고 생각합니다. 이 글이 파이썬 기초를 공부하시는 분들께 도움이 되었으면 좋겠습니다.