精華區beta GameDesign 關於我們 聯絡資訊
: 推 ddavid:有啦,就我前面講把問題特殊化到預設我方Deck、只對對方特 01/31 06:09 : → ddavid:定行為做反應,這樣可以寫出個還算有樣子的AI XD 01/31 06:10 : → ddavid:古老DOS時代的一個MTG官方遊戲AI也就這樣幹(+作弊XDDD) 01/31 06:10 : → ddavid:有限狀態機是用在組合技(組合技完成到某些階段時出牌策略 01/31 06:11 : → ddavid:會完全不同)或某些特定局面這樣,當然拆成純if then else 01/31 06:13 : → ddavid:組合也可以,不過複雜的遊戲可能會讓if then else條件跟層 01/31 06:15 : → ddavid:數過多就是了,我個人是覺得這時FSM也許好理解一點XD 01/31 06:16 補充一下好了,就降低難度過的問題來說,我可能會採取混合式的做法就是。以 MTG來舉例,假設AI打的是一個組合技型的Deck,我可能至少會開兩台FSM在跑。一台 表示我自己組合技進度,另一台去注意處理對方情況(主要是針對可能可以破壞你組 合技的手段),上面再架一層if then else對這些FSM的輸出綜合處理就是。舉例說 : 1.自身FSM 假設完成Combo需1、2兩個元件,那FSM一開頭依手牌情況可能可以進入「沒拿到 元件,濾牌」、「進行元件1」、「進行元件2」之類的。過程中就依自己完成度來處 理,可能會有「已完成1」、「已完成2」或「皆完成待發動」之類的狀態。 2.對手FSM 事先考慮好這個組合技害怕的東西或需要注意的狀況、對手類型等等。比如有些 組合技Deck是根本無視對方生物攻擊跟自己血量,那對於對手下攻擊用的生物就連反 應都不用反應(往往這種Deck也不存在多少反應手段XD)。可是在MTG的世界中,就 往往會有對手下第一塊地是藍色,組合技就要開始疑神疑鬼了,到了對方兩塊藍地站 著硬是發呆不做事更是達於極致XD。這時對手FSM可能就進入一個「對手可能有破壞 手段」的狀態這樣。如果精細一點就可以分開多個需要反應的狀態,而如果存在多個 可能同時需要考慮的狀態,那我可能就拆成多個FSM一起跑。而如果發現拆的結果是 其中一些FSM只剩是與非兩個狀態,那這些狀態就不用FSM,而是往上層丟給if then else處理就好)。 3.if then else 最後就把1.2.的東西合起來弄到這個決策層來處理就是了。比如說自身FSM是「 進行元件1」的情況,如果對手FSM什麼重要狀況都沒有,就毫無疑問的把元件1這牌 打出來就好。可是如果是個「對手可能有破壞手段」的狀態,那可能就要簡單算一下 法力算牌之類的。如果我一次能出兩張元件1、對手法力只能破壞一張,又或是我有 足夠反反制手段,那就衝了。反之可能就等一等法力狀況或手牌狀況的改變這樣。而 這裡的決策結果也可能反饋到各個相關FSM上這樣。 不過這些都只是遊戲中決策的部分而已,我覺得就算回歸到一般性問題,最難的 也不是這部分。最難的是任意給予Deck時,讓AI自己理解自己的Deck能幹什麼、怎麼 贏、對手又可能幹什麼、甚至自行組Deck這部分啊XDDD 這部分不Learning我不知道還有什麼方法,但也如你說的Learning的效果也很難 好,光是要讓AI自己懂得套牌裡有一個組合技這點就有夠難XD 必殺組合技部分倒是還有硬讓它排列組合試自己Deck中所有牌加上各種盤面狀態 的最後search奧義啦(search space定錯就永遠找不出來了XD),不算是一擊殺組合 技的就......XD -- 「你會死。」不由分說,他被狠狠罵了一頓。 午休時,我拉著他到安靜的地方。「你怎麼對著人這樣說話呢?」 「他本來就會死,難道他不會死?」他抱怨。 --預言師 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 編輯: ddavid 來自: 118.167.13.211 (01/31 07:07)
rexrainbow:PUSH 01/31 10:22
pproar3:推此討論串 01/31 15:34
mudgame:我看到快爆炸了..好複雜呀..>.< 01/31 17:16
ddavid:不用想太多就是,因為這本來就是難題XD 01/31 17:17
rexrainbow:一種簡單但沒有效率的方法: 把每種有意義的組合賦予 01/31 19:09
rexrainbow:一個值, 例如說越好的組合值越大. 因此AI在選擇的時候 01/31 19:12
rexrainbow:就朝使手中的組合最大. 同理可以套在AI判斷對手的組合 01/31 19:12
ddavid:這樣必須事先人為分析,如果人為分析漏掉的東西就會難以出 01/31 19:37
ddavid:現。 01/31 19:38
ddavid:而且以單一分數評估會造成AI會在組牌時把一堆不相干的Combo 01/31 19:38
rexrainbow:對, 所以對遊戲越熟的人, 做出來的組合會越詳細. 01/31 19:39
ddavid:混到同一個Deck中,但是那種並無直接Combo價值的牌被大量忽 01/31 19:39
ddavid:視掉。 01/31 19:40
ddavid:而且你講的是有中心主題的Combo Deck,控制跟快攻之類Deck 01/31 19:41
ddavid:有時常常不見得有決定性Combo,這種牌用你的方法會湊不出來 01/31 19:41
ddavid:XD 01/31 19:42
rexrainbow:所以實際上應該要有兩層決策, 一種是決定戰略, 另一種 01/31 19:42
ddavid:要湊得出來會變成你得為單一主題的Deck就做一分全部牌的評 01/31 19:42
rexrainbow:是戰術. 01/31 19:43
ddavid:估,這已經變成你把題目用人力簡化到「單一類型Deck」了。 01/31 19:43
rexrainbow:回應被切開了 QQ 01/31 19:44
ddavid:我這樣講好了,以MTG為例,歷史上不乏一些特殊的Deck是新 01/31 19:44
ddavid:系列出了一段時間才被發現的,有時用了一堆看起來根本是無 01/31 19:45
ddavid:用卡,但是卻要丟在一整副搭配運作(而不是3張左右就能成型 01/31 19:46
ddavid:的組合技),這種牌就算人類給它一個很高的分數,除非你把 01/31 19:46
ddavid:搭配的整副都配給它,不然要嘛是單用它變廢牌,不然就是不 01/31 19:47
ddavid:可能選到它這樣。 01/31 19:48
ddavid:可是這樣又變成人類幫它湊好牌了。 01/31 19:49
ddavid:XDDD 01/31 19:53
ddavid:總之我是覺得用經驗法則介入當然沒問題,那就是簡化問題這 01/31 19:55
ddavid:樣。不過像MTG這麼大、歷史累積的牌量這麼多的情況下,光是 01/31 19:56
ddavid:人力經驗法則都超難了,更不要說我們真的打比賽還有賽場評 01/31 19:57
ddavid:估之類有的沒的小技巧XD 01/31 19:57