17 · 恐惧之门
循环攻击名为 Door 的门
扣哒世界 · 计算机科学入门 · 第17–25关
循环攻击名为 Door 的门
先开宝箱,再循环逃跑
走到指定位置,循环攻击橱柜
用变量保存敌人的名字
寻找最近敌人并保存结果
检查创建和使用的变量名是否一致
移动、寻找和攻击组成循环
先到安全位置,再重复查找攻击
用坐标指定围栏建造位置
先读关卡目标,再观察地图,最后编写和检查代码。
NEW SYNTAX RULES
1. auto (自动类型):
告诉电脑:“你自己猜猜这个盒子里装的是什么类型的数据”。这让我们定义变量变得很简单!
2. ; (分号):
别忘了!C++里每一句话说完都要加分号,就像句号一样。
WHILE LOOPS
有些东西需要打很多次才能破(比如门、宝箱)。
这时候 while(true) 循环就派上用场了!
只要代码在 { } 花括号里,它就会一直不停地攻击。
THE STORAGE BOX
变量就像一个贴了标签的盒子。
第20关“老对手”里,我们可以把食人魔的名字放进盒子里,这样就不用每次都把名字写一遍了。
FIND NEAREST ENEMY
如果是无名小卒怎么办?
使用 hero.findNearestEnemy()!
这个方法会帮你自动扫描最近的敌人,并把它“抓”住放到你的变量盒子里。
VARIABLES IN LOOPS
在第23关“Kithmaze最终历险”中,我们将变量放在循环内部。
这意味着:
1. 每次循环开始,英雄重新看一眼周围。
2. 找到当下的新敌人。
3. 攻击它!
BUILD XY
在第25关,你需要使用“建造者之锤”。
buildXY("fence", x, y)
x 是横坐标,y 是纵坐标。
把鼠标移动到地图上,就能看到具体的数字坐标啦!
扣哒世界 · 计算机科学入门 · 第17–25关
第18关先打开 Chest、拿到药水,再回主路;第19关先走到橱柜旁。
hero.moveUp();
hero.attack("Chest");
hero.moveDown();第18关重复向右、向下各走3步;第19关重复攻击 Cupboard。
while (true) {
hero.moveRight(3);
hero.moveDown(3);
}第17关“恐惧之门”用循环攻击 "Door"。以上是局部示例,准备动作要按地图补齐。
扣哒世界 · 计算机科学入门 · 第17–25关
创建的是 enemy,却使用 enemy3。标签对不上,程序找不到 enemy3。
auto enemy = hero.findNearestEnemy(); hero.attack(enemy3);
先创建 enemy3,再使用 enemy3。注意:变量名不加引号。
auto enemy3 = hero.findNearestEnemy(); hero.attack(enemy3);
第21关学习保存查找结果;第22关“概念挑战. 名称大师调试”练习检查变量名。
扣哒世界 · 计算机科学入门 · 第17–25关
将攻击放进循环体,反复攻击 Door。
hero.attack("Door");宝箱或路线准备放循环前;逃跑和攻击橱柜放循环内。
准备一次 → 重复行动 ↻
变量名是标签,值是标签指向的数据。先赋值,再使用。
auto enemy1 = "Kratt";
先求右边的结果,再存到左边;重新赋值会更新变量。
enemy1 = hero.findNearestEnemy();
保存最近敌人的查找结果;使用变量时不加引号。
auto enemy = hero.findNearestEnemy();
创建 enemy3,使用时也写 enemy3。"enemy3" 是文字。
hero.attack(enemy3);
变量不会自动换目标;每轮重新寻找,再保存和攻击。
移动 → 寻找 → 保存 → 攻击 ↻
三个参数依次是类型、x、y;按地图选择坐标。
hero.buildXY("fence", 40, 20);首次声明可用 auto 推断类型;再次赋值不再写 auto。
auto enemy = hero.findNearestEnemy(); hero.attack(enemy);
本节课关卡:17. 恐惧之门;18. 攻破突袭;19. 橱柜里的骷髅;20. 老对手;21. 名称大师;22. 概念挑战. 名称大师调试;23. Kithmaze最终历险;24. 组合挑战. 安全地点;25. Kithgard之门