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

看板Marginalman作者 (雨とカプチーノ)時間4年前 (2021/07/15 22:20), 4年前編輯推噓4(514)
留言10則, 5人參與, 4年前最新討論串3/3 (看更多)
問點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裡面 兩種做法好像...差不多?? 第二種是不是好管理一點啊 -- (づ′・ω・)づ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 150.117.131.129 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1626358834.A.1D0.html

07/15 22:21, 4年前 , 1F
大師==
07/15 22:21, 1F

07/15 22:26, 4年前 , 2F
恩恩 跟我想的依樣
07/15 22:26, 2F

07/15 22:30, 4年前 , 3F
已經叫idle就不該讓它有是其他狀態的可能 應該用型別
07/15 22:30, 3F

07/15 22:30, 4年前 , 4F
來保證這一點
07/15 22:30, 4F
輪到每個角色都會先進Idle 然後才看是要玩家操作還是AI操作 AI的話就跑RunAI這樣

07/15 22:33, 4年前 , 5F
第一種有寫跟沒寫一樣
07/15 22:33, 5F

07/15 22:34, 4年前 , 6F
idle跟fear好像是不同階層的state 沒有衝突 吧
07/15 22:34, 6F

07/15 22:35, 4年前 , 7F
策略模式的話 一般會在別的地方做狀態判斷 把策略賦
07/15 22:35, 7F

07/15 22:35, 4年前 , 8F
給他 要用的時候就不要判斷
07/15 22:35, 8F

07/15 22:36, 4年前 , 9F
是不過我蠻不喜歡看到策略模式的 很難tracecodeㄏㄏ
07/15 22:36, 9F
我研究一下

07/15 22:47, 4年前 , 10F
策略模式搭簡單工廠
07/15 22:47, 10F
※ 編輯: SecondRun (150.117.131.129 臺灣), 07/15/2021 23:02:46
文章代碼(AID): #1Wy4Go7G (Marginalman)
文章代碼(AID): #1Wy4Go7G (Marginalman)