本文為系列第四部分,聚焦螞蟻單步移動決策核心函數:GetMaxSmell(感知範圍內最大信息素)、IsTrace(軌跡回溯檢查)、MaxLocation(三方向比較)、CanGo/JudgeCanGo(可行性判斷)、方向轉換輔助函數。
根據螞蟻當前朝向 ddir,掃描前方 ANT_EYESHOT 範圍內的矩形區域:
UP:y 遞減半平面DOWN:y 遞增半平面LEFT:x 遞減半平面RIGHT:x 遞增半平面掃描邏輯:
!JudgeCanGo)。MAX_SMELL。IsTrace)。ms。檢查座標 (xxx, yyy) 是否存在於螞蟻最近 TRACE_REMEMBER 步軌跡陣列 tracex[]/tracey[] 中。存在回傳 1,否則 0。
輸入前方 num1、左轉 num2、右轉 num3 最大信息素值。回傳:
平局優先序:前方 > 左 > 右(依 if 判斷順序)。
檢查前方、左轉、右轉三方向是否可通行,回傳 0-7 編碼:
| 回傳值 | 含義 |
|---|---|
| 0 | 前、左、右均可通行 |
| 1 | 前不可,左、右可 |
| 2 | 左不可,前、右可 |
| 3 | 右不可,前、左可 |
| 4 | 前、左不可,右可 |
| 5 | 前、右不可,左可 |
| 6 | 左、右不可,前可 |
| 7 | 三方向全不可(死胡同) |
條件:座標在地圖邊界內(1..MAXX, 1..MAXY)且 block[xxx][yyy] == 0(無障礙物)。
TurnLeft(UP) = LEFT; TurnLeft(DOWN) = RIGHT;
TurnLeft(LEFT) = DOWN; TurnLeft(RIGHT) = UP;
TurnRight(UP) = RIGHT; TurnRight(DOWN) = LEFT;
TurnRight(LEFT) = UP; TurnRight(RIGHT) = DOWN;
TurnBack(UP) = DOWN; TurnBack(DOWN) = UP;
TurnBack(LEFT) = RIGHT; TurnBack(RIGHT) = LEFT;
CanGo 將三方向通行性壓縮為 3-bit 狀態,決策邏輯簡潔高效。