第 3-5 关
🗺️ 游戏开发 2
📋

标准操作规程 (SOP)

Standard Operating Procedure

🎯 锁定目标
📜 执行命令
🚒

什么是“标准操作规程” (SOP)?

在现实中,SOP 是一套标准的行动步骤
👨‍🚒 消防员 SOP: 接警 → 穿衣 → 上车 → 出发。
👨‍⚕️ 医生 SOP: 检查呼吸 → 量血压 → 输液。

游戏代码里的 SOP:
"所有士兵一出生,就按照【这套步骤】行动!"
📜
⬇️
👮‍♂️👮‍♂️👮‍♂️
一份说明书,全员执行
🎯

SOP 第一步:锁定主角

谁来执行这个规程?我们要先找到他。

def fightEnemies(event):
  # event.target 是这次事件的"主角"
  unit = event.target
  # 以后都叫他 unit (单位)
  unit.attack(enemy)

就像老师点名:“这次轮到小明,大家看小明做示范。”

+
🤠
unit = event.target
⚔️

SOP 示例一:战斗

def fightEnemies(event):
  unit = event.target # 1. 确认是谁
  while True: # 2. 一直做
    enemy = unit.findNearestEnemy()
    if enemy: # 3. 有怪就打
      unit.attack(enemy)

翻译成白话就是:
“认领任务 → 只要活着 → 找敌人 → 砍他!”

1. 锁定 unit
⬇️
2. 寻找敌人
⬇️
3. 攻击 enemy
🔄 循环
🔥

SOP 示例二:集合

有时候不需要一直打仗,只需要走到指定位置。

def centerFormation(event):
  unit = event.target
  # 所有人去篝火旁集合!
  unit.moveXY(40, 36)
配合命令:
game.setActionFor("soldier", "spawn", centerFormation)
🔥
🏃
🏃
🛡️

SOP 示例三:守卫林道

这个 SOP 多了一步:记住家在哪

def defendLane(event):
  unit = event.target
  # 1. 记下出生点 X 坐标
  startX = unit.pos.x
  while True:
    enemy = unit.findNearestEnemy()
    if enemy:
      unit.attack(enemy)
    else:
      # 2. 没敌人就回家
      unit.moveXY(startX, 16)
🏠
👮
👾
📣

全军出击:setActionFor

写好了 SOP,怎么发给所有人?

game.setActionFor("soldier", "spawn", fightEnemies)

这句话的意思是:
“游戏请注意:当士兵发生出生事件时,自动执行 fightEnemies 这个 SOP。”

从此你就是给全军制定规则的总指挥官!
📣
👮
👮
👮
📐

SOP 万能模板

以后写事件处理,直接套用这个模板:

def myHandler(event):
  # 1. 认领主角
  unit = event.target

  # 2. 记录初始信息 (可选)
  # startX = unit.pos.x

  # 3. 死循环干活
  while True:
    # 你的逻辑...
🛠️
万能工具箱
🧮

语法与数学小知识

  • 📦 变量 (Variable)
    unit, startX 就像贴了名字的盒子。
  • 🔖 属性 (Attribute)
    unit.pos.x 这里的点号 . 就像翻开说明书,找到 "位置" 这一页的 "x" 行。
  • 📈 坐标 (Coordinate)
    地图就是数学课上的直角坐标系!
📦🏷️📈
🏆

指挥官口诀

"先看是谁来执行 (unit),
再记家在哪 (startX),
大脑一直转 (while True),
有怪打怪,没怪回家!"
最后别忘发命令:
game.setActionFor!
🎖️