请求解析Pygame吃豆人幽灵跟随玩家函数followPlayer的代码含义
解析幽灵跟随玩家函数
followPlayer 的逻辑 先帮你拆解这个函数的核心逻辑,首先得明确几个代码里没写但能推断出来的隐含定义:
- 方向映射:代码里的
dir值对应方向应该是:- 0 = 向右(x轴正方向)
- 1 = 向下(y轴正方向)
- 2 = 向左(x轴负方向)
- 3 = 向上(y轴负方向)
- 参数含义:
g:幽灵数组ghosts的索引,用来指定要控制的目标幽灵dirs:长度为4的数组,每个元素表示对应方向是否可通行(值为1代表能走,0代表被阻挡)
- 辅助函数:
aboveCentre(ghosts[g])应该是用来判断当前幽灵是否处于地图中心区域上方的工具函数
接下来逐块解析代码逻辑:
第一步:获取当前幽灵的移动方向
d = ghosts[g].dir
先把当前幽灵的移动方向存到变量d里,方便后续条件判断复用。
第二步:纵向移动时,优先切换到横向追玩家
if d == 1 or d == 3: if player.x > ghosts[g].x and dirs[0] == 1: ghosts[g].dir = 0 if player.x < ghosts[g].x and dirs[2] == 1: ghosts[g].dir = 2
这段逻辑是:如果幽灵当前正**向上(3)或向下(1)**移动,就优先关注玩家在左右方向的位置:
- 若玩家在幽灵右侧,且向右的路径可通行,就把幽灵方向改成向右(0)
- 若玩家在幽灵左侧,且向左的路径可通行,就把幽灵方向改成向左(2)
第三步:横向移动时,优先切换到纵向追玩家
if d == 0 or d == 2: if player.y > ghosts[g].y and dirs[1] == 1 and not aboveCentre(ghosts[g]): ghosts[g].dir = 1 if player.y < ghosts[g].y and dirs[3] == 1: ghosts[g].dir = 3
这段逻辑是:如果幽灵当前正**向右(0)或向左(2)**移动,就优先关注玩家在上下方向的位置:
- 若玩家在幽灵下方,且向下路径可通行,同时幽灵不在地图中心上方,就把方向改成向下(1)
- 若玩家在幽灵上方,且向上路径可通行,就把方向改成向上(3)
整体逻辑总结
这个幽灵的AI是**「横竖交替优先」**的跟随逻辑:
- 幽灵当前走纵向时,优先尝试切换到左右方向追玩家(前提是目标方向可通行)
- 当前走横向时,优先尝试切换到上下方向追玩家(向下时有额外的位置限制)
- 所有方向切换都以「不撞墙」为前提,确保幽灵只会往可通行的方向移动
内容的提问来源于stack exchange,提问作者박태규
相关产品推荐
相关产品推荐

