作者artpoet (靈魂之舞)
看板GameDesign
標題Re: [程式] 一般遊戲的AI作法有人知道嗎?
時間Tue Jan 29 12:08:26 2008
我個人不算什麼老手
只能提供一點粗淺的想法互相討論
首先AI的撰寫方法
一般最常用的就是前面大大所提到的有限狀態機
有限狀態機顧名思義
就是在有限數量的狀態下經過判斷而反應出不同的行為模式
就以你在文章中推文的範例來說好了
HP太少時補血,HP正常時隨機攻擊
此時"HP太少"跟"HP正常"....即為所謂的"狀態"
當遇到"HP太少"這項狀態該做什麼
或當遇到"HP正常"這項狀態該怎麼反應
即為使用有限狀態機設計AI的基本概念
所以其實你的原始想法裡面
已經存在著有限狀態機的雛型了
另外,為了用較容易的方式設計出一個具有多變性的AI
AI的設計也經常會使用到機率來加以輔佐
例如:
當"HP太少"時:
XX%的機率用魔法補血、XX%的機率用道具補血、XX%的機率繼續攻擊、XX%的機率逃跑
而前提是對該角色是否具有補血魔法或補血道具進行判斷
並要對MP不足、道具不足時的行為反應進行設定
(當然、此部份方法很多,有限狀態機的狀態是有限的,但設計的方法是無限的)
將許多不同模組的判斷式以及反應方法,透過流程來撰寫成文件
原則上就會具有有限狀態機的大致型態了
再來,AI設定一個很重要的要點就是,流程
一開始處於最原始的狀態
接著就要開始設計不同層級的先後判斷模式
例如:
===============================================================
初始待機狀態
----------------------------第一層-----------------------------
敵對角色是否進入攻擊範圍內
是=>進行第二層判斷
否=>回到初始待機狀態
----------------------------第二層-----------------------------
敵對角色等級是否比自己高出超過五級、自己血量是否少於10%
是=>90%朝玩家反方向移動(移動多遠、多久,就要延伸到第三層)
10%朝玩家進行普通攻擊(使用何種技能,就要延伸到第三層)
否=>95%朝玩家進行普通攻擊
5%使用技能(使用何種技能,同樣就要延伸到第三層)
===============================================================
也就是說
經過了兩層(或更多)的判斷以後,才能決定該角色所要做出的行為模式
再來,談談你的紙牌遊戲吧
我個人紙牌遊戲的經驗不多
因此只能大略提一點想法
首先要做紙牌遊戲的AI
先要透徹瞭解該紙牌遊戲的"規則"
當你手上拿到一組牌組之後
依據你的規則所給予的優勢
不同牌組可以給予不同的出牌機率
這部份很難用量化的文字敘述
因為不同規則給予紙牌的出牌方向有著很大的差異
但紙牌遊戲通常都是以完全扣除對方生命值、以及保持自己生命值為最終目的
你可以以這個為方向
整理出你的紙牌遊戲規則中,能夠較佔優勢的出牌順序有哪些
如果手上剛好有可以達成優勢出牌順序的紙組
那麼優勢出牌順序的首張牌卡即可大幅增加其出牌機率
不過前提是,要先進行對於自己以及對方生命值的估算
假如自己生命值過低,而對方生命值又非一兩次可以擊倒
此時就可能要增加防守、迴避、補血性質的牌卡出牌機率
最後一點能夠較輕易設計出具有挑戰性AI的方法就是,作弊
例如連續派給電腦較佔優勢的牌組
或者讓電腦可以依據玩家手上的牌組進行反應
當然這部份要適當參酌
不可以作弊做到讓玩家摔手把砸鍵盤的程度
我自己設計AI時常說的說法是:
"只要不被玩家發現作弊就不算作弊"
因此即便作弊,還是要調整不同的給好牌機率
不能每次都給電腦好牌
也可在電腦生命值過低的狀態下再提升給予好牌的機率
大致上就這樣
AI設計上細部可以再拆解、舉例、分析的部份當然還有很多
我這邊提供一點基本的想法
希望對你能有所助益
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.134.1
推 geken:推 01/29 15:14
推 kuso0516:推作弊XD 01/29 20:13
推 mudgame:這篇好長,分兩三次才看完..^^" 01/29 20:39
→ mudgame:不過真的很受用,尤其那個作弊..>O< 以前都沒想過可以這樣 01/29 20:40
→ mudgame:做,難怪有時打遊戲王,會發現電腦的牌超好,我的超爛這樣XD 01/29 20:40
→ mudgame:然後..謝謝大大的指導,總算對AI有比較進一步的認識了~:) 01/29 20:42
推 chrisho:都有作弊啦,只差明不明顯而已,像三國志大戰hard最後... 01/30 12:10
推 softcloud:按 電腦作弊啦! 01/30 14:00
推 LinaInverse:記得AOE作弊也很明顯..@@ 01/30 16:28
推 kuso0516:戰略遊戲作弊都超嚴重的XD 01/30 17:31
推 chrisho:不作弊的話,最好開發者都有那美國時間全專做AI... 01/31 12:07
推 ddavid:有一個可能性啦,就是學生在校把遊戲AI當專題、論文做,直 01/31 16:05
→ ddavid:接帶進遊戲公司、同人遊戲發表或是自組公司XD 01/31 16:06
推 loading1:作弊還挺有趣的 02/02 21:42