作者zxcmoney (lol)
看板GameDesign
標題Re: [請益] 民國無雙 v22
時間Tue Feb 16 05:16:17 2010
嗯 我先從結論說起
我現在有興趣製作此遊戲的
戰略AI編輯器 與 戰術AI編輯器
不過我不打算將目前的AI修改到完善
除了會避免AI作一般人類可以直接觀察到的腦殘行為外
其他皆遵照原始的AI設定放入對應的判斷位子 等有心人士去設定
基本上編輯器會將AI行動的判斷集中並分成各階段
應該是能很快就找到AI判斷的位子
總之 在收到原始碼後就會開始寫
如果不滿意當時的成果與影響或著
相信這遊戲直到被世人遺忘也不會有人用這編輯器產生有用的AI
無視這個編輯器即可
※ 引述《chenglap (無想流流星拳)》之銘言:
部分引言恕刪
: 其實我想最最基本的問題是, 論遊戲開發, 永遠是求諸人不如求諸己.
: 如果自己不寫的話, 那任何的提案或者企劃, 都不可能超越紙上的. 主
: 要問題在於, 每人心目中都有自己理想的「遊戲」或者「系統」, 沒有
: 人理想中的遊戲是完全一樣, 能夠實現自己理想中的系統的, 哪怕只是
: 部份也好, 基本上也只有自己一個人會去完成.
: 而人會願意自己完成的, 就只有自己的那一套系統.
: 在用別人的系統時, 那往往不會是 100% 合乎自己所想的, 但是如果能
: 有 70% 以上合乎自己的想法, 大部份人就會接受了. 畢竟這是使用者
: 的接受範圍, 但開發者的接受範圍的話, 如果是免費的人力, 那是十分
: 狹窄的, 這是我常說同人遊戲開發中, 「免費的人力比起受薪的人力更
: 昂貴」的原因.
: 如果要將一件工作交予別人, 那麼不論那是甚麼工作, 也等於將那件東
: 西的設計的權利, 也交予了對方. 這才有可能交予別人, 自己設計東西
: 然後讓別人實現, 一般來說只有給錢才可能做得到.
對部分程式設計者來說 除了物資外 精神上的回報也是一種原因
對於能實現自己理想中的系統的滿足感是一種
對於設定好的題目 帶來的挑戰 在完這項挑戰帶來的成就感也一種原因
不過受限人的思想無法無直接交流 70%或許已經是不錯的成果了
如果是同時符合一群人的70% 我想那算是優秀的設計了
對此成果不滿可以選擇自己完成
或著利用現有的設計去完成自己的目標
在有限的情況下去發展出更高的可能性
這是屬於編輯器玩家的一種樂趣
: 所以如果要設計一個系統出來, 最好是自己去實現它, 這是我說為何要
: 寫(即程式碼)出來的原因. 主要是, 如果自己不寫的話, 那會停留在設
: 計階級然後流產的可能性是很大... 在這個 GameDesign 版, 之前也有
: 不少人說過一個重要的問題, 就是其實最難的事情, 就是「開始然後完
: 成」, 半途而廢是遊戲設計最常出現的問題. 這往往是因為我們都會喜
: 歡做一些自己有興趣的部份 (例如企劃) , 避開自己不感興趣的部份 (
: 例如除錯) , 但大家有興趣的部份其實往往相同, 不喜歡的部份也往往
: 相同, 要完成遊戲和開發遊戲, 只能在做自己喜歡的部份時, 也去做自
: 己不喜歡的部份.
嗯 我做的部分算是系統規劃的建議
只是找到有趣的題目後就高興的開始寫答案
不過你沒有這部分的需求 所以算是自HIGH吧
其中「開始然後完成」確實很困難
不過其實這部分對每個人來說困難的部分並不同
對我來說開始是很容易 解題並規劃的過程本身就是報酬
而以規劃的基礎完成開始實作的內容也很快
最大問題在於除錯 並非邏輯上的錯誤
而是手殘導致資料傳遞錯誤或是或是認知問題導致指令使用錯誤
還有依照系統規劃重新實作幾次就不知道為何自動消失的錯誤
而且在完成這艱辛除過程後 並不會有相對應的補償(如果有錢拿 除錯拿到的應該特別爽)
導致完成的最後一個步驟很困難
就我的價值觀 做出承諾後會有連带要負起的責任
基本上對於存在自己討厭的責任的事 除非能取得相對應的報酬(各方面的都算)
否則應該不會自願性的承諾的 (不過回想人生所作的不負責任的承諾好像意外的多)
: 除了寫之外, 寫本身也包括了自己測試的過程, 像人工智能這種東西,
: 推理時往往和實際執行時有落差, 如果不去寫 code , 應該是沒有機會
: 證實一個人工智能是否可行或者有破綻.
: 所以這其實是避不過的.
嗯 這是主要是邏輯上的錯誤吧?
我覺得很容易再實行時直接觀察出來(不過也有可能是讀取資料時有錯)
我想越複雜的決策就需要越多的遊戲經驗才能完成對應的決策過程
此時有編輯器也比較容易在出錯時修改吧
也容易讓各個玩家的經驗反應給有能力修改AI的人(修改的門檻較低)
: 所以我十分鼓勵你去實現他, 我願意開放我的 source code 給你, 我
: 的人工智能其實大部份都放在了幾個大的 procedure 裡, 有些會細碎
: , 雖不能說容易修改, 但是直接改下去應該最方便.
開始實作後對這系統 就存在除錯的任務
: 我想最基本的問題是截取資訊本身, 人工智能要實現, 基本上以上
: 含糊的部份都必須要精準的變成實際的算法.
: 比方說, 「軍力強過對方就攻擊」, 這是看起來簡單, 實現卻很複
: 雜的, 因為這包括了一個重要的問題, 就是「電腦怎樣判斷自己軍
: 力的強弱」, 判斷本身就已經是一個人工智能了.
: 舉例, 以我目前的 source code, 部隊有一個 function 叫
: battlevalue , 用途就是為每個部隊定一個戰力指數, 方便部隊判
: 斷是強是弱.
: function TUnit.BattleValue(seed : Integer) : Integer;
: var i : Integer;
: begin
: // 1 general 綜合戰力指數
: // 2 front 前排戰力指數
: // 3 back 後排戰力指數
: if (seed = 1) then
: begin
: i := MaxHP;
: end else
: begin
: i := Strength;
: i := i div 2 + (i * Morale div MaxMorale) div 2;
: end;
: if (seed < 2) then
: begin
: i := i * (BS + WS) div 6;
: end else
: begin
: if (seed = 2) then i := i * (WS * 2 + BS) div 9;
: if (seed = 3) then i := i * (WS + BS * 2) div 9;
: end;
: BattleValue := i;
: end;
: 大概你可以從數值的名稱, 看出那代表是甚麼, 這是目前對戰
: 力判斷的形式. 但這十分的陽春, 自然會產生缺憾, 例如把戰
: 力較弱的部隊看成是戰力較強的部隊, 或者低估了實力, 這就
: 是人工智能真正麻煩的地方, 而這種麻煩是寫成了程式碼後才
: 能夠發覺出來的.
簡單的說這函式本身的邏輯錯誤 BS 與 WS在傷害計算上受到兵力影響
一個是按現行兵力為最佳時的比例影響 另一個則是單以總數影響
此算式並沒有計算到 此外就是會有A方單一部隊強度高過B方所有部隊個別強度
但是B方計算總合強度高過A方的這種缺點
這種兵力判斷的決策其實相當複雜
人對於一場戰鬥所能觀察到判斷項其實相當有限
所以真正的建立一個有用的判斷函式 需要足夠的遊戲經驗才能建立比較有用的函式
因為這遊戲戰鬥存在戰術面的問題 無法斷定對手決策的戰術致入函式計算
如果連可能決策都要計算不如直接用戰術AI模擬然後回報戰果
而且如果連設計者本身都不了解設計決策規則
其他人要獨立設計出來除非有過去其他可以參考的經驗
否則是要用大量時間遊玩才會有可以製作出能夠實用的決策規則
如果有編輯器的話每個有意願的人更容易嘗試並實驗
提供一些決策的規則情報 一點情報慢慢累積起來就可以建立出實用的決策規則
舉例的話大概就像玩遊戲 每個人提供一點心得與攻略
最後再有人統整就可以完成一份完美攻略
大概就是這樣的感覺
: 而這種算式本身就是人工智能重要的一部份, 可以說, 如果電
: 腦要進行任何判斷, 至少先要有判斷部隊強弱的能力. 如果欠
: 缺了這種能力, 任何對戰力的判斷的人工智能都不會有意義,
: 無法成立, 因為欠缺了最重要的「源頭資訊」, 「可比較的資
: 訊」.
: 這些工具是最重要的, 能否準確的判斷部隊的強弱, 對戰略和
: 戰術智能的影響十分大. 因為根據誤判之下作出的決定, 無論
: 過程是否複雜或者合理, 結果一定會是錯誤的. 這是工程上常
: 說的一個問題, Garbage in, garbage out, 進去的資訊品質
: 不高的話, 根據那資訊進行的決定也不會好.
: 那就是說, 如果你要設計人工智能, 就必須要動到函數的內容
: 和運作, 而不能單純的依賴遊戲裡提供給你的函數. 而如果你
: 不動這些相關函數, 你幾乎是無法開發出任何可用的人工智能
: , 但這些東西如果要用編輯器放出來, 如我之前所說, 這等同
: 「設計一個程式語言和編譯器」.
我記得有說 編輯器所需的函數有可以幫忙寫
只要提供 設定的資料結構即可
同時會附上舉例的說明
我認為你舉的例子是 正確近 錯誤出
使得接下來的結果除非發生神奇的巧合 否則一率是錯誤的
而要修正的則是該函式的邏輯 如果函式的邏輯錯誤
產生的結果8成是錯誤的(我相信存在2成的巧合)
如果函式的邏輯是正確的
產生的結果8成是正確的(我相信存在2成的意外)
: 因為這和其他 custom 的部份不一樣, 其他 custom 的部份,
: 你改的是「參數」, 參數只是一種「資料」.
: 但人工智能不能只看成一種「資料」, 人工智能是「邏輯」,
: 你要向電腦輸入資料, 讓它應用是容易的, 但你要讓電腦理解
: 一個邏輯, 寫程式, 已經是最快, 最方便, 最有可能達到的方
: 法, 不可能捨近求遠.
就我的認知 在遊戲中的人工智能
應該是收集正確的「資料」後轉為有用的「資訊」
依照設計的「邏輯」作出正確的「決策」行動
: 這本身就是人工智能.
: 問題就是為了開放讓玩家做人工智能, 本身就已經需要很多人工智能.
: 事實上, 要判斷一個人工智能的錯誤, 需要的是比那個人工智能更優越
: 的人工智能.
: 這就像你寫一個象棋的人工智能, 和寫一個「能找出你的人工智能的錯
: 誤的人工智能」, 後者其實比前者還要複雜.
我了解if else就算是簡單的人工智能了
只是希望寫出AI判斷 在實行階段避免原本設定上不合理的行動 仍然可以實行
如:舉例的總計10AP的行動在超出的那次應該要行動失敗
會導致TP.SP<0的行動也應該要行動失敗
這只是預防前面決策時可能遺漏的決策判斷 或是 惡意設定
例:只有4AP的國家卻整備了20隻的部隊
只有14TP的國家卻蓋了一堆裝甲兵學校 成立裝甲兵大軍
我不太了解這種判斷 比前面複雜的原因為何?
我想可能是我表達能力不好 產生的誤解
如果不是 有可能是我理解能力不足 而誤解你的意思
請詳加說明
: 這是我說這為甚麼是人力黑洞的原因, 你想想, koei 的三國志威力加
: 強版, 也不可能去到讓你修人工智能的地步, 這不是興趣的問題, 是成
: 本和效果的問題.
: 程式語言本身就是最好的「人工智能編輯器」, 要修人工智能, 最好是
: 直接修 source code.
說起來 我所謂的人工智能編輯器
實質上只是將所有判定與決策集中
再依照自己習慣的系統方式處理
而且也只是屬於階層式線性思考
對於習慣使用其他思考模式的玩家來說可能無法製作理想中的AI沒錯
完成現在的 階層式AI編輯器後
如果還有心力 我試著製作其他思考模式的編輯器
: 把遊戲實現是最重要的第一要務, 合理地運用自己手頭上能用的所有資
: 源去完成它, 將效益發揮至最大. 不奢望有任何目前沒有的資源會突然
: 出現, 這點是遊戲設計中很重要的, 不論是商業遊戲還是同人遊戲都一
: 樣, 如果我們的設計中要有一些目前不存在的資源(例如人力)才能夠完
: 成的, 那個設計是一定不能完成的, 因為目前不存在的資源, 未來九成
: 也是不存在的.
: 只要你能寫程式, 不要浪費這技能, 這就是資源. 好好利用他.
嗯 可以直接理解成
現在人力不足 如果你對這遊戲有任何的期望
而且有實行的的能力 最好還親自實行
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.33.52.221
推 outshaker:一文值千金…看你狀態一直是 E:編輯文章…給個推 02/16 07:54
→ outshaker:如果z大單純對ai有興趣的話,韋諾之戰的ai可以玩看看 02/16 07:57
推 outshaker:The Battle For Wesnoth,也有中文翻譯,開源且自由 02/16 08:01
→ outshaker:遊戲性不錯,種族、地形、技能、性質…缺乏外交、內政 02/16 08:05
→ outshaker:同chenglap所言,每個人心中的理想不同 02/16 08:09
→ outshaker:只是提供一個選擇給z大參考 02/16 08:11