# L1-17《牛仔枪战》PPT 大纲

> 逐页详细 · 六关制 · 积木四步法 · 22-28页

---

## 第1页 · 封面
**布局：** 上方标题栏 + 中央主视觉(两个牛仔对决插图) + 下方课程序号条
**文字：**
- 标题：LEVEL·1 / LESSON 17 / **牛仔枪战** 🤠
- 副标题：西部对决！双人枪战游戏！
- 底部条：温故知新(L1-16黄金矿工/方向变量/"或"条件/画笔)

---

## 第2页 · 温故知新
**布局：** 左半区"上次学了什么" + 右半区"这次要学什么"
**文字：**
- 左栏标题：📖 上次学了什么？(L1-16 黄金矿工)
  - 方向摆动：变量控制方向 + 两个「重复执行直到」接力
  - "或"条件：两个条件满足一个就能成立 ← 新积木
  - 画笔擦除：用背景色覆盖画线 = 局部擦除
  - 滑行到：能看到移动过程(复习L1-4)
- 右栏标题：🔮 这次要学什么？(L1-17 牛仔枪战)
  - 🆕 双人控制：WASD vs 方向键，两个角色各用各的按键
  - ♻️ 广播深入：发射子弹→广播→角色接收(第4次用广播！)
  - 🆕 子弹方向编码：约翰子弹向右(+x) / 泰格子弹向左(-x)
  - 🆕 击中判定+游戏结束：子弹碰到对方→停止+切换造型

---

## 第3页 · 故事导入
**布局：** 西部荒漠背景 + 两个牛仔对峙图 + 故事文字
**文字：**
- 🤠 西部小镇，烈日当空…
- 两个牛仔在街头相遇 ——
- 约翰："来吧！看看谁的枪更快！"
- 泰格："正合我意！"
- 砰！砰！砰！子弹在空中飞过…
- 🎮 今天我们要做一个「双人对战」游戏！
- 两个玩家，两个角色，各自控制、各自开枪！

---

## 第4页 · 功能分析
**布局：** 双角色功能拆解(左约翰/右泰格)
**文字：**
- 🤠 **约翰(玩家1)**：
  - W/S 上下移动
  - 按「空格」发射子弹(向右→)
  - 被泰格子弹击中→游戏结束
- 🤠 **泰格(玩家2)**：
  - ↑/↓ 上下移动
  - 按「/」发射子弹(向左←)
  - 被约翰子弹击中→游戏结束
- 💥 **子弹**：从角色位置发射→直线飞行→碰到对方→对方停止
- 🔈 **广播**：开枪→发广播→子弹接收→移动

---

## 第5页 · 认识关·标题页
**布局：** 关卡标题 + 四个新知识卡片
**文字：**
- 标题：🔍 认识关 —— 今天要认识四个新本领！
- 卡片1：双人控制方式 ← 新概念！
- 卡片2：广播实战深入 ← 第4次用广播
- 卡片3：子弹方向编码 ← 约翰向东/泰格向西
- 卡片4：击中判定与游戏结束 ← 胜负逻辑

---

## 第6页 · 认识关①-看一看：双人控制
**布局：** 双键盘示意图(左边WASD高亮/右边方向键高亮)
**文字：**
- 📺 看老师演示！两个角色怎么同时控制？
- 约翰(玩家1)：左手区域 → W(上) S(下) 空格(开枪)
- 泰格(玩家2)：右手区域 → ↑(上) ↓(下) /(开枪)
- 关键点：两个角色的脚本**互相独立**！
  - 约翰的绿旗脚本里只检测 W/S/空格
  - 泰格的绿旗脚本里只检测 ↑/↓//
- 为什么不能合并在一个脚本里？
  - 如果一个脚本同时检测所有按键→会很卡+容易冲突
  - 每个角色管自己的按键 → 互不干扰

---

## 第7页 · 认识关①-试一试：双人控制
**布局：** 左侧代码提示 + 右侧键盘操作区示意
**文字：**
- 🧪 你也来试试！
- 任务：让两个角色各自上下移动
- 约翰的脚本：
  ```
  重复执行
    如果 <按下 [W v] 键?> 那么 y增加(5)
    如果 <按下 [S v] 键?> 那么 y增加(-5)
  ```
- 泰格的脚本：(同样的结构，按键换成↑/↓)
- 试一试：两个人同时按键，会不会互相干扰？(不会！)

---

## 第8页 · 认识关①-讲一讲：双人控制原理
**布局：** 双脚本并行示意图
**文字：**
- 📐 双人控制的秘密 —— Scratch可以同时运行多个脚本！
- 原理：
  - 每个角色有自己的「当绿旗被点击」脚本
  - 两个角色的脚本同时运行，互不等待
  - 就像两个人同时在玩游戏，各管各的
- 按键分工口诀：
  - 玩家1：左手 WASD（键盘左边区域）
  - 玩家2：右手 方向键（键盘右边区域）
  - 两个手不会打架！
- 实战提醒：按空格的口诀——"约翰空格打右边，泰格斜杠打左边"
  (斜杠= `/` 键，在方向键附近方便按！)

---

## 第9页 · 认识关①-练一练：双人控制
**布局：** 填空+配对题
**文字：**
- ✏️ 练一练！
- 配对连线：
  - 约翰上移 · · W键
  - 约翰下移 · · S键
  - 约翰开枪 · · 空格
  - 泰格上移 · · ↑键
  - 泰格下移 · · ↓键
  - 泰格开枪 · · /键
- 填空：
  - 两个角色的脚本在同一个角色里还是分开的？____
  - 两个人同时按键会不会冲突？____ (不会/会)
  - 如果都按↑键，谁会动？____ (两个都会！)

---

## 第10页 · 认识关②-看一看：广播实战
**布局：** 广播流程图(约翰→广播→子弹1→移动)
**文字：**
- 📺 看老师演示！按下空格后发生了什么？
- 流程：
  1. 约翰按下空格 → 
  2. 广播"发射子弹1" → 
  3. 子弹1收到广播 → 
  4. 子弹1从约翰位置出现 → 
  5. 子弹1向右飞行 →
  6. 碰到泰格 → 泰格被击中！
- 📡 广播 = 对讲机
  - 约翰喊："发射子弹1！" 
  - 子弹1听到了 → 开始行动
  - 其他角色听到了 → 不理会(消息名不匹配)

---

## 第11页 · 认识关②-试一试+讲一讲：广播四连跳
**布局：** 四次广播课程回顾路径图
**文字：**
- 🧪+📐 广播四部曲 —— 这是你第4次用广播了！
- | 课程 | 用法 | 水平 |
  |------|------|------|
  | L1-5 射箭达人 | 箭发射→广播→靶子接收 | 🌱入门 |
  | L1-6/7 迷宫/钢琴 | 简单消息传递 | 🌿轻量使用 |
  | L1-10 魔术表演 | 多角色协同+多广播 | 🌳深入理解 |
  | L1-17 牛仔枪战 | 双人对战+双向广播 | 🎯实战应用 |
- 🆕 这次的新特点：
  - **双向广播**：约翰发→子弹1收 / 泰格发→子弹2收
  - **两个广播同时存在**：两个发射消息互不冲突
  - 击中后还要广播"游戏结束"→全角色停止

---

## 第12页 · 认识关②-练一练：广播实战
**布局：** 代码填空
**文字：**
- ✏️ 练一练！
- 完成约翰开枪的完整流程：
  1. 约翰按空格 → `广播 [____ v]`
  2. 子弹1接收到 → `移到 [____ v]` → `显示`
  3. 子弹1重复执行 → `将x增加 (____)` (正数向右)
  4. 子弹1碰到泰格 → `广播 [____ v]` → 通知泰格被击中了
  5. 泰格收到击中 → `切换造型为 [____ v]` → `停止 [____ v]`
- 想一想：如果约翰和泰格同时开枪，两个广播会冲突吗？(不会！消息名不同)

---

## 第13页 · 认识关③-看一看：子弹方向编码
**布局：** 对比图(左=约翰子弹向右 + 右=泰格子弹向左)
**文字：**
- 📺 看老师演示！两个子弹飞的方向不一样！
- 约翰的子弹 → 向右飞 `将x增加 (10)`
- 泰格的子弹 → 向左飞 `将x增加 (-10)`
- 为什么方向不同？
  - 约翰站在左边，子弹要打右边的泰格 → +x方向
  - 泰格站在右边，子弹要打左边的约翰 → -x方向
- 方向编码口诀：
  - 约翰 = ➡️正数 = 打右 = +10
  - 泰格 = ⬅️负数 = 打左 = -10
- ❌ 常见错误：两个子弹都用 +10 → 都往右飞 → 泰格的子弹打不到左边！

---

## 第14页 · 认识关③-试一试+讲一讲：子弹方向编码
**布局：** 代码对比(两个子弹脚本并排)
**文字：**
- 🧪+📐 子弹方向编码原理
- 子弹1(约翰的子弹)脚本核心：
  ```
  当接收到 [发射子弹1 v]
  移到 [约翰 v]
  显示
  重复执行直到 <碰到 [泰格 v] 或 <碰到 [边缘 v]>>
    将x增加 (10)  ← 正数=向右
  ```
- 子弹2(泰格的子弹)脚本核心：
  ```
  当接收到 [发射子弹2 v]
  移到 [泰格 v]
  显示
  重复执行直到 <碰到 [约翰 v] 或 <碰到 [边缘 v]>>
    将x增加 (-10)  ← 负数=向左
  ```
- 关键：子弹从哪个角色位置出发 → 决定了初始位置 → 方向也要对

---

## 第15页 · 认识关③-练一练：子弹方向编码
**布局：** 纠错题
**文字：**
- ✏️ 练一练！
- 纠错题：小明写的子弹脚本，两个子弹都用了`将x增加 (10)`。会有什么问题？
  - 答案：____
- 填空：
  1. 约翰子弹用 `将x增加 (____)` (填正数/负数)
  2. 泰格子弹用 `将x增加 (____)` (填正数/负数)
  3. 子弹出发时用 `移到 [____ v]` 定位到发射它的角色位置
- 挑战：如果两个角色交换位置(约翰在右/泰格在左)，子弹方向要改吗？____

---

## 第16页 · 认识关④-看一看+讲一讲：击中判定与游戏结束
**布局：** 击中演出流程图
**文字：**
- 📺+📐 击中判定与游戏结束
- 击中判定流程：
  1. 子弹碰到对方角色 → 
  2. `广播 [击中了 v]` →
  3. 被击中的角色收到 → 
     - `切换造型为 [倒下 v]`
     - `停止 [该角色的其他脚本 v]`（不能再移动了！）
  4. 发射子弹的角色 → 也收到 → 播放胜利音效+说"我赢了！"
- 🆕 新技巧：「停止该角色的其他脚本」精确停止
  - 不是「停止全部」——那会把对方也停了
  - 只停止自己被击中的这个角色的移动脚本
  - 对方还可以继续动(如果还没被击中)
- 额外：可以广播「游戏结束」→ 舞台收到 → 显示"XXX赢了！"

---

## 第17页 · 认识关④-练一练：击中判定
**布局：** 流程图填空
**文字：**
- ✏️ 练一练！
- 完成击中判定的流程：
  1. 子弹碰到对方 → 广播 `____`
  2. 被击中角色收到 → 切换 `____` → 用 `____` 积木停止自己移动
  3. 为什么不用「停止全部」？因为 ____
- 判断题：
  - 约翰被击中后还能移动。(____) ✅/❌
  - 泰格被击中后约翰还能动。(____) ✅/❌
  - 子弹碰到对方后自己也要删除/隐藏。(____) ✅/❌

---

## 第18页 · 认识关总结
**布局：** 四个概念回顾卡片
**文字：**
- ✅ 认识关四大本领，你掌握了吗？
  1. 双人控制：WASD vs 方向键，脚本独立不冲突
  2. 广播实战：双向广播(约翰发→子弹1收 / 泰格发→子弹2收)
  3. 子弹方向编码：约翰+10(右) / 泰格-10(左)
  4. 击中判定：碰到对方→广播→切换造型→停止自己
- 🎯 接下来进入编程关，来一场真正的牛仔对决！

---

## 第19页 · 编程关·标题页
**布局：** 关卡标题 + 七步路线图
**文字：**
- 标题：💻 编程关 —— 分七步搭建牛仔枪战
- 路线图：
  - Step1: 约翰移动 → Step2: 泰格移动 → Step3: 约翰开枪
  - Step4: 子弹1发射 → Step5: 泰格开枪 → Step6: 子弹2发射 → Step7: 背景音乐+游戏结束

---

## 第20页 · 编程关 Step1 —— 约翰移动(WASD)
**布局：** 左侧约翰角色 + 右侧代码块
**文字：**
- 🤠 Step1：约翰移动 —— W上S下，加宣战台词
- 代码：
  ```
  当绿旗被点击
  移到 x:(-180) y:(0)   // 站在左边
  说 [来吧！看看谁的枪更快！] (2) 秒
  重复执行
    如果 <按下 [W v] 键?> 那么
      将y增加 (5)
    如果 <按下 [S v] 键?> 那么
      将y增加 (-5)
    如果 <y > (150)> 那么  // 边界限制
      将y设为 (150)
    如果 <y < (-150)> 那么
      将y设为 (-150)
  ```
- 边界限制：防止角色跑出屏幕

---

## 第21页 · 编程关 Step2 —— 泰格移动(方向键)
**布局：** 右侧泰格角色 + 代码块
**文字：**
- 🤠 Step2：泰格移动 —— ↑上↓下，独立控制
- 代码：
  ```
  当绿旗被点击
  移到 x:(180) y:(0)   // 站在右边
  重复执行
    如果 <按下 [↑ v] 键?> 那么
      将y增加 (5)
    如果 <按下 [↓ v] 键?> 那么
      将y增加 (-5)
    如果 <y > (150)> 那么
      将y设为 (150)
    如果 <y < (-150)> 那么
      将y设为 (-150)
  ```
- 注意：泰格的脚本和约翰结构一样，但按键不同！
- 同样要加边界限制

---

## 第22页 · 编程关 Step3 —— 约翰开枪(广播)
**布局：** 约翰按空格 → 广播流程图
**文字：**
- 💥 Step3：约翰开枪 —— 按空格→广播发射子弹1
- 代码(放在约翰的脚本里，和移动脚本并列)：
  ```
  当绿旗被点击
  重复执行
    等待 <按下 [空格 v] 键?>
    广播 [发射子弹1 v]
    等待 (0.3) 秒  // 防止连发太快
  ```
- 要点：
  - 和移动脚本**分开写**(两个独立的绿旗脚本！)
  - 等待0.3秒 = 射击冷却时间 = 不能连发
  - 广播名字要和子弹接收的名字**完全一致**

---

## 第23页 · 编程关 Step4 —— 子弹1发射(向右+击中)
**布局：** 子弹角色代码块 + 飞行轨迹图
**文字：**
- 🔫 Step4：子弹1 —— 从约翰位置向右飞
- 子弹1角色的完整脚本：
  ```
  当绿旗被点击
  隐藏  // 初始隐藏
  
  当接收到 [发射子弹1 v]
  移到 [约翰 v]   // 从约翰位置出发
  显示
  重复执行直到 <<碰到 [泰格 v] ?> 或 <碰到 [边缘 v] ?>>
    将x增加 (10)  // 向右飞
  如果 <碰到 [泰格 v] ?> 那么
    广播 [泰格被击中 v]
  隐藏
  ```
- 🆕 用了"或"条件(复习L1-16！)：碰到泰格或边缘都停止
- 子弹飞出边缘→隐藏(打空了)
- 子弹碰到泰格→广播击中→然后隐藏

---

## 第24页 · 编程关 Step5 —— 泰格开枪(广播)
**布局：** 泰格按/键 → 广播流程图
**文字：**
- 💥 Step5：泰格开枪 —— 按/→广播发射子弹2
- 代码(放在泰格的脚本里)：
  ```
  当绿旗被点击
  重复执行
    等待 <按下 [/ v] 键?>
    广播 [发射子弹2 v]
    等待 (0.3) 秒
  ```
- 要点：
  - 按键是 `/` (斜杠键，在方向键附近，方便按！)
  - 也可以用数字键或其他键，但要和玩家2的手位匹配
  - 广播名字"发射子弹2"，和子弹1的"发射子弹1"不同！

---

## 第25页 · 编程关 Step6 —— 子弹2发射(向左+击中)
**布局：** 子弹2角色代码块(和子弹1对比)
**文字：**
- 🔫 Step6：子弹2 —— 从泰格位置向左飞
- 子弹2角色的完整脚本(和子弹1镜像！)：
  ```
  当绿旗被点击
  隐藏
  
  当接收到 [发射子弹2 v]
  移到 [泰格 v]
  显示
  重复执行直到 <<碰到 [约翰 v] ?> 或 <碰到 [边缘 v] ?>>
    将x增加 (-10)  ← 负数是向左！和子弹1相反！
  如果 <碰到 [约翰 v] ?> 那么
    广播 [约翰被击中 v]
  隐藏
  ```
- 🆚 对比子弹1和子弹2：
  - 子弹1：`移到约翰` / `+10`向右 / `碰到泰格`
  - 子弹2：`移到泰格` / `-10`向左 / `碰到约翰`

---

## 第26页 · 编程关 Step7 —— 背景音乐+游戏结束
**布局：** 舞台脚本 + 被击中处理
**文字：**
- 🎵+🏁 Step7：背景音乐 + 游戏结束判定
- 舞台脚本(背景音乐)：
  ```
  当绿旗被点击
  重复执行
    播放声音 [西部音乐 v] 直到结束
  ```
- 约翰被击中处理(在约翰角色里)：
  ```
  当接收到 [约翰被击中 v]
  切换造型为 [倒下 v]
  说 [啊！我输了...] (2) 秒
  停止 [该角色的其他脚本 v]
  广播 [泰格赢了 v]
  ```
- 泰格被击中同理(在泰格角色里)→广播"约翰赢了"
- 舞台收到胜负广播→显示大字"XXX赢了！"

---

## 第27页 · Bug急救站
**布局：** 左侧Bug列表 + 右侧解药
**文字：**
- 🚑 Bug急救站！双人对战常见问题：
- | 🐛 Bug | 💊 解药 |
  |--------|--------|
  | 两个人按同一个键都动 | 检查两个角色的按键设置，WASD和方向键要分开 |
  | 子弹方向反了 | 约翰子弹用+10(右)，泰格子弹用-10(左)，检查正负号 |
  | 子弹收不到广播 | 广播名字和接收名字要**完全一致**(包括空格和大小写) |
  | 击中后角色还能动 | 用「停止该角色的其他脚本」而不是「停止全部」 |
  | 子弹从错误位置出发 | 子弹接收到后第一行必须是`移到 [对应角色 v]` |
  | 按空格两个人都开枪 | 约翰用空格，泰格用/或其他键，不能重复 |
  | 背景音乐不响 | 检查音乐文件是否上传，循环是否用了「播放…直到结束」 |

---

## 第28页 · 扩展关
**布局：** 星级挑战卡片
**文字：**
- 🌟 扩展关 —— 挑战升级！
- 🌟 一星挑战：加生命值(每人3条命→每次被击中-1→到0结束)
- 🌟🌟 二星挑战：加子弹反弹(子弹碰到边缘反弹一次，增加难度！)
- 🌟🌟🌟 三星挑战：加血量条显示 + 不同武器(手枪/步枪不同伤害) + 障碍物(子弹会被挡住)

---

## 第29页 · 课堂总结
**布局：** 上半部分积木表 + 下半部分5题测验
**文字：**
- 📋 积木表（今天新学+重点复习的积木）

| 积木 | 模块 | 作用 |
|------|------|------|
| `广播 [消息 v]` | 事件(黄) | 发送消息给所有角色(第4次用！) |
| `当接收到 [消息 v]` | 事件(黄) | 收到指定消息后执行 |
| `移到 [角色 v]` | 运动(蓝) | 瞬移到另一个角色的位置(复习) |
| `将x增加 (10) / (-10)` | 运动(蓝) | 控制子弹方向的正负号 |
| `<_ 或 _>` | 运算(绿) | 碰到对方或边缘都停(复习L1-16) |
| `停止 [该角色的其他脚本 v]` | 控制(橙) | 精准停止自己不停止全部 |
| `播放声音 [ ] 直到结束` | 声音(紫) | 播放完整背景音乐(复习) |

- 📝 5题小测验：
  1. 约翰用什么键上下移动？(A.WASD B.方向键 C.鼠标)
  2. 子弹从哪个角色的位置出发就用什么积木定位？(A.移到随机 B.移到对应角色 C.滑行到)
  3. 泰格的子弹x增加(____)是向左飞？(A.正数 B.负数 C.零)
  4. 击中后为什么不用「停止全部」？(A.太麻烦 B.会把对方也停了 C.会卡顿)
  5. 这是第几次在课程中使用广播了？(A.第1次 B.第2次 C.第4次)

---

## 第30页 · 展示关
**布局：** 填空式提示 + 作品展示舞台示意
**文字：**
- 🎤 展示关 —— 向大家介绍你的牛仔枪战！
- 填空式介绍模板：
  - 我做了 ____（双人枪战游戏！）
  - 这是 ____ 人对战游戏（两）
  - 约翰用 ____ 键发射，子弹向 ____ 方向飞（空格 / 右）
  - 泰格用 ____ 键发射，子弹向 ____ 方向飞（/ / 左）
  - 用了 ____ 积木实现角色间通信（广播）
  - 和L1-5/L1-10相比，这次广播新学到了 ____（双向广播 / 两个广播共存）
  - 击中后用 ____ 积木精确停止（停止该角色的其他脚本）
  - 我觉得最难的部分是 ____
  - 下次还想加的功能是 ____

---

## 第31页 · 下课啦
**布局：** 中央大字 + 底部温馨提醒
**文字：**
- 🎉 下课啦！
- 砰！砰！砰！牛仔们收枪回家～🤠
- 下节课预告：L1-19《安全过马路》—— 帮图图安全过马路，学习交通规则！🚦
- 别忘了保存你的作品哦！💾