- ⏳ 课程时长: 90 分钟
- 🎯 教学目标:
- 🧩 综合应用:把
if、while、random、time结合在一起。 - 🎮 游戏逻辑:设计回合制战斗系统(你一下,我一下)。
- 🩸 状态管理:用变量记录血量 (HP) 和药水数量。
- 🎬 交互体验:利用
time.sleep营造紧张的战斗节奏。
- 🧩 综合应用:把
📖 课程内容
1. 🗺️ 游戏设计蓝图 (15 分钟)
在写代码之前,优秀的程序员都会先在脑子里(或纸上)画出设计图。
-
角色:
- 🦸♂️ 勇者 (你): 初始血量 100,攻击力 15-25,有 3 瓶药水。
- 🐉 恶龙 (敌人): 初始血量 150,攻击力 10-35 (虽然攻击高,但有时候会打偏)。
-
回合流程 (Loop):
- 显示当前状态(双方血量)。
- 勇者行动: 选择攻击 ⚔️ 或 吃药 💊。
- 判断胜负: 如果龙死了,勇者赢;如果勇者死了,游戏结束。
- 恶龙行动: 随机攻击勇者。
- 回到第一步,循环继续…
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 分钟)
恭喜你!你刚刚完成了一个真正的软件工程!🏗️
- State (状态):我们用变量 (
hp,potions) 记录了游戏的实时变化。 - Loop (循环):
while True构成了游戏的主引擎。 - Logic (逻辑):
if/else决定了战斗的胜负和流程。 - UX (体验):
sleep和random让游戏变得好玩。
🏠 课后作业 (5 分钟)
请给你的游戏添加一个“逃跑”功能:
- 在菜单里增加选项:
3. 🏃 逃跑。 - 玩家选择逃跑时,生成一个随机数。
- 有 30% 的概率逃跑成功(打印“溜了溜了”,并
break结束游戏)。 - 有 70% 的概率逃跑失败(打印“被恶龙拦住了!”,并且跳过这一回合,直接轮到恶龙攻击)。
下节课预告: 我们现在的游戏数据是存在内存里的,一关机就没了。 如果我想做一个“排行榜”,把高分记录永久保存下来,或者把游戏的文字剧情存在一个文本文件里呢? 下节课,我们将学习“文件的读写 – File I/O”!💾📝
勇士们,保存好你的代码,下次见!👋
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)