看板 GameDesign 關於我們 聯絡資訊
嗯 我先從結論說起 我現在有興趣製作此遊戲的 戰略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