🛡️

C++ 编程进阶:变量与循环

扣哒世界 · 计算机科学入门 · C++ 第17-25关 核心知识点

👾
enemy1
💎
gem

这次冒险学什么?

扣哒世界 · 计算机科学入门 · 第17–25关

C++ · 本节课关卡

17 · 恐惧之门

循环攻击名为 Door 的门

18 · 攻破突袭

先开宝箱,再循环逃跑

19 · 橱柜里的骷髅

走到指定位置,循环攻击橱柜

20 · 老对手

用变量保存敌人的名字

21 · 名称大师

寻找最近敌人并保存结果

22 · 概念挑战. 名称大师调试

检查创建和使用的变量名是否一致

23 · Kithmaze最终历险

移动、寻找和攻击组成循环

24 · 组合挑战. 安全地点

先到安全位置,再重复查找攻击

25 · Kithgard之门

用坐标指定围栏建造位置

先读关卡目标,再观察地图,最后编写和检查代码。

⚡ 1. C++ 语法升级

NEW SYNTAX RULES

01

🆕 两个新朋友

1. auto (自动类型):
告诉电脑:“你自己猜猜这个盒子里装的是什么类型的数据”。这让我们定义变量变得很简单!

2. ; (分号):
别忘了!C++里每一句话说完都要加分号,就像句号一样。

// 创建变量的新方法:
auto enemy = "Kratt";

// 还有 while 循环的写法:
while(true) {
    hero.moveRight();
}

🔄 2. 循环与攻击

WHILE LOOPS

02

🚪 破门而入 (第17关)

有些东西需要打很多次才能破(比如门、宝箱)。
这时候 while(true) 循环就派上用场了!
只要代码在 { } 花括号里,它就会一直不停地攻击。

// 恐惧之门解法
int main() {
    while(true) {
        hero.attack("Door");
    }
    return 0;
}

📦 3. 变量 (Variable)

THE STORAGE BOX

03

🏠 存储名字

变量就像一个贴了标签的盒子。
第20关“老对手”里,我们可以把食人魔的名字放进盒子里,这样就不用每次都把名字写一遍了。

enemy1 ⬅️ "Kratt"
// 创建一个叫 enemy1 的变量
auto enemy1 = "Kratt";

// 使用变量来攻击
hero.attack(enemy1);
hero.attack(enemy1);

🔭 4. 寻找敌人

FIND NEAREST ENEMY

04

👀 智能眼镜

如果是无名小卒怎么办?
使用 hero.findNearestEnemy()!
这个方法会帮你自动扫描最近的敌人,并把它“抓”住放到你的变量盒子里。

// 1. 找到最近的敌人,存入 enemy1
auto enemy1 = hero.findNearestEnemy();

// 2. 攻击盒子里存的那个敌人
hero.attack(enemy1);
hero.attack(enemy1);

🔄 5. 循环中的变量

VARIABLES IN LOOPS

05

🤖 自动战斗机

在第23关“Kithmaze最终历险”中,我们将变量放在循环内部。
这意味着:
1. 每次循环开始,英雄重新看一眼周围。
2. 找到当下的新敌人。
3. 攻击它!

while(true) {
    hero.moveRight();
    // 每次循环都找新的敌人
    auto enemy = hero.findNearestEnemy();
    hero.attack(enemy);
}

🔨 6. 建造与坐标

BUILD XY

06

🚧 封锁道路

在第25关,你需要使用“建造者之锤”。
buildXY("fence", x, y)
x 是横坐标,y 是纵坐标。
把鼠标移动到地图上,就能看到具体的数字坐标啦!

// 在坐标 (36, 34) 建围栏
hero.buildXY("fence", 36, 34);

// 在坐标 (36, 30) 建围栏
hero.buildXY("fence", 36, 30);
🎓

你已经学会了...

⚡ auto:自动定义变量
🛑 ;:别忘了分号
📦 变量:存储名字或敌人
🔄 while(true):无限循环
🔭 findNearestEnemy:自动找怪
📍 buildXY:指定坐标建造

第18–19关 · 先准备,再重复

扣哒世界 · 计算机科学入门 · 第17–25关

C++ · 知识讲解
准备一次 🧰 → 进入循环 🔁 → 重复行动

🧰 循环前:只做一次

第18关先打开 Chest、拿到药水,再回主路;第19关先走到橱柜旁。

hero.moveUp();
hero.attack("Chest");
hero.moveDown();

🔁 循环内:重复做

第18关重复向右、向下各走3步;第19关重复攻击 Cupboard。

while (true) {
    hero.moveRight(3);
    hero.moveDown(3);
}

第17关“恐惧之门”用循环攻击 "Door"。以上是局部示例,准备动作要按地图补齐。

第22关 · 给变量标签找朋友

扣哒世界 · 计算机科学入门 · 第17–25关

C++ · 知识讲解
创建标签 🏷️ → 对照名字 🔍 → 使用变量 ⚔️

🐞 错在哪里?

创建的是 enemy,却使用 enemy3。标签对不上,程序找不到 enemy3。

auto enemy = hero.findNearestEnemy();
hero.attack(enemy3);

✅ 让名字一致

先创建 enemy3,再使用 enemy3。注意:变量名不加引号。

auto enemy3 = hero.findNearestEnemy();
hero.attack(enemy3);

第21关学习保存查找结果;第22关“概念挑战. 名称大师调试”练习检查变量名。

我的知识宝藏 · 一页复习

扣哒世界 · 计算机科学入门 · 第17–25关

C++ · 知识点图

⚔️ 循环攻击 · 第17关

将攻击放进循环体,反复攻击 Door。

hero.attack("Door");

🧰 准备与循环 · 第18–19关

宝箱或路线准备放循环前;逃跑和攻击橱柜放循环内。

准备一次 → 重复行动 ↻

📦 变量 · 第20关

变量名是标签,值是标签指向的数据。先赋值,再使用。

auto enemy1 = "Kratt";

⬅️ 赋值与重新赋值

先求右边的结果,再存到左边;重新赋值会更新变量。

enemy1 = hero.findNearestEnemy();

🔭 寻找敌人 · 第21关

保存最近敌人的查找结果;使用变量时不加引号。

auto enemy = hero.findNearestEnemy();

🔍 名字一致 · 第22关

创建 enemy3,使用时也写 enemy3。"enemy3" 是文字。

hero.attack(enemy3);

🔄 更新目标 · 第23–24关

变量不会自动换目标;每轮重新寻找,再保存和攻击。

移动 → 寻找 → 保存 → 攻击 ↻

📍 建造 · 第25关

三个参数依次是类型、x、y;按地图选择坐标。

hero.buildXY("fence", 40, 20);

🏗️ auto 与分号

首次声明可用 auto 推断类型;再次赋值不再写 auto。

auto enemy = hero.findNearestEnemy();
hero.attack(enemy);

本节课关卡:17. 恐惧之门;18. 攻破突袭;19. 橱柜里的骷髅;20. 老对手;21. 名称大师;22. 概念挑战. 名称大师调试;23. Kithmaze最终历险;24. 组合挑战. 安全地点;25. Kithgard之门