• ⏳ 课程时长: 90 分钟
  • 🎯 教学目标:
    • 🧩 综合应用:把 ifwhilerandomtime 结合在一起。
    • 🎮 游戏逻辑:设计回合制战斗系统(你一下,我一下)。
    • 🩸 状态管理:用变量记录血量 (HP) 和药水数量。
    • 🎬 交互体验:利用 time.sleep 营造紧张的战斗节奏。

📖 课程内容

1. 🗺️ 游戏设计蓝图 (15 分钟)

在写代码之前,优秀的程序员都会先在脑子里(或纸上)画出设计图。

  • 角色:

    • 🦸‍♂️ 勇者 (你): 初始血量 100,攻击力 15-25,有 3 瓶药水。
    • 🐉 恶龙 (敌人): 初始血量 150,攻击力 10-35 (虽然攻击高,但有时候会打偏)。
  • 回合流程 (Loop):

    1. 显示当前状态(双方血量)。
    2. 勇者行动: 选择攻击 ⚔️ 或 吃药 💊。
    3. 判断胜负: 如果龙死了,勇者赢;如果勇者死了,游戏结束。
    4. 恶龙行动: 随机攻击勇者。
    5. 回到第一步,循环继续…

2. 🛠️ 第一步:搭建舞台 (10 分钟)

首先,我们需要导入工具箱,并设置好初始数据。

import random # 用来产生随机伤害
import time   # 用来控制战斗节奏

# --- 游戏初始化 ---
print("🔥 恶龙觉醒了!勇者,拔剑吧!🔥")
time.sleep(1)

# 勇者属性
hero_hp = 100
hero_potions = 3

# 恶龙属性
dragon_hp = 150

print(f"你的血量: {hero_hp} | 药水: {hero_potions}")
print(f"恶龙血量: {dragon_hp}")
print("-" * 30)

3. ⚔️ 第二步:战斗循环 (25 分钟)

这是游戏的核心引擎。只要双方都活着,战斗就要继续!

while True:
    # --- 1. 勇者的回合 ---
    print("\n👉 轮到你了!请选择行动:")
    print("1. ⚔️ 攻击")
    print("2. 💊 吃药 (恢复 30 血)")
    choice = input("请输入 1 或 2: ")

    if choice == '1':
        # 随机伤害 15 到 25
        dmg = random.randint(15, 25)
        dragon_hp = dragon_hp - dmg
        print(f"🗡️ 你挥剑砍向恶龙,造成了 {dmg} 点伤害!")

    elif choice == '2':
        if hero_potions > 0:
            hero_hp = hero_hp + 30
            hero_potions = hero_potions - 1
            print(f"✨ 咕嘟咕嘟...血量恢复了!剩余药水: {hero_potions}")
        else:
            print("🚫 药水用光了!你只能干瞪眼!")

    else:
        print("😵 你因为紧张手滑了,浪费了一个回合!")

    # 营造紧张感
    time.sleep(1) 

    # --- 2. 判断恶龙是否挂了 ---
    if dragon_hp <= 0:
        print("\n🎉 恶龙哀嚎一声,倒下了!")
        print("🏆 勇者胜利!世界和平了!")
        break # 结束循环,游戏结束

    # --- 3. 恶龙的回合 ---
    print("\n🐲 恶龙咆哮着冲过来了...")
    time.sleep(1.5) # 悬念时刻

    # 恶龙反击 (随机伤害 10 到 35)
    dragon_dmg = random.randint(10, 35)
    hero_hp = hero_hp - dragon_dmg
    print(f"🔥 恶龙喷出烈焰,你受到了 {dragon_dmg} 点伤害!")

    # --- 4. 判断勇者是否挂了 ---
    if hero_hp <= 0:
        print("\n💀 视野变黑了...")
        print("你被恶龙击败了。游戏结束。")
        break # 结束循环

    # --- 5. 显示当前状态 ---
    print("-" * 30)
    print(f"勇者 HP: {hero_hp} | 恶龙 HP: {dragon_hp}")

4. 🎨 第三步:优化体验 (15 分钟)

现在的游戏能玩了,但我们还可以加点“调料”,让它更有趣!

  • 暴击系统: 攻击时,有一定概率造成双倍伤害!

    # 修改勇者攻击部分
    dmg = random.randint(15, 25)
    # 扔个骰子,如果扔到 10 (1/10的概率),触发暴击
    crit = random.randint(1, 10) 
    
    if crit == 10:
        dmg = dmg * 2
        print(f"⚡️ 暴击!!!你造成了 {dmg} 点巨额伤害!")
    else:
        print(f"🗡️ 你挥剑砍向恶龙,造成了 {dmg} 点伤害!")
  • 恶龙打偏: 恶龙有时候会打不中你。

    # 修改恶龙攻击部分
    miss = random.randint(1, 5) # 1/5 的概率打偏
    if miss == 1:
        print("💨 恶龙这一爪子挥空了!你毫发无伤!")
    else:
        # (原本的扣血代码放这里)
        pass 

5. 🕹️ 完整试玩与调试 (20 分钟)

让学生把代码整合在一起,运行游戏!

  • 调试 (Debug):
    • 如果我一直吃药,血量会不会超过 100?(现在的代码会的,怎么修复?)
    • 如果输入 ‘3’ 会发生什么?(会浪费回合,这是我们设计的逻辑,没问题)

💪 课堂大练兵 (5 分钟)

给你的游戏起个名字,并在游戏开始时,让玩家输入自己的名字。 hero_name = input("请输入勇者的大名: ") 然后把代码里所有的“勇者”替换成 hero_name


📝 课程总结 (5 分钟)

恭喜你!你刚刚完成了一个真正的软件工程!🏗️

  1. State (状态):我们用变量 (hp, potions) 记录了游戏的实时变化。
  2. Loop (循环)while True 构成了游戏的主引擎。
  3. Logic (逻辑)if/else 决定了战斗的胜负和流程。
  4. UX (体验)sleeprandom 让游戏变得好玩。

🏠 课后作业 (5 分钟)

请给你的游戏添加一个“逃跑”功能:

  1. 在菜单里增加选项:3. 🏃 逃跑
  2. 玩家选择逃跑时,生成一个随机数。
  3. 30% 的概率逃跑成功(打印“溜了溜了”,并 break 结束游戏)。
  4. 70% 的概率逃跑失败(打印“被恶龙拦住了!”,并且跳过这一回合,直接轮到恶龙攻击)。

下节课预告: 我们现在的游戏数据是存在内存里的,一关机就没了。 如果我想做一个“排行榜”,把高分记录永久保存下来,或者把游戏的文字剧情存在一个文本文件里呢? 下节课,我们将学习“文件的读写 – File I/O”!💾📝

勇士们,保存好你的代码,下次见!👋

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。