## 👋 项目介绍
欢迎来到飞翔小鸟大冒险!在这个有趣的游戏中,你将控制一只可爱的小鸟穿越充满障碍的管道世界。玩家通过按空格键或点击屏幕让小鸟飞翔,躲避不断移动的管道障碍。游戏包含计分系统、最高分记录和生动的音效反馈,非常适合初学者学习游戏编程的核心概念。准备好体验这个既简单又充满挑战的小游戏吧!
## 🎯 你将学会
* 克隆体的创建与控制
* 变量的初始化与动态更新
* 消息广播机制的应用
* 碰撞检测的实现方法
* 多角色协同工作逻辑
## 🛠️ 开始制作
### 第一步:初始化项目与舞台设置
**目标**:创建新项目并准备游戏舞台,为后续开发打下基础。
**操作步骤**:
1. 打开Scratch编辑器
2. 点击舞台区域的"背景"选项卡
3. 从背景库中选择编号为1的背景(蓝天背景)
4. 删除默认的白色背景
5. 在声音库中添加"pop"音效,用于游戏交互反馈

### 第二步:添加舞台背景与声音
**目标**:完善舞台资源,添加游戏所需的声音效果。
**操作步骤**:
1. 确保已选择舞台角色
2. 在声音选项卡中添加以下声音:
- pickupCoin (6) - 用于得分音效
- laserShoot (6) - 用于碰撞音效
- pickupCoin (2) - 用于跳跃音效
3. 删除默认的"Meow"声音
**避坑指南**:确保所有声音文件都正确加载,避免后续代码中调用声音时出现错误。
### 第三步:创建全局变量
**目标**:建立游戏的核心数据变量,控制角色运动和分数系统。
**操作步骤**:
1. 在舞台的"变量"选项卡中创建以下全局变量:
- Y speed:控制小鸟的垂直速度
- speed:控制管道移动速度
- Score:记录当前得分
- ☁ World record:保存历史最高分
2. 保持变量默认显示在舞台上

### 第四步:添加角色Player与造型
**目标**:创建游戏主角小鸟角色并准备基础资源。
**操作步骤**:
1. 点击角色库中的"添加角色"按钮
2. 选择"Player"角色(小鸟形象)
3. 在声音选项卡中添加:
- pickupCoin (2) - 跳跃音效
- laserShoot (6) - 碰撞音效
**避坑指南**:确保Player角色的名称拼写正确,后续代码中会精确使用这个名称。
### 第五步:为Player创建私有变量
**目标**:添加角色特有的控制变量,实现小鸟的物理运动效果。
**操作步骤**:
1. 选择Player角色
2. 在"变量"选项卡中创建私有变量:
- Direction Player:控制小鸟的倾斜角度

### 第六步:Player基础移动与交互逻辑
**目标**:实现小鸟的核心运动机制和用户交互响应。
**操作步骤**:
1. 选择Player角色,切换到代码标签
2. 添加以下代码块:
```scratch
when I receive [Start v]
point in direction (0)
set [Y speed v] to [0]
set [Direction Player v] to [-1]
go to x: (0) y: (0)
show
switch costume to (Player v)
forever
point in direction (((0) - (Direction Player)) * (0.5))
change [Y speed v] by (-0.5)
change [Direction Player v] by ((Y speed) * (0.75))
change y by (Y speed)
if <<key [up arrow v] pressed?> or <mouse down?>> or <<key [space v] pressed?> or <key [w v] pressed?>>> then
set [Y speed v] to [4]
end
if <<touching [_edge_ v]?> or <touching [Pipes v]?>> then
broadcast (Death v)
end
end
```
3. 添加隐藏代码:
```scratch
when flag clicked
hide
```
**逻辑解析**:这段代码实现了小鸟的物理引擎。重力加速度不断减小Y速度,当用户按下跳跃键时,给小鸟一个向上的冲力。同时检测碰撞边界或管道,触发死亡事件。

### 第七步:添加Pipes角色与资源
**目标**:创建管道障碍物角色并准备多造型资源。
**操作步骤**:
1. 点击角色库中的"添加角色"按钮
2. 选择"Pipes"角色(管道形象)
3. 在造型选项卡中添加:
- Pipes2
- Pipes3
- Pipes4
4. 在声音选项卡中添加:
- pickupCoin (6) - 得分音效
- laserShoot (6) - 碰撞音效
- pop - 交互音效
**避坑指南**:确保所有管道造型名称正确,后续克隆时会随机选择这些造型。
### 第八步:为Pipes创建变量
**目标**:建立管道的移动控制变量。
**操作步骤**:
1. 选择Pipes角色
2. 在"变量"选项卡中创建私有变量:
- Pipe speed:控制管道移动速度
### 第九步:Pipes移动与生成逻辑
**目标**:实现管道的自动生成、移动和克隆控制机制。
**操作步骤**:
1. 选择Pipes角色,切换到代码标签
2. 添加以下代码块:
```scratch
when I receive [Start v]
clear graphic effects
switch costume to (Pipes1 v)
show
set [Pipe speed v] to [-3]
show variable [☁ World record v]
show variable [Score v]
set [Score v] to [0]
go to x: (300) y: (pick random (100) to (-100))
repeat until <touching [Player v]?>
Fast work
end
```
3. 创建自定义积木"Fast work":
```scratch
define Fast work
change x by (Pipe speed)
if <(x position) = [2]> then
change [Score v] by (1)
repeat (1)
start sound [pickupCoin (6) v]
end
create clone of (_myself_ v)
end
if <(x position) = [-257]> then
hide
end
if <touching [Player v]?> then
repeat (1)
start sound [laserShoot (6) v]
end
end
```
**逻辑解析**:管道从右侧出现,以恒定速度向左移动。当通过屏幕中心时得分并克隆新管道,当移出屏幕时隐藏。碰到小鸟时触发碰撞音效。

### 第十步:Pipes交互与克隆控制
**目标**:完善管道的交互响应和克隆体管理。
**操作步骤**:
1. 添加克隆体启动代码:
```scratch
when I start as a clone
go to x: (300) y: (pick random (100) to (-100))
switch costume to (join [Pipes] (pick random (1) to (4)))
show
repeat until <touching [Player v]?>
change x by (Pipe speed)
if <(x position) = [2]> then
change [Score v] by (1)
repeat (1)
start sound [pickupCoin (6) v]
end
create clone of (_myself_ v)
end
if <<<<(x position) = [-256]> or <(x position) = [-257]>> or <(x position) = [-258]>> or <(x position) = [-259]>> then
delete this clone
end
end
```
2. 添加点击响应:
```scratch
when this sprite clicked
broadcast (Jump noise v)
wait until <not <<touching [mouse-pointer v]?> and <mouse down?>>
```
**避坑指南**:确保克隆体的删除条件正确,避免内存泄漏。
### 第十一步:Died text基础设置
**目标**:创建游戏结束提示角色并初始化。
**操作步骤**:
1. 点击角色库中的"添加角色"按钮
2. 选择"Died text"角色(游戏结束文字)
3. 在声音选项卡中添加"pop"音效
4. 添加基础代码:
```scratch
when flag clicked
hide
forever
go to x: (0) y: (0)
end
```
### 第十二步:为Died text创建变量
**目标**:为游戏结束界面添加分数显示变量。
**操作步骤**:
1. 选择Died text角色
2. 在"变量"选项卡中创建全局变量:
- Score:用于显示最终得分
### 第十三步:Died text交互与广播
**目标**:实现游戏结束提示的显示和事件广播。
**操作步骤**:
1. 添加代码块:
```scratch
when I receive [Died text v]
show
broadcast (End v)
```
**逻辑解析**:当接收到死亡信号时显示结束文字,并广播结束事件通知所有角色停止运行。

### 第十四步:添加Play button角色与资源
**目标**:创建游戏开始按钮并准备资源。
**操作步骤**:
1. 点击角色库中的"添加角色"按钮
2. 选择"Play button"角色(开始按钮)
3. 添加第二个造型"Play button2"
4. 在声音选项卡中添加"pickupCoin (6)"音效
### 第十五步:为Play button创建变量
**目标**:为按钮添加控制变量。
**操作步骤**:
1. 选择Play button角色
2. 在"变量"选项卡中创建私有变量:
- Direction Player
- NUM1
- NUM2
### 第十六步:Play button基础移动与方向控制
**目标**:实现按钮的浮动动画和鼠标交互效果。
**操作步骤**:
1. 添加代码块:
```scratch
when flag clicked
go to x: (0) y: (-75)
show
switch costume to (Play button v)
forever
set y to ((-75) + (([sin v] of ((timer) * (300)) ) * (2)))
point in direction ((90) + (([sin v] of ((timer) * (200)) ) * (2)))
if <touching [mouse-pointer v]?> then
switch costume to (Play button2 v)
set size to ((175) - ((size) / (2))) %
else
switch costume to (Play button v)
set size to ((150) - ((size) / (2))) %
end
end
```
**逻辑解析**:按钮通过正弦函数实现上下浮动和旋转效果,鼠标悬停时切换造型并放大,增强交互感。

### 第十七步:Play button交互与高级功能
**目标**:实现游戏开始控制和高级交互逻辑。
**操作步骤**:
1. 添加代码块:
```scratch
when flag clicked
forever
wait until <touching [mouse-pointer v]?>
start sound [pickupCoin (6) v]
wait until <not <touching [mouse-pointer v]?>>
end
```
2. 添加启动控制:
```scratch
when I receive [Start v]
stop [other scripts in sprite v]
hide
delete this clone
```
3. 添加点击响应:
```scratch
when this sprite clicked
wait until <mouse down?>
hide
broadcast (Start v)
```
**避坑指南**:确保"Start"广播事件正确触发,所有角色都能接收到开始信号。
### 第十八步:添加Background角色与资源
**目标**:创建背景角色并添加随机变化效果。
**操作步骤**:
1. 点击角色库中的"添加角色"按钮
2. 选择"Background"角色(背景元素)
3. 添加第二个造型(云朵造型)
4. 在声音选项卡中添加"pop"音效
5. 创建私有变量:
- Scroll speed:背景滚动速度
- Chance:随机变化概率
### 第十九步:Background交互与广播
**目标**:实现背景的随机变化和点击响应。
**操作步骤**:
1. 添加代码块:
```scratch
when flag clicked
set [Chance v] to (pick random (1) to (100))
forever
go to [back v] layer
go to x: (0) y: (0)
if <(Chance) = [1]> then
switch costume to (2 v)
else
switch costume to (1 v)
end
end
```
2. 添加点击响应:
```scratch
when this sprite clicked
broadcast (Jump noise v)
wait until <not <<touching [mouse-pointer v]?> and <mouse down?>>
```

### 第二十步:添加Name of game角色
**目标**:创建游戏标题角色并添加动画效果。
**操作步骤**:
1. 点击角色库中的"添加角色"按钮
2. 选择"Name of game"角色(游戏标题)
3. 在声音选项卡中添加"pop"音效
4. 添加代码块:
```scratch
when flag clicked
show
go to x: (0) y: (-75)
forever
set y to ((100) + (([sin v] of ((timer) * (400)) ) * (2)))
point in direction ((90) + (([sin v] of ((timer) * (200)) ) * (2)))
end
```
5. 添加隐藏控制:
```scratch
when I receive [Start v]
hide
```
**逻辑解析**:标题角色通过正弦函数实现上下浮动效果,游戏开始时隐藏,保持界面整洁。

### 第二十一步:最终演示与截图
**目标**:运行整个项目并测试所有功能。
**操作步骤**:
1. 点击绿旗开始游戏
2. 点击开始按钮启动游戏
3. 按空格键或点击屏幕控制小鸟飞翔
4. 观察管道生成和移动效果
5. 测试碰撞检测和游戏结束流程
6. 尝试刷新最高分记录
**避坑指南**:确保所有角色都正确接收到"Start"和"End"广播事件,避免游戏状态混乱。

## 🚀 挑战一下
试试给游戏添加以下功能:
1. 增加难度选择(简单/困难模式)
2. 添加不同类型的障碍物
3. 实现小鸟的加速冲刺功能
4. 设计更精美的游戏界面
5. 添加音量控制按钮
## 🎉 结语
恭喜你完成了飞翔小鸟大冒险的制作!通过这个项目,你掌握了Scratch中克隆体、变量控制和消息广播等核心概念。现在你已经具备了制作简单游戏的基础能力,可以尝试创作属于自己的游戏世界了。记住,编程就像搭积木一样有趣,不断尝试和探索,你会创造出更精彩的作品!