## 👋 项目介绍
欢迎来到"互动电路"项目!在这个有趣的游戏中,你将扮演电路工程师,通过拖拽开关、电池和电路路径来连接电路,控制灯泡的亮灭。当所有零件正确连接且开关打开时,灯泡就会亮起!这个项目不仅展示了电路的基本原理,还让你体验变量控制、条件判断和碰撞检测等核心编程概念。
## 🎯 你将学会
* 使用变量控制游戏状态和计数
* 通过碰撞检测实现物体交互逻辑
* 运用条件判断实现开关与灯泡的联动
* 掌握拖拽功能增强用户交互体验
* 利用造型切换实现视觉反馈效果
## 🛠️ 开始制作
### 第一步:初始化项目与舞台背景
**目标**:创建新项目并设置舞台背景,为电路游戏搭建基础场景。
**操作步骤**:
打开Scratch软件,创建一个新项目。点击舞台区域的"选择背景"按钮,在背景库中找到"backdrop1"并点击添加。这个背景将作为电路板的基础场景。
**逻辑解析**:
舞台背景是游戏场景的"画布",选择一个深色背景能更好地突出电路元件的视觉效果,让玩家更专注于电路连接。
<!--SHOT:action:1-->

### 第二步:创建全局变量
**目标**:创建两个布尔型变量,用于控制开关状态和连接状态。
**操作步骤**:
点击舞台角色,切换到"代码"标签。点击"变量"类别,点击"新建变量",输入变量名"ON or OFF",选择"适用于所有角色"。同样创建第二个变量"connections complete"。
**逻辑解析**:
变量是存储数据的容器,"ON or OFF"用于记录开关状态(开/关),"connections complete"用于统计正确连接的零件数量,这些变量是实现游戏逻辑的关键。
### 第三步:添加角色与基础设置
**目标**:添加四个核心角色(电路路径、电池、开关、灯泡)并设置初始造型。
**操作步骤**:
点击角色区域的"选择一个角色"按钮,在角色库中找到并添加"Circuit Path"角色。同样添加"Battery"、"Switch"和"Lightbulb"角色。选择Circuit Path角色,点击"造型"标签,点击"选择造型"按钮,添加"costume - ON"造型。
**逻辑解析**:
每个角色都有特定功能:电路路径作为连接线,电池提供电源,开关控制电路通断,灯泡作为输出元件。正确设置造型能让玩家直观理解元件状态。
<!--SHOT:action:6-->

### 第四步:Circuit Path 基础移动
**目标**:实现点击触发移动到指定位置并设置拖拽模式。
**操作步骤**:
选择Circuit Path角色,切换到"代码"标签。从"事件"类别拖入"当角色被点击"积木,从"运动"类别拖入"移到 x: (-56) y: (-25)"积木。从"侦测"类别拖入"将拖拽模式设置为可拖动"积木。
**代码实现**:
```scratch
when this sprite clicked
go to x: (-56) y: (-25)
set drag mode [可拖动 v]
```
**逻辑解析**:
当玩家点击电路路径时,它会自动移动到预设位置并允许被拖拽,这样玩家就可以自由调整电路路径的位置来连接其他元件。
**避坑指南**:
确保拖拽模式设置正确,否则玩家将无法拖动电路路径。坐标值可以根据舞台布局调整,但要保持与其他元件的相对位置关系。
### 第五步:Battery 基础移动
**目标**:实现点击触发移动到指定位置并设置拖拽模式。
**操作步骤**:
选择Battery角色,切换到"代码"标签。从"事件"类别拖入"当绿旗被点击"积木,从"运动"类别拖入"移到 x: (-56) y: (-25)"积木。从"侦测"类别拖入"将拖拽模式设置为可拖动"积木。
**代码实现**:
```scratch
when flag clicked
go to x: (-56) y: (-25)
set drag mode [可拖动 v]
```
**逻辑解析**:
游戏开始时,电池会自动移动到指定位置并允许被拖拽,这样玩家就可以将它放到电路中的正确位置来提供电源。
**避坑指南**:
注意区分"当绿旗被点击"和"当角色被点击"事件,这里使用绿旗事件确保游戏初始化时电池就位。
### 第六步:Switch 基础交互
**目标**:实现点击触发切换造型并改变开关状态。
**操作步骤**:
选择Switch角色,切换到"代码"标签。从"事件"类别拖入"当角色被点击"积木,从"声音"类别拖入"播放声音 Click"积木(如果声音库中没有,先添加Click声音)。从"控制"类别拖入"如果…那么…否则"积木,在条件中添加"ON or OFF = OFF"判断,在"那么"分支添加"设置ON or OFF为ON"和"切换到costume - ON造型",在"否则"分支添加"设置ON or OFF为OFF"和"切换到costume - OFF造型"。
**代码实现**:
```scratch
when this sprite clicked
start sound [Click v]
if <(ON or OFF) = [OFF]> then
set [ON or OFF v] to [ON]
switch costume to (costume - ON v)
else
set [ON or OFF v] to [OFF]
switch costume to (costume - OFF v)
end
```
**逻辑解析**:
当玩家点击开关时,它会切换开关状态(ON/OFF)并改变对应造型,同时播放点击声音增强交互体验。开关状态会影响整个电路的通断。
### 第七步:Lightbulb 基础交互
**目标**:实现点击触发移动并设置初始关闭状态。
**操作步骤**:
选择Lightbulb角色,切换到"代码"标签。从"事件"类别拖入"当绿旗被点击"积木,从"运动"类别拖入"移到 x: (-1) y: (61)"积木。从"侦测"类别拖入"将拖拽模式设置为可拖动"积木。从"外观"类别拖入"切换造型到 costume - OFF"积木。
**代码实现**:
```scratch
when flag clicked
go to x: (-1) y: (61)
set drag mode [可拖动 v]
switch costume to (costume - OFF v)
```
**逻辑解析**:
游戏开始时,灯泡会移动到指定位置并允许被拖拽,同时初始设置为关闭状态(造型为OFF)。当电路接通时,它会切换到亮起状态。
### 第八步:Circuit Path 交互逻辑
**目标**:实现开关状态同步与造型切换逻辑。
**操作步骤**:
选择Circuit Path角色,切换到"代码"标签。在已有代码基础上,从"控制"类别拖入"永远"积木包裹现有代码。在"永远"循环内添加"如果…那么…否则"积木,在条件中添加"ON or OFF = ON 且 connections complete = 3"判断,在"那么"分支添加"切换到costume - ON造型",在"否则"分支添加"切换到costume - OFF造型"。
**代码实现**:
```scratch
when flag clicked
set [connections complete v] to [0]
go to [back v] layer
forever
if <<(ON or OFF) = [ON]> and <(connections complete) = [3]>> then
switch costume to (costume - ON v)
else
switch costume to (costume - OFF v)
end
end
```
**逻辑解析**:
电路路径会根据开关状态和连接数量实时改变造型。当开关打开且所有三个元件都正确连接时,显示ON造型(通电状态),否则显示OFF造型(断电状态)。
**避坑指南**:
确保"connections complete"变量在游戏开始时初始化为0,否则计数逻辑会出错。同时将电路路径设置为"back"层,避免遮挡其他元件。
<!--SHOT:action:33-->

### 第九步:Battery 交互逻辑
**目标**:实现颜色检测与计数器更新逻辑。
**操作步骤**:
选择Battery角色,切换到"代码"标签。在已有代码基础上,从"控制"类别拖入"永远"积木。在循环内添加"如果…那么"积木,在条件中添加"碰到颜色 #00ffe6 且 碰到颜色 #fff700"判断,在"那么"分支添加"将connections complete增加1"积木,再添加"等待直到不碰到这两个颜色"积木,最后添加"将connections complete减少1"积木。
**代码实现**:
```scratch
when flag clicked
forever
if <<touching color (#00ffe6)?> and <touching color (#fff700)?>> then
change [connections complete v] by (1)
wait until <not <<touching color (#00ffe6)?> and <touching color (#fff700)?>>>
change [connections complete v] by (-1)
end
end
```
**逻辑解析**:
当电池同时碰到两种特定颜色(代表电路连接点)时,增加连接计数器;当它离开连接点时,减少计数器。这样就能检测到电池是否被正确放置到电路中。
### 第十步:Switch 高级逻辑
**目标**:实现拖拽状态与变量同步逻辑。
**操作步骤**:
选择Switch角色,切换到"代码"标签。在已有代码基础上,从"控制"类别拖入"永远"积木。在循环内添加"如果…那么"积木,在条件中添加"connections complete < 3"判断,在"那么"分支添加"设置ON or OFF为OFF"和"切换到costume - OFF造型"积木。
**代码实现**:
```scratch
when flag clicked
forever
if <(connections complete) < [3]> then
set [ON or OFF v] to [OFF]
switch costume to (costume - OFF v)
end
end
```
**逻辑解析**:
当连接数量不足3个时,开关会自动关闭并切换到OFF造型。这确保只有当所有元件都正确连接时,开关才能保持打开状态,模拟真实电路的安全特性。
### 第十一步:Lightbulb 高级逻辑
**目标**:实现颜色检测与灯泡状态循环逻辑。
**操作步骤**:
选择Lightbulb角色,切换到"代码"标签。在已有代码基础上,从"控制"类别拖入"永远"积木。在循环内添加"如果…那么"积木,在条件中添加"ON or OFF = ON 且 connections complete = 3"判断,在"那么"分支添加"播放声音Buzz Short"、"切换到Bulb On造型"和"等待直到条件不满足"积木。在"等待"之后添加"切换到Bulb Off造型"积木。再添加一个"永远"循环实现与Battery相同的颜色检测逻辑。
**代码实现**:
```scratch
when flag clicked
forever
if <<(ON or OFF) = [ON]> and <(connections complete) = [3]>> then
start sound [Buzz Short v]
switch costume to (Bulb On v)
wait until <<(ON or OFF) = [OFF]> or <(connections complete) < [3]>>
end
switch costume to (Bulb Off v)
end
when flag clicked
forever
if <<touching color (#00ffe6)?> and <touching color (#fff700)?>> then
change [connections complete v] by (1)
wait until <not <<touching color (#00ffe6)?> and <touching color (#fff700)?>>>
change [connections complete v] by (-1)
end
end
```
**逻辑解析**:
灯泡会根据开关状态和连接数量决定是否亮起。当条件满足时,播放"通电"声音并切换到亮起造型;否则保持关闭状态。同时,它也检测颜色变化来更新连接计数器,确保只有正确连接时才会亮起。

### 第十二步:最终演示
通过运行项目,我们可以验证所有功能是否正常工作。当玩家正确连接所有元件并打开开关时,灯泡亮起,成功完成电路连接。这个完整流程展示了变量控制、条件判断和碰撞检测的综合应用。

## 🚀 挑战一下
试试给游戏增加更多挑战!你可以:
1. 添加一个"失败计数器",当玩家错误连接时增加计数
2. 设计多个关卡,每个关卡有不同的连接要求
3. 增加时间限制,让玩家在限定时间内完成电路连接
4. 添加音效反馈,当连接正确/错误时播放不同声音
## 🎉 结语
恭喜你完成了"互动电路"项目!通过这个项目,你不仅学习了Scratch的基础编程概念,还体验了如何用编程模拟现实世界的物理现象。变量、条件判断和碰撞检测是游戏开发的核心技能,掌握它们你就能创造更多有趣的项目!继续探索Scratch的无限可能吧!