🖥️ 计算机科学 2
第 43-48 关
🍕

多参数函数

Multi-parameter Functions

🔢 坐标控制 (x, y)
🛠️ 灵活定制
👩‍🍳

什么是多参数函数?

想象你是一个高级魔法厨师,现在要制作一个定制披萨

如果只有一个参数(比如大小),太单调了!
为了做出独一无二的美味,我们需要同时控制:
📏 尺寸 + 🍄 配料 + 🍅 酱料

"多参数函数就像做披萨:同时调整多个配方,创造出千变万化的效果!"
🍄
🍄
🍄
📏

参数顺序很重要!

在多参数函数中,参数的顺序决定了它们的含义。

C++ 使用逗号 , 来分隔多个参数。

// 定义:接受两个参数 x 和 y auto checkPoint(auto x, auto y) { hero.moveXY(x, y); } int main() { // 调用:必须按顺序传入 x 和 y checkPoint(10, 30); return 0; }
口诀:"多参数像排队,先来后到要记牢!
定义时什么顺序,调用时同样顺序!"
(x, y)
⬇️
(10, 30)
x=10, y=30
(30, 10) ❌
x=30, y=10 (位置错了!)
🗺️

#43 返回荆棘农场 (Build Trap)

任务: 定义一个函数,接受 x 和 y 坐标。如果那里有敌人,就造陷阱。

auto maybeBuildTrap(auto x, auto y) { // 1. 移动到指定坐标 hero.moveXY(x, y); auto enemy = hero.findNearestEnemy(); if (enemy) { // 2. 使用参数 x, y 造陷阱 hero.buildXY("fire-trap", x, y); } } int main() { while(true) { maybeBuildTrap(43, 50); // 上方 maybeBuildTrap(25, 34); // 左方 maybeBuildTrap(43, 20); // 下方 } return 0; }
(0,0)
🚧

#45 封闭的十字路口 (String Param)

任务: 参数不仅可以是数字,还可以是字符串!我们需要传入建筑类型。

auto maybeBuild(auto type, auto x, auto y) { hero.moveXY(x, y); auto enemy = hero.findNearestEnemy(); if (enemy) { // 使用 type 参数建造 hero.buildXY(type, x, y); } } int main() { while(true) { // 传入 "fire-trap" 或 "fence" maybeBuild("fire-trap", 40, 20); maybeBuild("fence", 26, 34); } return 0; }
🏗️

buildXY(type, x, y)

⬇️

buildXY("fence", 26, 34)

👮‍♂️

#48 函数巡逻 (Patrol)

综合练习: 使用一个函数 patrol(x, y) 来管理所有的巡逻点。

auto patrol(auto x, auto y) { hero.moveXY(x, y); auto enemy = hero.findNearestEnemy(); if (enemy) { hero.attack(enemy); } } int main() { while (true) { patrol(18, 34); patrol(40, 46); patrol(62, 34); patrol(40, 22); } return 0; }
🏗️

代码复用 (Code Reuse)

没有多参数:
你需要写 moveLeft(), moveRight(), moveTop()...
每个位置都要写一个新函数,代码冗余!
使用多参数:
只写一个 moveTo(x, y)
就像用通用的砖块(函数)和不同的设计图(参数)建造各种建筑!
🧱 + 📐 = 🏰

砖块 + 图纸 = 城堡

🎓

大魔法师结业

"多参数像排队,
先来后到要记牢!"

"定义时什么顺序,
调用时同样顺序!"

🏆