반응형
목차 (원하는 부분을 클릭하시면 바로 이동하실 수 있습니다~)
1. 코드소개
2. 코드설명

오늘은 이전 모듈나누기, 튜토리얼, 스토리 에 이어 실제 게임이 진행되는 모듈에서 변수 선언과 함께 계획한 스토리대로 프로그램이 진행되도록 해주겠습니다.

1. 코드소개

game.py

import time
import os

def start():
    print("""
    ▓▓▒▒▓▓▒▒▓▓▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓▓▓▒▒▓▓
    ░░░░░░░░░░▒▒░░░░░░░░░░▒▒░░░░░░░░░░▒▒▒▒░░░░░░░░▒▒░░░░░░░░░░▒▒░░░░░░░░░░
    ░░▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒
    ░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒░░░░▒▒░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒
    ▒▒▓▓▓▓▓▓▒▒▓▓▒▒▓▓▒▒▓▓▒▒▓▓▒▒▒▒▒▒▓▓▓▓▓▓▒▒▒▒▒▒░░  ░░▒▒▓▓▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓
    ░░░░▒▒░░░░░░░░░░▒▒░░░░░░░░░░▒▒░░░░░░░░░░▒▒░░    ░░▒▒▒▒░░░░░░░░░░▒▒░░░░
    ▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓▒▒░░  ░░░░▒▒░░▒▒▒▒▒▒▒▒▓▓▒▒▒▒
    ▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒░░░░      ░░░░▒▒▒▒▒▒▒▒▒▒▓▓░░▒▒
    ▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓░░░░          ░░▒▒▓▓▓▓▓▓▓▓▒▒▓▓
    ░░░░░░░░░░▒▒░░░░░░░░░░▒▒░░░░░░░░░░▒▒░░░░░░▒▒░░        ░░▒▒▒▒░░░░░░░░░░
    ░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒░░      ░░▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒
    ░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒░░░░░░░░▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒
    ▒▒▓▓▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓▒▒▒▒▓▓▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓
    ░░░░▒▒░░░░░░░░░░▒▒░░░░░░░░░░▒▒░░░░░░░░░░▒▒░░████████████░░░░░░░░▒▒░░░░
    ▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▒▒░░▒▒▓▓▓▓██▓▓▒▒▒▒▒▒▒▒▒▒▓▓░░▒▒
    ▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▓▓░░░░░░▒▒▒▒▓▓░░▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓██▒▒▓▓▒▒▒▒▒▒▓▓░░▒▒
    ▒▒▒▒▓▓▒▒▒▒▒▒▒▒▒▒▓▓▒▒░░▒▒▒▒▒▒▓▓▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓████▓▓▓▓▒▒▒▒▒▒▓▓▒▒▒▒
    ▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒░░░░░░▒▒░░▒▒░░░░░░░░░░░░▒▒▒▒▓▓▒▒▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░▒▒
    """)
    print("광산이 무너지면서 완전히 고립된 것 같다..")
    time.sleep(2)
    print("1시간이 다 되도록 입구 벽을 두드려봤지만 아무 반응도 없는걸 봐선,,")
    time.sleep(2)
    print("여기에 아무도 없다고 생각하나..?")
    time.sleep(2)
    print("아무래도 당분간 버텨야겠는데,,")
    time.sleep(2)
    print("일단 뭘 해야하지..?")
    time.sleep(2)
    print("듣기로는 2번 갱도부터는 아직 공사가 끝나지 않았다고 하던데,,")
    time.sleep(2)

def choice(scene, status=0):
    while(True):
        if scene == "start":
            cmd = input("무엇을 할까? 1.쉰다 2.탐험한다. 3.상태 \n>>")
            if cmd == '1' or cmd == '2' or cmd == '3':
                return cmd
            else:
                print("잘못 입력했다. 숫자를 입력하고 Enter")
                time.sleep(1.5)
                os.system("cls")
        elif scene == "explore":
            cmd = input("어디로 갈까? 1.갱도1 2.갱도2  \n>>")
            if cmd == "2" and status == 0:
                print("2번 갱도문이 잠겨있다. 아직은 갈 수 없을 것 같다.")
                time.sleep(2)
                continue
            elif cmd == '1' or cmd == '2' or cmd == '3':
                return cmd
            else:
                print("잘못 입력했다. 숫자를 입력하고 Enter")
                time.sleep(1.5)
                os.system("cls")

def explore(status = 0):
    choice("explore")


def run():
    status = 0 #갱도나 다른 장소에 들어갈 수 있는 지 없는 지 판단을 위한 변수
    turn = 0 #지나간 일 수
    tired = 0 #힘듦 수치
    while True:
        command = choice("start")
        print(command)
        if command == '1':
            tired -=2
            if tired <0:
                tired = 0
            turn += 1
            print("몸이 좀 가벼워진 것 같다.")
            time.sleep(1)
            os.system("cls")
        elif command == '2':
            if tired > 10:
                turn +=3
                print("너무 지친다,, 잠시 쉬어야 할 것 같아...")
                time.sleep(2)
                print("힘듦 수치가 10을 넘으면 플레이어가 쓰러진 상태로 3일이 지나갑니다.")
                time.sleep(2)
                os.system("cls")
                tired -=3
            else:
                tired +=1
                os.system("cls")
                explore(status)
                os.system("cls")
        elif command == '3':
            os.system('cls')
            print(f"동굴에 들어온 지 {turn}일, 힘듦 수치: {tired}")


if __name__ == "__main__":
    run()

 

2.코드설명

스토리의 시작인 start 함수는 크게 달라진 점은 없고 빠른 진행을 위해 2번 갱도까지만 있다는 설정으로 바꿔주었습니다.

 

run()

def run():
    status = 0 #갱도나 다른 장소에 들어갈 수 있는 지 없는 지 판단을 위한 변수
    turn = 0 #지나간 일 수
    tired = 0 #힘듦 수치
    while True:
        command = choice("start")
        print(command)
        if command == '1':
            tired -=2
            if tired <0:
                tired = 0
            turn += 1
            print("몸이 좀 가벼워진 것 같다.")
            time.sleep(1)
            os.system("cls")
        elif command == '2':
            if tired > 10:
                turn +=3
                print("너무 지친다,, 잠시 쉬어야 할 것 같아...")
                time.sleep(2)
                print("힘듦 수치가 10을 넘으면 플레이어가 쓰러진 상태로 3일이 지나갑니다.")
                time.sleep(2)
                os.system("cls")
                tired -=3
            else:
                tired +=1
                os.system("cls")
                explore(status)
                os.system("cls")
        elif command == '3':
            os.system('cls')
            print(f"동굴에 들어온 지 {turn}일, 힘듦 수치: {tired}")

run함수는 함수들을 모아 게임을 진행하는 함수입니다. 

일정 턴을 버티면 승리하는 조건이므로 지나간 일 수를 확인하는 변수(turn)

status: 플레이어가 탐험한 정도를 구분하기 위해 만들어준 임시 변수로 처음부터 갱도2에 갈 수 없도록 한다거나, 특정 아이템을 얻었다는 것을 확인하기 위해 넣어주었습니다.

tired: 플레이어가 진행을 하는데 난이도를 부여하기 위해 힘듦 수치를 만들었습니다. 쉬지않고 탐험만 하면 쓰러져서 아무 것도 못하고 시간이 지나게 됩니다. 시간이 지날 수록 몬스터등이 강해지므로 불리해집니다.

매 턴마다 플레이어는 어떤 행동을 할지 선택하게 되는데 이를 choice함수를 이용하여 선택할 수 있도록 해주었습니다.

 

choice()

def choice(scene, status=0):
    while(True):
        if scene == "start":
            cmd = input("무엇을 할까? 1.쉰다 2.탐험한다. 3.상태 \n>>")
            if cmd == '1' or cmd == '2' or cmd == '3':
                return cmd
            else:
                print("잘못 입력했다. 숫자를 입력하고 Enter")
                time.sleep(1.5)
                os.system("cls")
        elif scene == "explore":
            cmd = input("어디로 갈까? 1.갱도1 2.갱도2  \n>>")
            if cmd == "2" and status == 0:
                print("2번 갱도문이 잠겨있다. 아직은 갈 수 없을 것 같다.")
                time.sleep(2)
                continue
            elif cmd == '1' or cmd == '2' or cmd == '3':
                return cmd
            else:
                print("잘못 입력했다. 숫자를 입력하고 Enter")
                time.sleep(1.5)
                os.system("cls")

choice함수는 매개변수를 이용하여 현재 플레이어가 있는 위치에 따라 여러 선택지를 주는 형태로 만들었습니다. 숫자를입력하고 enter키를 누르면 해당 단어/문장을 선택하게 됩니다.

 

explore()

이 함수는 갱도 탐험을 할 때 사용할 함수입니다. 현재 진행중이기 때문에 다음에 설명하도록 하겠습니다.

 

 

 

 

 

반응형
Dvlp.Jun