IT’s Portfolio

[Python] Up&Down 게임을 만들어보자 본문

Development Study/Python

[Python] Up&Down 게임을 만들어보자

f1r3_r41n 2020. 4. 24. 22:00
728x90
반응형

오늘은 파이썬으로 Up&Down 게임을 만들어보려고 한다.

Up&Down 게임을 모르는 사람은 없을테니 바로 시작해보도록 하자.

 

준비물: 에픽하이 - 빈차

 

import

import random
import sys
import getpass

숫자를 랜덤으로 지정하는 random 모듈과 sys 모듈, 입력값을 보이지않게 할 수 있는 getpass 모듈을 import한다.

 

coding

def main():

    print("Game Start!\nPlease select the Mode...\n")

    print("=======================")
    print("|   1. Easy           |")
    print("|   2. Normal         |")
    print("|   3. Hard           |")
    print("|   4. Hell           |")
    print("|   5. exit           |")
    print("=======================")

    ran_num, dif = get_ran()

    if dif == "1":
        print(ran_num)
        gamecnt = 20
        easyandnormal_game(ran_num, gamecnt)
    if dif == "2":
        print(ran_num)
        gamecnt = 10
        easyandnormal_game(ran_num, gamecnt)
    if dif == "3":
        print(ran_num)
        gamecnt = 10
        hardandhell_game(ran_num, gamecnt)
    if dif == "4":
        print(ran_num)
        gamecnt = 5
        hardandhell_game(ran_num, gamecnt)

main 메소드

게임 난이도를 정할 수 있는 그래픽을 보여준 후 get_ran 메소드를 호출하는 것을 알 수 있다.

get_ran 메소드 실행 후 반환받은 값으로 각 난이도마다 게임 메소드를 호출한다.

코드에는 디버깅을 위해 반환받은 랜덤값을 print해줬다.

 

def get_ran():
    while(True):
        dif = input(">>> ")

        if dif == "1":
            print("You have selected the Easy mode...")
            print("Hint: 랜덤 숫자가 1~100까지로 설정됩니다. 기회는 20번입니다.")
            ran_num = random.randrange(1, 100)
            break
        elif dif == "2":
            print("You have selected the Normal mode...")
            print("Hint: 랜덤 숫자가 1~1000까지로 설정됩니다. 기회는 10번입니다.")
            ran_num = random.randrange(1, 1000)
            break
        elif dif == "3":
            print("You have selected the Hard mode...")
            print("Hint: 랜덤 숫자가 1~10000까지로 설정됩니다. 자신이 입력한 숫자는 보이지 않습니다. 기회는 10번입니다.")
            ran_num = random.randrange(1, 10000)
            break
        elif dif == "4":
            print("You have selected the Hell mode...")
            print("Hint: 랜덤 숫자가 1~100000까지로 설정됩니다. 자신이 입력한 숫자는 보이지 않습니다. 기회는 5번입니다.")
            ran_num = random.randrange(1, 100000)
            break
        elif dif == "5":
            print("Game Exit!")
            sys.exit(0)
        else:
            print("Error! Please enter the correct Mode number...")

    return ran_num, dif

get_ran 메소드

main 메소드에서 본 난이도를 숫자로 선택해 난이도마다 랜덤함수가 정해지는 range값을 알 수 있다.

 

def easyandnormal_game(ran_num, gamecnt):

    cnt = 0

    while(1):
        try:
            my_num = int(input("숫자를 입력하세요 >>> "))
        except ValueError:
            print("Error!")
            sys.exit(1)
        except:
            continue

        cnt = cnt + 1
        print(cnt)

        if cnt == gamecnt:
            print("기회 초과! Game Over...")
            break
        elif ran_num == my_num:
            print(str(cnt) + "번의 시도로 Success!")
            break
        elif ran_num > my_num:
            print("UP!")
        else:
            print("DOWN!")

def hardandhell_game(ran_num, gamecnt):

    cnt = 0

    while (1):
        try:
            my_num = int(getpass.getpass("숫자를 입력하세요 >>> "))
        except ValueError:
            print("Error!")
            sys.exit(1)
        except:
            continue

        cnt = cnt + 1
        print(cnt)

        if cnt == gamecnt:
            print("기회 초과! Game Over...")
            break
        elif ran_num == my_num:
            print(str(cnt) + "번의 시도로 Success!")
            break
        elif ran_num > my_num:
            print("UP!")
        else:
            print("DOWN!")

if __name__ == '__main__':
    main()

easyandnormal_game 메소드 및 hardandhell_game 메소드

 

easyandnormal_game은 내가 입력한 숫자가 보이도록 input 함수를 사용하지만 hardandhell_game은 내가 입력한 숫자가 보이지않도록 getpass 함수를 사용한다.

 

두 메소드 다 cnt를 세어서 main 메소드에서 정의한 gamecnt 횟수를 넘으면 게임오버가 된다.

 

중간에 try~except문은 int형으로 숫자를 입력받는 코드에서 문자를 입력받아 ValueError가 나면 에러 메시지 표시 후 프로그램이 종료된다.

 

*try~except문

=> 오류가 날 수도 있는 코드를 try문에 넣고 try문 실행 중 오류가 나면 except문으로 넘어가 코드를 실행시킨다. except 다음 오류종류를 지정해서 지정한 오류가 나면 그 때 실행시킬 코드를 코딩하는 것도 가능하다.

 

실행화면

 

728x90
반응형
Comments