CS3 计算机科学 3 | 第 47-55 关
X: 0, Y: 0
🚀

方向与坐标变化

Direction & Coordinates

🗺️ 坐标导航
📐 相对运动
🌐

坐标系:宇宙地图

游戏世界是一张巨大的网格地图。

  • ➡️ X 坐标:横向地址 (Left - Right)
  • ⬆️ Y 坐标:纵向地址 (Up - Down)
// 移动到绝对坐标 (X=30, Y=40) hero.moveXY(30, 40);
"hero.pos.x 是我当前的横坐标,hero.pos.y 是纵坐标。"
(0,0)
X
Y
🚀
🕹️

相对移动 (Relative Move)

[Image of vector addition diagram]

在当前位置的基础上进行加减,实现“向左走”或“向右走”。

while(true) { float x = hero.pos.x; float y = hero.pos.y; // 向右走:X + 10 x += 10; // 向左走:X - 10 // x -= 10; hero.moveXY(x, y); }
🛸
📉

斜线飞行 (Diagonal)

同时改变 X 和 Y,就能走出斜线!

while(true) { // 向右上方飞: X加, Y加 auto newX = hero.pos.x + 5; auto newY = hero.pos.y + 5; hero.moveXY(newX, newY); }

轨迹:↗️ 右上角

🚀
🏗️

相对建造 (Relative Build)

不仅可以移动自己,还可以在别人旁边造东西。

if (enemy) { // 在敌人左边 20 米处造围栏 float buildX = enemy.pos.x - 20; float buildY = enemy.pos.y; hero.buildXY("fence", buildX, buildY); }
"拦截敌人的必经之路!"
🚧 ⬅️ 20m ⬅️ 👾
🧭

方向判断 (Compare Coords)

比较坐标大小,就能知道敌人的方位:

if (enemy.pos.x < hero.pos.x) { // 敌人的X更小 -> 敌人在左边 hero.buildXY("fire-trap", 25, 34); } else if (enemy.pos.x > hero.pos.x) { // 敌人的X更大 -> 敌人在右边 hero.buildXY("fire-trap", 55, 34); }
👆 Y > Hero.Y
👈 X < Hero.X 🤖 👉 X > Hero.X
👇 Y < Hero.Y

中点计算 (Midpoint)

想站在朋友和敌人中间?用平均数公式!

// 计算 X 的中点 float midX = (friend.pos.x + enemy.pos.x) / 2; // 计算 Y 的中点 float midY = (friend.pos.y + enemy.pos.y) / 2; hero.moveXY(midX, midY);
数学原理:(A + B) / 2 = 中间值
👨‍🌾 🛡️ 👹
Midpoint
↕️

垂直追踪 (Vertical Logic)

根据敌人的高度 (Y坐标) 来调整自己的位置。

if (yak.pos.y > hero.pos.y) { // 敌人在上方,我要往下建墙 hero.buildXY("fence", x, y - 10); } else { // 敌人在下方,我要往上建墙 hero.buildXY("fence", x, y + 10); }
🐂
⬇️
🚧
🤖
🎓

导航员口诀

"X 是左右,Y 是上下,
加减运算能搬家。"
"大于小于判方位,
中点公式除以二!"
🌟