250715 [ Day 7 ] - Python (4)

TaeHyun·2025년 7월 15일

TIL

목록 보기
7/182

시작하며

오늘은 지금까지 배운 내용을 바탕으로 미니 프로젝트를 진행했다.
프로젝트 주제는 텍스트 기반 미니 게임 만들기였다.
일주일 동안 던전에서 생존하는 게임으로, 각종 이벤트를 통해 아이템을 얻고 (예/아니오) 선택에 따라 진행 루트가 달라지는 방식의 게임을 만들어 보았다.
엔딩 부분에는 던전 탐험을 통해 얻은 아이템과 남은 체력에 따라 점수와 티어가 부여된다.

Project

# 초기 상태 설정
player_name = input("당신의 이름은 무엇입니까? ")
hp = 100
inventory = []

print(f"{player_name}님, 일주일간 던전 생존기에 오신 걸 환영합니다!")
print(f"초기 체력: {hp}")
print("")

# 1일차 (월요일) [ 빵 ]
print("[월요일] 던전에 들어와 '빵'을 발견했습니다.")
eat_bread = input("'빵'을 먹겠습니까? (예/아니오): ")
if eat_bread == "예":
    hp += 10
    print("'빵'을 먹고 힘이 납니다! (체력 +10)")
    inventory.append("빵")
    print(f"보유 아이템 {inventory}")
else:
    hp -= 10
    print("배가고파 기운이 빠집니다... (체력 -10)")

if hp > 0:
    print(f"현재 체력: {hp}")
    print("")

# 2일차 (화요일) [ 독버섯 ]
if hp > 0:
    print("[화요일] '독버섯'이 널려있는 방에 도착했습니다.")
    mushroom = input("'독버섯'을 피해가겠습니까? (예/아니오): ")
    if mushroom == "예":
        print("현명한 선택입니다!")
    else:
        hp -= 30
        print("'독버섯'을 먹고 배탈이 났습니다... (체력 -30)")

    if hp > 0:
        print(f"현재 체력: {hp}")
        print("")

# 3일차 (수요일) [ 상자 ]
if hp > 0:
    print("[수요일] 방 한가운데 놓여있는 '상자'를 발견했습니다.")
    treasure_chest = input("'상자'를 열어보시겠습니까? (예/아니오)")
    if treasure_chest == "예":
        print("'상자'에서 '검'을 발견했습니다!")
        inventory.append("검")
        print(f"보유 아이템 {inventory}")
    else:
        print("수상한 '상자'를 뒤로하고 지나갑니다.")

    if hp > 0:
        print(f"현재 체력: {hp}")
        print("")

# 4일차 (목요일) [ 덩굴 ]

if hp > 0:
    print("[목요일] 미로의 끝에 다다랐을 때, 덩굴이 길을 막고있습니다.")
    vine = input("덩굴을 뚫고 지나가겠습니까? (예/아니오)")
    if vine == "예":
        if "검" in inventory:
            print("'검'을 사용해서 쉽게 덩굴을 지나왔습니다!")
        else:
            hp -= 20
            print("덩굴에 숨겨져 있던 가시에 찔려 부상을 당했습니다... (체력 -20)")
    else:
        hp -= 10
        print("덩굴 피해 돌아가느라 체력을 소비했습니다... (체력 -10)")

    if hp > 0:
        print(f"현재 체력: {hp}")
        print("")

# 5일차 (금요일) [ 수상한 버튼, 몬스터 ]

if hp > 0:
    print("[금요일] 미로를 지나 도달한 방에서 '매우' 수상해 보이는 버튼을 발겼했습니다.")
    button = input("버튼을 누르시겠습니까? (예/아니오)")
    if button == "예":
        hp -= 30
        print("버튼을 누르자 함정이 발동하여 피해를 입었습니다... (체력 -30)")
    else:
        print("방의 출구 바닥에 떨어져 있는 '수상한 돌'을 획득했습니다!")
        inventory.append("수상한 돌")
        print(f"보유 아이템 {inventory}")
    
    if hp > 0:
        print(f"현재 체력: {hp}")
        print("")

if hp > 0:
    print("[금요일] 많은 함정과 미로를 지나 '몬스터'와 마주했습니다.")
    monster = input("'몬스터'를 처치하시겠습니까? (예/아니오)")
    if monster == "예":
        if "검" in inventory:
            print("'몬스터'를 처치 후 '열쇠'를 획득했습니다!")
            inventory.append("열쇠")
            print(f"보유 아이템 {inventory}")
        else:
            hp -= 40
            print("힘겹게 '몬스터'를 처치하였지만 큰 피해를 입었습니다... (체력 -40)")
            if hp <= 0:
                print("'몬스터'에게 당해 사망하였습니다...")
            else:
                print("'몬스터'를 처치 후 '열쇠'를 획득했습니다!")
                inventory.append("열쇠")
                print(f"보유 아이템 {inventory}")
    else:
        hp -= 10
        print("도망가던 중 '몬스터'의 공격에 당해 약간의 피해를 입었습니다... (체력 -10)")

if hp > 0:
    print(f"현재 체력: {hp}")
    print("")

# 6일차 (토요일) [ 수상한 상인 ]

if hp > 0:
    print("[토요일] '수상한 상인'을 만났습니다.")
    store = input("'수상한 상인'과 거래를 하시겠습니까? (예/아니오)")
    if store == "예":
        if "검" in inventory:
            if "수상한 돌" in inventory:
                hp += 30
                print("'수상한 돌'과 '방패'를 교환하였습니다! (체력 +30)")
                inventory.remove("수상한 돌")
                inventory.append("방패")
                print(f"보유 아이템 {inventory}")
            else:
                hp += 10
                print("잡다한 아이템을 팔아 물약을 구매하였습니다! (체력 +10)")
        elif "수상한 돌" in inventory:
            hp += 20
            print("'수상한 돌'과 '마법 지팡이'를 교환하였습니다! (체력 +20)")
            inventory.remove("수상한 돌")
            inventory.append("마법 지팡이")
            print(f"보유 아이템 {inventory}")
        else:
            hp += 10
            print("잡다한 아이템을 팔아 물약을 구매하였습니다! (체력 +10)")
    else:
        print("'수상한 상인'을 지나쳐 계속 던전을 탐험합니다.")
    
    if hp > 0:
        print(f"현재 체력: {hp}")
        print("")

# 7일차 (일요일) [ 비밀스러운 문, 용 ]

if hp > 0:
    print("[일요일] '던전의 끝'에 도착하니 '비밀스러운 문'이 있습니다.")
    door = input("'비밀스러운 문'을 여시겠습니까? (예/아니오)")
    if door == "예":
        if "열쇠" in inventory:
            print("'열쇠'를 사용해 문을 열고 들어갔습니다!")
            inventory.remove("열쇠")
            print(f"보유 아이템 {inventory}")
            print("")
            print("'비밀스러운 문'속에서 '보물 상자'를 지키는 '용'을 발견했습니다.")
            dragon = input("'보물 상자'를 얻기 위해 '용'을 처치하시겠습니까? (예/아니오)")
            if dragon == "예":
                if "검" in inventory:
                    hp -= 50
                    print("'용'의 공격에 큰 피해를 입었지만,'검'을 사용해 처치 성공!! (체력 -50)")
                    print("'보물 상자'속에서 '보물'을 획득하였습니다!")
                    inventory.append("보물")
                    print(f"보유 아이템 {inventory}")
                elif "마법 지팡이" in inventory:
                    hp -= 30
                    print("'용'의 공격에 약간의 피해를 입었지만, '마법 지팡이'를 사용해 처치 성공!! (체력 -30)")
                    print("'보물 상자'속에서 '보물'을 획득하였습니다!")
                    inventory.append("보물")
                    print(f"보유 아이템 {inventory}")
                else:
                    hp -= 100
                    print("무기가 없어 '용'처치에 실패 하여 매우 큰 피해를 입었습니다... (체력 -100)")
            else:
                print("'용'을 피해 도망쳐 무사히 탈출하였습니다!")
        else:
            print("'열쇠'가 없어 '비밀스러운 문'을 열지 못하고 탈출하였습니다!")
    else:
        print("'비밀스러운 문'을 뒤로한 체 탈출하였습니다!")

# 최종 점수 계산

score = 0

if "보물" in inventory:
    score += 5000
if "검" in inventory:
    score += 2000
if "마법 지팡이" in inventory:
    score += 5000
if "방패" in inventory:
    score += 1000
if "수상한 돌" in inventory:
    score += 300
if "열쇠" in inventory:
    score += 300
if "빵" in inventory:
    score += 200

if hp >= 90 :
    score += 2000    
elif hp >= 80:
    score += 1000    
elif hp >= 70:
    score += 500
elif hp <= 0:
    score = 0

if score >= 10000:
    score_tier = "SS"
elif score >= 9000:
    score_tier = "S"
elif score >= 8000:
    score_tier = "A"
elif score >= 5000:
    score_tier = "B"
elif score >= 3000:
    score_tier = "C"
else:
    score_tier = "F"
    
# 최종 문구 출력

if hp < 0:
    hp = 0

print(f"""
[ 최종 정보 ]

이름: {player_name}       
최종 체력: {hp}
최종 보유 아이템: {inventory}
최종 점수: {score} {score_tier}
""")

if hp > 0 and "보물" in inventory:
    print(f"{player_name}님, 클리어를 축하드립니다!! (히든 엔딩)")
elif hp > 0:
    print(f"{player_name}님, 클리어를 축하드립니다! (노말 엔딩)")
else:
    print("😢 체력이 바닥나 쓰러졌습니다. 게임 오버")  

마치며

처음으로 진행해보는 프로젝트였는데, 코드를 작성하는 것보다 다양한 이벤트를 구상하고 배치하는 등의 기획이 상당히 오래 걸리고 힘든 과정이라는 것을 배웠다.
머릿속으로 그렸던 이미지가 실제로 구현되는 부분이 정말 재밌었다.

profile
Hello I'm TaeHyunAn, Currently Studying Data Analysis

0개의 댓글