파이썬 실습/게임 만들기

파이썬 타자 게임 만들기

파기차차 2022. 8. 9. 07:41
728x90
반응형
SMALL
728x90

이번에는 파이썬을 이용하여 타자 게임을 만들어 보겠습니다.

(본 블로그의 내용은 유튜브 동영상(파이썬 타자 게임 만들기)에서 더욱 자세히 보실 수 있습니다.)

 

 

 

아래는 완성된 소스코드입니다.

 

import random
import time

def processing():                               # 함수로 처리
    global user_num, n
    if user_num.isdigit() == True and (int(user_num) >= 1 and int(user_num) <= 10):
        start = time.time()                     # 시작 시간을 기록

        q = random.choice(w)                    # 단어 리스트에서 요소를 랜덤하게 뽑는다.
        while n <= int(user_num):               # 문제를 사용자가 입력한 숫자만큼 반복
            print("*문제", n)
            print(q)                            # 문제(단어)를 출력
            x = input()                         # 사용자 입력을 받는다.
            if q == x:                          # 사용자가 올바르게 입력했는지?    
                print("통과!")
                n = n + 1                       # 문제 번호를 1 증가
                q = random.choice(w)            # 새 문제를 뽑는다.
            else:
                print("오타! 다시 도전!")

        end = time.time()                       # 종료 시간을 기록
        et = end - start                        # 실제로 걸린 시간을 계산
        et = format(et, ".2f")                  # 소수점 둘째 자리까지만 표시되도록 포멧팅
        print("타자 시간 : ", et, "초")
    else:
        print("입력한 값은 1 ~ 10 사이의 숫자가 아닙니다. 다시 입력해 주세요.")
        user_num = input()
        processing()                            # 잘못된 입력 시 다시 입력처리 할 수 있도록 재귀호출

# 단어 리스트
w = ["cat", "dog", "fox", "monkey", "mouse", "panda", "frog", "snake", "wolf", "java"]
n = 1                                           # 문제 번호
print("[타자 게임] 준비되면 Enter!")
input()                                         # 사용자가 엔터를 누를때까지 기다림
print("문제 갯수를 선택해 주세요: 1 ~ 10 중 택")  # 문항수를 사용자가 선택할 수 있도록 개선

user_num = input()

if user_num.isdigit() == True and (int(user_num) >= 1 and int(user_num) <= 10): # 입력값 검증
    print("입력한 값은 숫자입니다.")
    processing()
else:
    print("입력한 값은 1 ~ 10 사이의 숫자가 아닙니다. 다시 입력해 주세요.")
    user_num = input()
    processing()

 

단어 리스트를 만들고, 단어를 저장 한 후 사용자가 엔터를 누르면, 최초 시작시간을 기록한다.

문제로 주어진 단어(q)를 정확하게 입력하면(x) 통과, 그렇지 않으면 다시 입력 한다(최대 5회까지)

최종적으로 종료 시간을 기록하고, 종료시간에서 시작시간의 차이를 구해 타자시간을 구한다.

문제수를 사용자 지정할 수 있도록 사용자의 입력을 받고, 그 입력값을 검증 한다.

아래에서는 입력 값이 5~10 사의 숫자가 아닌 경우 에러 메시지를 출력한다.

user_num = input()로 사용자의 입력을 받은 값은 기본적으로 string이므로 user_num >= 5 와 같이 숫자 비교 시 에러가 발생한다.

따라서 아래와 같이 int(user_num) 형태로 숫자형으로 변환해 주어야 한다.

5~10사이의 숫자가 아닌 경우 종료되어 버리는데, 다시 입력할 수 있도록 개선해 보자

아래와 같이 기존 기능을 함수로 처리하고, 사용자의 입력이 잘못되면(1~10사의 숫자가 아니면) 다시 입력 받도록

else: 구문에서 user_num = input()로 입력 받는다.

그런데, 실제 실행해 보면 2번까지만 입력 받고, 종료되는 문제점을 확인할 수 있다.

else: 구문 아래에 processing()함수를 다시 호출(재귀호출) 함으로써 사용자가 올바르게 입력할때까지 루프를 반복한다.

 

 

 

 

이렇게 타자 게임을 작성하는 소스코드를 잘게 쪼개서 실행해 보고 실습을 통해 이해해 보았습니다.

 

위의 내용 중 이해가 가지 않는 부분은 실제 코딩을 해보면서 반복적으로 실행시켜 보면 이해를 도울 수 있습니다.

 

내용 중 이해가 되지 않거나, 더 좋은 방법들이 있다면 댓글로 의견을 주시기 바라며,

내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.

 

 

감사합니다.

 

 

 

728x90
반응형
LIST