# 文字冒險遊戲簡報 ## 🎯 專案目標 - 學習如何運用 **條件判斷** 和 **循環** 控制程式流程。 - 熟悉 **函式** 的使用。 - 體驗 **隨機** 事件的程式設計,增強遊戲趣味性。 --- ## 📝 專案簡介 這是一個互動式的文字冒險遊戲。玩家需要面對隨機事件,包括戰鬥、探索、購物等,並且管理角色的血量、飽食度和金幣來生存更長的時間。 --- ## 🛠️ 實作流程 ### 1. 初始化遊戲狀態 #### 角色的屬性 - **金幣(money):** 用於交易。 - **血量(HP):** 如果降到 0,遊戲結束。 - **攻擊力(ATK):** 用於戰鬥。 - **飽食度(saturation):** 過低會影響恢復效果,降到0時,遊戲結束。 ```python= money, HP, ATK, saturation, day = 10, 10, 1, 10, 0 ``` #### 隨機的種子碼 ```python= random.seed() ``` #### 什麼是種子碼? [種子碼 (Seed) 的簡單講解](/@IllusionaryNight/種子碼的簡單講解) **注意** 使用亂數時需要在程式檔案最上面加入random模組 ```python= import random ``` [導入模組 (import) 的簡單講解](/@IllusionaryNight/導入模組的簡單講解) --- ### 2. 每天循環流程 每天都會執行以下四種事件: 1. 進行**冒險**(例如戰鬥或遇到商人) 2. 檢查角色是否**存活**(HP 和飽食度)。 3. 夜晚**恢復**狀態,根據飽食度影響恢復效果。 4. 詢問玩家**是否繼續**冒險。 ```python= while(1): day=day+1 print(f"第{day}天") # 開始每日冒險流程 # 判斷角色是否血量歸零 # 判斷角色是否餓死 # 回血 # 詢問是否繼續冒險 ``` --- ### 3. 夜晚邏輯 在一天結束時: - 飽食度減少。 - 根據飽食度影響血量恢復。 ```python= saturation-=1 if saturation <= 3: print("餓的睡不好,HP+1") HP += 1 else: print("一覺好眠,HP+3") HP += 3 ``` --- ### 4. 結束條件 當以下條件成立時,遊戲結束: - 血量 ≤ 0:角色因傷勢死亡。 - 飽食度 ≤ 0:角色餓死。 ```python= if HP <= 0: print("你因致命傷而死...遊戲結束") break if saturation <= 0: print("你死於飢餓...遊戲結束") break ``` --- ### 5. 隨機事件設計 使用 `random` 模組產生隨機數,並用 `match-case` 來決定觸發的事件。 隨機範例: ```python= encounter=random.randint(1,4) ``` 這個代表隨機賦予變數encounter 1到4的正整數(包含1和4) 配對範例: ```python= match encounter: case 1: print("遇到野獸") case 2: print("找到寶物") case 3: print("遇到商人") case _: print("什麼都沒發生") ``` 這個代表將變數encounter與不同數值進行比對,如果有相同的話執行該情況的事件,如果全都不符合的話則執行第八行條件寫底線(\_)的事件。 還有,如果要在函式中改變函式外的變數的話需要使用 `global` 這個語法。 全域範例: ```python= x = 10 # 這是全域變數 def my_function(): global x # 宣告 x 是全域變數 x = 5 # 直接修改全域變數 x print("函數內部的 x:", x) # 5 my_function() print("函數外部的 x:", x) # 5 ``` [全域變數 (global) 的簡單講解](/@IllusionaryNight/全域變數的簡單講解) #### 進行冒險 ```python= def adventure(): # 主冒險流程函式,隨機決定事件類型 global HP, saturation print("跋山涉水中...") encounter = random.randint(1, 4) # 隨機選擇事件類型 match encounter: case 1: fightEnemy() # 遇敵戰鬥 case 2: luckyFound() # 發現好東西 case 3: travel() # 長途跋涉 case 4: merchantEncounter() # 遇到商人 ``` #### 幸運事件 玩家可能撿到武器、食物或金幣。 ```python= def luckyFound(): global money, ATK, saturation event = random.randint(1, 3) match event: case 1: print("你撿到了一把長劍!攻擊力+1") ATK += 1 case 2: print("你發現了一堆麵包!飽食度+10") saturation += 10 case 3: print("你找到了一箱金幣!金幣+10") money += 10 ``` #### 戰鬥事件 讓玩家選擇戰鬥或逃跑: - 戰鬥:根據攻擊力與敵人屬性決定勝負。 - 逃跑:損失一定血量。 ```python= def fightEnemy(): global HP, ATK enemy_attack = random.randint(1, 5) enemy_health = random.randint(3, 8) action = input("選擇行動:戰鬥(1) 或 逃跑(2):") if action == "1": # 戰鬥過程 elif action == "2": # 逃跑處罰 ``` --- ## 🧩 延伸挑戰 學員可以選擇以下方式改進遊戲: 1. **新增道具系統:** 玩家可以使用特定物品來恢復血量或飽食度。 :::spoiler 例如說開一個儲存補血藥的變數(int),並在每天夜晚來臨時詢問玩家要不要使用補血藥。 ::: 2. **新增故事情節:** 添加 NPC 對話或任務系統。 :::spoiler 例如說加入一個神祕老人,在隨機事件時有可能會隨機出現,他每次出現時會隨機說出一些話,這可以使用==if else==搭配==random==兩者來製作。 ::: 3. **改變難度:** 通過設計更多種屬性或加強敵人強度來增加挑戰性。 :::spoiler 例如可以設計厄運值,在隨機事件時,把事件難度由小到大放置,假設有六個事件,將隨機數值(1到6)加上厄運值,使選到困難事件的機率上升。 :::