Re: [閒聊] 到底要怎麼用FSM寫個簡單的AI

作者: SecondRun (雨夜琴聲)   2021-07-15 22:20:30
問點AI的問題 但跟FSM無關
戰棋所以每次都是Idle的時候執行RunAI()
不過我看之前的專案跟這次的專案流程有一點不同
第一種 :
void Idle.RunAI()
{
ai = unit.AI;
ai.Think();
}
void BattleController.ChangeAI(BattleUnit unit, State state, object params)
{
switch (state)
{
State.Fear:
var ai = new FearAI();
ai.SetParams(params);
unit.AI = ai;
return;
}
}
第二種 :
void Idle.RunAI()
{
switch (unit.state)
{
State.Fear:
if (fearAI == null) fearAI = new FearAI();
ai = fearAI;
ai.SetParams(unit.stateParams);
break;
default:
ai = normalAI;
break;
}
ai.SetEntity(unitEntity);
ai.Think();
}
void BattleController.ChangeAI(BattleUnit unit, State state, object params)
{
unit.state = state;
unit.stateParams = params;
}
第一種每個角色身上都有AI,在角色改變狀態的時候直接把unit.AI置換掉
第二種就Idle裡面塞了一堆AI,輪到角色的時候再把角色的參數丟到AI裡面
兩種做法好像...差不多??
第二種是不是好管理一點啊
作者: iovoecu (XX)   2021-07-15 22:21:00
大師==
作者: wwndbk (黑人問號)   2021-07-15 22:26:00
恩恩 跟我想的依樣
作者: lturtsamuel (港都都教授)   2021-07-15 22:30:00
已經叫idle就不該讓它有是其他狀態的可能 應該用型別來保證這一點
作者: siscon (laisan)   2021-07-15 22:33:00
第一種有寫跟沒寫一樣idle跟fear好像是不同階層的state 沒有衝突 吧
作者: lturtsamuel (港都都教授)   2021-07-15 22:35:00
策略模式的話 一般會在別的地方做狀態判斷 把策略賦給他 要用的時候就不要判斷是不過我蠻不喜歡看到策略模式的 很難tracecodeㄏㄏ
作者: devilkool (對貓毛過敏的貓控)   2021-07-15 22:47:00
策略模式搭簡單工廠

Links booklink

Contact Us: admin [ a t ] ucptt.com