# ==========================================
# 🎮 少年侠客闯江湖 - 第 5 课
# 📚 本课知识点:列表 list(append/pop/in/遍历/len)
# ==========================================
import random
# --- 前面课程的代码 ---
print("=" * 40)
print(" ⚔️ 少年侠客闯江湖 ⚔️")
print("=" * 40)
name = input("\n少年侠客,请赐名:")
hp = 100
attack = 15
silver = 0
battles_won = 0
# TODO: 创建一个空背包(列表)
# 提示:backpack = []
print(f"\n少年侠客【{name}】,踏入了江湖...")
# 路线选择
print("\n前方出现三条路:")
print(" 1. 🏔️ 忘忧山 2. 🐉 龙王洞 3. 👻 幽灵峰")
choice = input("请选择路线(1/2/3):")
if choice == "1":
route_name = "忘忧山"
elif choice == "2":
route_name = "龙王洞"
elif choice == "3":
route_name = "幽灵峰"
else:
route_name = "忘忧山"
print(f"\n{name}踏上了{route_name}...")
# 3 次遭遇
for i in range(3):
print(f"\n--- 第 {i + 1} 次遭遇 ---")
encounter = random.choice(["妖怪", "仙人"])
if encounter == "妖怪":
monster_name = random.choice(["狐妖", "山魅", "影蛇"])
monster_hp = random.randint(20, 40)
monster_attack = random.randint(5, 12)
monster_silver = random.randint(8, 15)
print(f"⚔️ 遇到{monster_name}!")
while hp > 0 and monster_hp > 0:
damage = random.randint(5, attack)
monster_hp -= damage
print(f"💥 攻击!伤害 {damage},{monster_name}剩余 {max(monster_hp, 0)}")
if monster_hp <= 0:
break
m_damage = random.randint(3, monster_attack)
hp -= m_damage
print(f"👹 反击!伤害 {m_damage},{name}剩余 {max(hp, 0)}")
if hp > 0:
silver += monster_silver
battles_won += 1
print(f"🎉 击败{monster_name}!+{monster_silver} 银两")
# TODO: 战斗胜利后随机掉落道具加入背包
# 提示:item = random.choice(["灵芝", "金创药", None])
# if item: backpack.append(item)
else:
print(f"💀 落败了...")
break
else:
npc_name = random.choice(["白胡老者", "书生"])
riddles = [("什么东西越长越短?", "蜡烛"), ("四面都是山,中间有个田", "画")]
riddle, answer = random.choice(riddles)
print(f"🧙 遇到{npc_name}!谜语:"{riddle}"")
if input("答案:") == answer:
silver += 15
print("✨ 答对!+15 银两")
else:
silver += 3
print(f"😊 答错了,答案是"{answer}"。+3 银两")
# TODO: 冒险结束后展示背包内容
# 提示:for item in backpack: print(f" · {item}")
print(f"\n🏁 冒险结束!生命值:{max(hp,0)} 银两:{silver} 胜利:{battles_won}次")
# ==========================================
# 🎮 少年侠客闯江湖 - 第 5 课(参考答案)
# 📚 本课知识点:列表 list(append/pop/in/遍历/len)
# ⚠️ 这是参考答案,请先让孩子自己尝试!
# ==========================================
import random
# --- 开场 ---
print("=" * 40)
print(" ⚔️ 少年侠客闯江湖 ⚔️")
print("=" * 40)
name = input("\n少年侠客,请赐名:")
hp = 100
attack = 15
silver = 0
battles_won = 0
backpack = [] # 空背包(列表)
print(f"\n少年侠客【{name}】,踏入了江湖...")
# --- 路线选择 ---
print("\n前方出现三条路:")
print(" 1. 🏔️ 忘忧山 2. 🐉 龙王洞 3. 👻 幽灵峰")
choice = input("请选择路线(1/2/3):")
route_name = {"1": "忘忧山", "2": "龙王洞", "3": "幽灵峰"}.get(choice, "忘忧山")
print(f"\n{name}踏上了{route_name}...")
# --- 3 次遭遇 ---
for i in range(3):
print(f"\n{'=' * 35}")
print(f" 第 {i + 1} 次遭遇")
encounter = random.choice(["妖怪", "仙人"])
if encounter == "妖怪":
monster_name = random.choice(["狐妖", "山魅", "影蛇", "火鸦"])
monster_hp = random.randint(20, 40)
monster_attack = random.randint(5, 12)
monster_silver = random.randint(8, 15)
drop_items = ["灵芝", "金创药", "狐妖尾毛", None, None]
print(f"\n⚔️ 遇到{monster_name}!生命 {monster_hp} 攻击 {monster_attack}")
while hp > 0 and monster_hp > 0:
damage = random.randint(5, attack)
monster_hp -= damage
print(f"💥 攻击!伤害 {damage},{monster_name}剩余 {max(monster_hp, 0)}")
if monster_hp <= 0:
break
m_damage = random.randint(3, monster_attack)
hp -= m_damage
print(f"👹 反击!伤害 {m_damage},{name}剩余 {max(hp, 0)}")
if hp > 0:
silver += monster_silver
battles_won += 1
print(f"🎉 击败{monster_name}!+{monster_silver} 银两")
# 掉落道具
item = random.choice(drop_items)
if item is not None:
if len(backpack) < 10:
backpack.append(item)
print(f"🎁 获得道具:{item}!")
else:
print(f"🎒 背包已满,{item}掉落在地上...")
else:
print(f"💀 {name}落败了...")
break
else:
npc_name = random.choice(["白胡老者", "书生", "铁匠"])
riddles = [
("什么东西越长越短?", "蜡烛"),
("四面都是山,中间有个田", "画"),
("千锤百炼出深山,烈火焚烧也等闲", "石灰"),
]
riddle, answer = random.choice(riddles)
print(f"\n🧙 遇到{npc_name}!")
print(f" "{riddle}"")
player_answer = input("你的答案是:")
if player_answer == answer:
silver += 15
print(f"✨ 答对!+15 银两")
else:
silver += 3
print(f"😊 答错了,答案是"{answer}"。+3 银两")
# --- 冒险结算 ---
print(f"\n{'=' * 40}")
print(f" 🏁 冒险结束!")
print(f" 生命值:{max(hp, 0)} 银两:{silver} 胜利:{battles_won}次")
print(f"\n 🎒 背包({len(backpack)}/10):")
if backpack:
for item in backpack:
print(f" · {item}")
else:
print(" (空)")
print("=" * 40)