




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、AI系統設計分析前 太陽神三國殺AI項目組成員 獨孤安河2016年6月5日版本信息 神殺版本:太陽神三國殺 V2 終結版(版本號:20150926) 神殺AI 版本:QSanguosha AI 20141006 (V1.32 Alpha) Lua 版本:Lua 5.2什么是AI? 人工智能(Artificial Intelligence),簡稱AI。 它是計算機科學的一個分支學科。 它是研究、開發用于模擬、延伸和擴展人的智能的理論、方法、技術及應用系統的一門新的技術科學。 它企圖了解智能的實質,并生產出一種新的能以人類智能相似的方式做出反應的智能機器。 就其本質而言,它是對人對人的意識、思維的
2、意識、思維的信息過程的模擬的信息過程的模擬。那么,什么又是太陽神三國殺的AI? 游戲中出現的“電腦玩家”? No! 它是幫助玩家(含“電腦玩家”)進行游戲的后臺邏輯。 主要包括“選將AI”、“托管AI”和“高級AI”三類。 有了它,“電腦玩家”才能夠表現得像個人類 核心任務:模擬模擬人類玩家的思維過程思維過程,并最終做出決策做出決策!目錄 選將選將AI 情況1:KOF模式選將 情況2:3v3對戰模式選將 情況3:身份局選將 情況4:雙將模式選擇副將 托管托管AI 高級高級AI 場景1:出牌階段主動使用牌 場景2:響應請求 場景3:棄牌階段棄牌 場景4:身份判斷 場景5:分析局勢 場景6:聊天及
3、其它選將AI 哪里有需要,AI就到哪里去! 于是游戲的第一個問題出現了選擇武將。 面對若干備選武將,要選擇使用哪位武將參與游戲呢? 思路:給武將評分,誰分高誰上!情況1:KOF模式(02_1v1)選將 加載武將1v1評分表(游戲目錄/etc/1v1-priority.txt) 讀取各備選武將的評分,并排序 選取評分最高的武將選將舉例 選將框中有下列武將: 新標準版黃月英 新標準版周瑜 新標準版司馬懿 新標準版馬超 新標準版大喬 標準版甄姬 以及四個暗將 AI會選擇哪個武將呢?選將舉例(解) 查表可知 新標準版黃月英:65分 新標準版周瑜:82分 新標準版司馬懿:69分 新標準版馬超:70分 新
4、標準版大喬:14分 標準版甄姬:93分 而暗將的評分被固定為50分 所以AI向電腦玩家推薦的選將是甄姬,其次周瑜。情況2:3v3對戰模式(06_3v3)選將 加載武將3v3評分表(游戲目錄/etc/3v3-priority.txt) 讀取各備選武將的評分,并排序 選取評分最高的武將 其實和KOF模式的思路是相似的情況3:身份局選將 根據角色身份采用不同的策略進行選將。 主公隨機選將。 忠臣、內奸、反賊依然是先分別評分,然后最高分入選。 與前兩種情況不同的是,身份局選將需要考慮主公因素。 所以評分包括兩個部分:基礎分,匹配分。 評分公式:最終評分基礎分匹配分基礎分 初始值初始值:5分。 忠臣忠臣
5、:勢力為“神”,或者與主公勢力相同,基礎分1.04 反賊反賊:勢力為“群”,且主公有技能“血裔”(火袁紹),基礎分0.8勢力為“吳”,且主公有技能“歸命”(SP孫皓),基礎分0.5 內奸或反賊內奸或反賊:勢力為“蜀”,且主公有技能“誓仇”(SP劉備),基礎分0.1 所以經常見到主公選曹操時,全場一片魏藍色;而選劉備時,一堆蜀將。匹配分 加載忠臣評分表(游戲目錄/etc/loyalist.txt)、 反賊評分表(游戲目錄/etc/rebel.txt ) 和內奸評分表(游戲目錄/etc/renegade.txt) 根據角色身份,從對應的評分表中讀取備選武將的: 通用適應度通用適應度(不關心主公是誰
6、時的適應度,默認為0) 主公適應度主公適應度(在特定武將做主公時的適應度,默認為0) 于是,匹配分1.1通用適應度1.1主公適應度 評分公式:最終評分基礎分最終評分基礎分1.11.1通用適應度通用適應度1.11.1主公適應主公適應度度選將舉例 火典韋 風夏侯淵 標準版孫權 風張角 神趙云 主公:林董卓 角色身份:忠臣 備選武將:如圖所示忠臣評分表(節選) 通用適應度SP曹昂:0.3SP袁術:0.3新標準版郭嘉:0.2標準版郭嘉:0.2SP華雄:-1 林董卓 主公適應度神呂布:1.1火袁紹:1新風張角:1風張角:1新標準版呂布:1標準版呂布:1風小喬:0.8火顏良文丑:0.7新風周泰:-2風周泰
7、:-3選將舉例(火典韋) 基礎分:5分 查表知,典韋沒有忠臣身份的通用適用度和董卓主公時的適應度 所以典韋的評分為:51.101.105分選將舉例(風夏侯淵) 基礎分:5分 查表知,夏侯淵沒有忠臣身份的通用適用度和董卓主公時的適應度 所以夏侯淵的評分為:51.101.105分選將舉例(標準版孫權) 基礎分:5分 查表知,孫權沒有忠臣身份的通用適用度和董卓主公時的適應度 所以孫權的評分為:51.101.105分選將舉例(風張角) 基礎分:51.045.2分 查表知,張角沒有忠臣身份的通用適用度,但董卓主公時的適應度為1 所以張角的評分為:5.21.101.115.72分選將舉例(神趙云) 基礎分
8、:51.045.2分 查表知,趙云沒有忠臣身份的通用適用度和董卓主公時的適應度 所以趙云的評分為:5.21.101.105.2分選將舉例(解) 火典韋:5分 風夏侯淵:5分 標準版孫權:5分 風張角:5.72分 神趙云:5.2分 經過計算,各武將的評分為: 所以AI最終會選擇張角做董卓的忠臣。情況4:雙將模式選擇副將 加載雙將評分表(游戲目錄/etc/double-generals.txt) 對于每個備選武將,讀取已選主將與其進行配對時的評分(默認為0分) 若沒有評分,再讀取其與已選主將進行配對時的評分(默認為50分) 將所有備選武將的最終評分進行排序 選擇評分最高的備選武將做為副將選將舉例
9、主將:林魯肅 備選副將:標準版張遼標準版甘寧標準版孫尚香新標準版華佗標準版劉備 應該選誰作為魯肅的副將呢?雙將評分表(節選) 新標準版劉備林魯肅:75分 標準版孫尚香林魯肅:54分 林魯肅新一將成名凌統:52分 林魯肅SP袁術:54分 林魯肅標準版張遼:20分 林魯肅標準版劉備:75分 林魯肅一將成名凌統:53分選將舉例(標準版張遼) 查表可知: 林魯肅標準版張遼:評分為20分。 這個20分就是張遼的最終評分了。選將舉例(標準版甘寧) 查表可知: 林魯肅標準版甘寧:沒有評分(取默認值0分) 再查: 標準版甘寧林魯肅:還是沒有評分(取默認值50分) 所以甘寧的最終評分是50分。選將舉例(標準版孫
10、尚香) 查表可知: 林魯肅標準版孫尚香:沒有評分(取默認值0分)。 再查: 標準版孫尚香林魯肅:評分為54分。 于是孫尚香的最終評分被修改為54分。選將舉例(新標準版華佗) 查表可知: 林魯肅新標準版華佗:沒有評分(取默認值0分)。 再查: 新標準版華佗林魯肅:還是沒有評分(取默認值50分)。 于是華佗的最終評分為50分。選將舉例(標準版劉備) 查表可知: 林魯肅標準版劉備:評分為75分。 這樣劉備的最終評分即為75分。選將舉例(解) 所有備選武將的評分為:標準版張遼:20分標準版甘寧:50分標準版孫尚香:54分新標準版華佗:50分標準版劉備:75分 獲得最高分的是劉備,評分為75分 所以AI
11、最后將選擇 標準版劉備 作為林魯肅的副將托管AI 如果你點擊了“托管”,那么接下來幫你游戲的,就是托管AI 托管AI為游戲中那些需要作決定的場合制定了最簡單的策略 以使游戲能夠繼續正常進行 比如開五谷豐登時讓玩家從中隨機選牌等 然而這并不是重點并不是重點 講托管AI主要是為了引出后文的高級AI 沒錯,托管AI其實只是一個代碼中的概念 其工作現在已經完全被高級現在已經完全被高級AIAI替代替代 在實現上,高級AI繼承自托管AI,是托管AI的子類高級AI 于是重點來了 對于電腦玩家,要想跟上人的節奏,它們就必須依靠高級AI。 怎樣出牌? 怎樣響應? 怎樣留牌? 怎樣判斷其他角色身份? 怎樣分析局勢
12、? 怎樣賣萌場景1:出牌階段主動使用牌 確定所有可能將使用的卡牌(包括:真卡牌、視為卡牌) 嘗試使用卡牌,以此選出所有可以使用的卡牌 分別計算各選出卡牌的使用優先級 排序,確定優先級最高的卡牌,此即將要使用的卡牌 確定卡牌使用方式(包括:用哪些牌?對誰使用?) 其實和人類玩家思考的過程是類似的 下面給出一個例子具體解釋一下。出牌舉例 龐統忠臣,第一輪出牌階段準備出牌,目前場上局勢如下: 1號位:火袁紹(主公,2體力0牌) 2號位:林董卓(6體力4牌) 3號位:林祝融(反賊,2體力1牌,八卦陣,大宛) 4號位:風夏侯淵(反賊,2體力1牌,貫石斧) 5號位:火龐統(1體力5牌,未涅槃)【主視角角色
13、,忠臣】 6號位:風黃忠(3體力2牌) 7號位:新標準版郭嘉(1體力9牌) 8號位:標準版曹操(3體力4牌) 手牌為:【絕影】( 5)、【朱雀羽扇】( A)、【雷殺】( 8)、【決斗】( A)、【閃】( Q) 現在龐統該如何出牌呢?出牌舉例 局勢如圖,現在龐統該如何行動?確定所有可能將使用的卡牌【絕影】( 5)【朱雀羽扇】( A)【雷殺】( 8)【決斗】( A)【閃】( 3)鐵索連環( A) 來自技能“連環”,由構成嘗試使用,選出所有可用卡牌 【絕影】( 5) 【朱雀羽扇】( A) 【雷殺】( 8) 【決斗】( A) 鐵索連環( A) 來自技能“連環”計算卡牌的使用優先級 卡牌的使用優先級包括
14、:預設的“使用優先級”,以及游戲中實時確定的“動態使用優先級”兩類。 “使用優先級”只與卡牌種類有關(記錄在sgs.ai_use_priority表中)。 “動態使用優先級”與花色、點數、角色技能等信息有關。 一般來說,“使用優先級”是基準,“動態使用優先級”根據實際情況,在其基礎上上下浮動。 最終優先級以“動態使用優先級”為準。獲取預設的“使用優先級” 絕影(防御馬):2.75 朱雀羽扇(武器):2.655 雷殺:2.5 決斗:2.9 鐵索連環:9.1(數據來自:游戲目錄/lua/ai/standard_cards-ai.lua 和游戲目錄/lua/ai/maneuvering-ai.lua
15、)計算“動態使用優先級” 【絕影】( 5):2.750.00322.7468 【朱雀羽扇】( A):2.6550.79923.4542 【雷殺】( 8):2.50.49952.9995 【決斗】( A):2.90.00022.9002 鐵索連環( A):9.10.00029.1002(參考:游戲目錄/lua/ai/smart-ai.lua中的SmartAI:getDynamicUsePriority 函數)按優先級排序 鐵索連環( A):9.1002 【朱雀羽扇】( A):3.4542 【雷殺】( 8):2.9995 【決斗】( A):2.9002 【絕影】( 5):2.7468 最終選擇使用
16、鐵索連環( A)確定使用方式 首先排除“無言”、“忍戒”、“敵人數過少”、“無謀”等特殊情形 然后排除“啖酪”(SP楊修)或“皇恩”(貼紙劉協)的干擾 接著對所有角色進行分組:組F1:被橫置的、可生效的、害怕受傷的、帶閃電的友方角色(空)組F2:被橫置的、可生效的、害怕受傷的、不帶閃電的友方角色(空)組OF:不屬于F1和F2的其他友方角色(袁紹、龐統)組E:未被橫置的、可生效的、不希望扣減體力的、明確的敵方角色(夏侯淵、祝融) 并判斷是否需要連環自己(不需要)確定使用方式(續) 分組后,優先考慮為組F1中的友方角色解鎖(不需要) 然后考慮組E中的敵方角色,發現其數目不少于2個 因此依次將前2個
17、敵方角色添加為使用目標 即決定使用目標為:夏侯淵、祝融 最終結果:龐統發動了技能“連環”將【決斗】( A)當作一張鐵索連環( A)對夏侯淵和祝融使用。神殺技能分類 觸發觸發技技:在特定時機發動的技能。描述通常會具有類似“XX時機,你可以做XX”的結構。 視為視為技技:將一些牌視為另一些牌的技能。描述通常會具有類似“你可以將XX牌當做XX牌使用”的結構。 特殊技包括:禁止技、距離修正技、手牌上限技、目標增強技、攻擊范圍技、技能失效技等。關鍵概念:技能卡 為了便于AI思考,引入“技能卡”的概念。 “技能卡”是一種虛構的卡牌,用來表現特定技能的效果。 制衡:階段技,你可以棄置至少一張牌。若如此做,你
18、摸等量的牌。 制衡:(同義描述)階段技,你可以將X張牌當做“制衡技能卡”使用(X至少為1)。 制衡技能卡:你摸X張牌。關鍵概念:技能卡 意義:出牌階段的“主動發動技能”和“使用卡牌”自此在形式上得到了統一,簡化了AI的思考過程。 在出牌階段空閑時間點主動發動的技能都是視為技!在出牌階段空閑時間點主動發動的技能都是視為技! 只不過有些是視為了卡牌,有些是視為了技能卡而已。 “視為技技能卡”是實現許多技能效果的經典搭配。 衍生概念:子卡構成技能卡的那些真正的卡牌,稱作該技能卡的子卡。出牌舉例(二) 殘局階段,目前場上形勢如下: 主公:標準版曹操(3體力3牌,1號位) 忠臣:標準版貂蟬(1體力4牌,
19、古錠刀、驊騮,2號位)【當前回合角色】新標準版郭嘉(1體力2牌,3號位)新標準版夏侯惇(1體力0牌,5號位) 反賊:新標準版劉備(1體力1牌,橫置,4號位)標準版司馬懿(1體力2牌,青釭劍,橫置,6號位)標準版華佗(1體力0牌,白銀獅子,橫置,7號位) 內奸不明 已知貂蟬的手牌為:【閃】( 4)、【順手牽羊】( 4)、【順手牽羊】( 3)、【兵糧寸斷】( 10) 現在是貂蟬的出牌階段,貂蟬應當怎樣出牌呢?出牌舉例 現在貂蟬該如何行動?思路是一樣的 仍然要先確定有哪些可使用的卡牌 然后對其按使用優先級進行排序 最后選出最高優先級的卡牌,確定其具體的使用方式 只是在確定可使用卡牌的時候 這次還要把
20、技能卡考慮進去: 貂蟬擁有技能“離間” 也就意味著還有一張卡牌“離間技能卡”確定所有將可能使用的卡牌【閃】( 4)【順手牽羊】( 4)【順手牽羊】( 3)【兵糧寸斷】( 10)“離間技能卡”(無花色,點數為0)來自技能“離間”嘗試使用,確定所有可用卡牌 “離間技能卡”(無花色,點數0)例行公事 獲取預設的使用優先級“離間技能卡”:4 計算“動態使用優先級”“離間技能卡”(無花色,點數0):4(不變) 按優先級進行排序排序結果:“離間技能卡”(無花色,點數0) 最后決定使用的卡牌就是:“離間技能卡”(無花色,點數0)確定技能卡構成 采用手牌數大于體力時的策略 首先將所有手牌按卡牌的保留價值從小到
21、大進行排序 然后找出第一個不為【桃】的:基本牌或裝備牌或【五谷豐登】 結果為:【閃】( 4)此即為“離間技能卡”的子卡 所以貂蟬將用這張【閃】發動技能“離間” 具體過程可參考:游戲目錄/lua/ai/nostalgia-ai.lua中的noslijian_skill.getTurnUseCard函數 該函數最終調用了:游戲目錄/lua/ai/standard-ai.lua中的SmartAI:getLijianCard函數確定技能卡的使用目標 首先排除特殊情況,如:離間主公殺忠臣、收友方反賊、幫孫策主公覺醒、利用神關羽等 然后將所有敵方男性角色按防御力從小到大排序 排序結果:華佗、劉備、司馬懿
22、發現第一目標華佗的體力為1并且沒有【殺】 考慮離間主公收反賊華佗 檢查主公可以使用【決斗】并且【決斗】對華佗有效 因此決定使用目標為:華佗、曹操 具體過程可參考: nostalgia-ai.lua中的sgs.ai_skill_use_func.NosLijianCard函數 該函數最終調用了: standard-ai.lua中的SmartAI:findLijianTarget函數最終結果 因此,貂蟬會將【閃】( 4)當做“離間技能卡”使用,目標是華佗和曹操 表現在游戲界面上,就是貂蟬棄置了【閃】( 4),對華佗和曹操發動了技能“離間”場景2:響應請求 根據請求類型找到對應的處理方案登記表 根據
23、請求原因在登記表中找到處理該請求的處理方案 采用該方案處理請求,得出處理結果并進行響應請求類型及相應的處理方案登記表 詢問技能發動:sgs.ai_skill_invoke表 詢問卡牌使用:sgs.ai_skill_use表 詢問卡牌響應:sgs.ai_skill_cardask表 詢問卡牌分配:sgs.ai_skill_askforyiji表 詢問棄牌或卡牌交換:sgs.ai_skill_discard表 詢問卡牌展示:sgs.ai_cardshow表 詢問拼點:sgs.ai_skill_pindian表請求類型及相應的處理方案登記表(續) 詢問選擇:sgs.ai_skill_choice表
24、詢問花色選擇:sgs.ai_skill_suit表 詢問角色選擇:sgs.ai_skill_playerchosen表 詢問卡牌選擇:sgs.ai_skill_cardchosen表 詢問五谷豐登選牌:sgs.ai_skill_askforag表 詢問觀星(集中處理,無對應登記表) 詢問無懈可擊(集中處理,無對應登記表) 詢問瀕死求桃(集中處理,無對應登記表)響應舉例 已知目前正在進行【萬箭齊發】的結算,當前場上形勢如下: 主公:標準版孫權(5體力1手牌,1號位) 忠臣:標準版孫尚香(1體力0手牌,青釭劍,2號位)火龐統(1體力2手牌,未涅槃,4號位)新標準版華佗(3體力3手牌,爪黃飛電,8號
25、位)【當前回合角色】 反賊:標準版馬超(2體力3手牌,方天畫戟,3號位)標準版張遼(4體力2手牌,八卦陣,5號位)林曹丕(2體力3手牌,6號位)【當前決策角色】新風周泰(4體力3手牌,未不屈,7號位) 內奸不明 此時曹丕因受到1點傷害正在被詢問選擇“放逐”的目標,應如何進行響應?響應舉例 現在曹丕該如何作出響應?響應處理過程 這是一個“詢問角色選擇”類型的請求 對應的處理方案登記表為sgs.ai_skill_playerchosen表 請求的原因是“放逐”(代碼中表示為“fangzhu”) 確定處理方案為sgs.ai_skill_playerchosen.fangzhu(是一個回調函數) 請求
26、的信息為:(1)當前決策角色:曹丕(2)可選目標角色:孫權、孫尚香、馬超、龐統、張遼、周泰、華佗 采用該處理方案處理請求,得出處理結果處理方案的具體決策過程 更新角色身份和局勢信息,得知此時的隊友:馬超、張遼、周泰敵人:孫權、孫尚香、龐統、華佗局勢:反賊優勢(局勢評分: -13.100241 ) 對所有隊友按手牌數從少到多進行排序排序結果:張遼(2)、馬超(3)、周泰(3) 依次分析每名隊友,看是否有需要翻面的隊友(結果:沒有) 根據摸牌數是否不少于3張采取不同的策略此時摸牌數為1,所以將采取少于3張時的策略處理方案的具體決策過程(續) 采用摸牌數少于3張時的策略: 對所有敵人按防御力從小到大
27、進行排序排序結果:孫尚香、龐統、華佗、孫權 依次分析每個敵人,看是否有不希望被翻面且擁有技能“漫卷”的敵人結果:沒有 依次分析每個敵人,看是否有不希望被翻面且擁有首要技能的敵人結果:孫尚香(擁有技能“結姻”) 于是產生處理結果:選擇孫尚香,并以此作出響應首要技能(sgs.priority_skill)名單 締盟 好施 青囊 集智 固政 奇襲 國色 斷糧 舉薦 反間 離間 漫卷 突襲 巧變 庸肆 洛神 仁德 明策 完殺 同心 極略 安恤 奇策 銀鈴 傾城 后援 昭心 雙刃 詐降 陷嗣 峻刑 筆伐 燕語 甚賢 天隕 制衡制衡技能按效果分類 需要失去裝備的技能(sgs.lose_equip_skil
28、l):梟姬、旋風等 需要空城的技能(sgs.need_kongcheng):連營、空城等 需要受傷的技能(sgs.masochism_skill):歸心、遺計等 可以從判定中受益的技能(sgs.wizard_skill):鬼才、天妒等 可以改判的技能(sgs.wizard_harm_skill):鬼才、鬼道等 首要技能(sgs.priority_skill):締盟、青囊等 可以救人的技能(sgs.save_skill):急救、補益等 需要回避的技能(sgs.exclusive_skill):揮淚、斷腸等技能按效果分類(續) 需要卡牌的主動技能(sgs.Active_cardneed_skill
29、):咆哮、天義等 需要卡牌的被動技能(sgs.notActive_cardneed_skill):看破、鬼才等 能從他人處獲得桃的技能(sgs.drawpeach_skill):突襲、巧變 回復技能(sgs.recover_skill):仁德、狂骨等 可以使用白銀獅子的技能(sgs.use_lion_skill):斷糧、奇襲等 需要裝備牌的技能(sgs.need_equip_skill):神速、明策等 直接造成傷害的技能(sgs.straight_damage_skill):強襲、旋風等 可以多次使用殺的技能(sgs.double_slash_skill):咆哮、父魂等 依靠體力上限的技能(s
30、gs.need_maxhp_skill):再起、英魂等 負面技能(sgs.bad_skills):崩壞、無謀等場景3:棄牌階段棄牌 其實只是場景2“響應請求”在特定場合下的具體應用而已 對應的處理方案為sgs.ai_skill_discard.gamerule函數 首先對所有手牌按卡卡牌的保留價值牌的保留價值由小到大進行排序 然后依次分析每張手牌,判斷其是否可以棄置 選取前N張可以被棄置的手牌進行棄置 這里N為需要棄置牌的數目 如果當前角色有技能“琴音”,則N為本次至少應棄置牌的數目卡牌的保留價值 卡牌的保留價值包括預設的“卡牌保留值”、“技能保留值”、“花色保留值”、“點數保留值”和游戲中實
31、時確定的“動態保留值”五類 “卡牌保留值”只與卡牌類型有關(記錄在sgs.ai_keep_value表中) “技能保留值”與當前角色技能和卡牌類型有關(記錄在sgs.技能名_keep_value表中) “花色保留值”與當前角色技能和卡牌花色有關(記錄在sgs.技能名_suit_value表中) “點數保留值”與當前角色技能和卡牌點數有關(記錄在sgs.技能名_number_value表中) “動態保留值”是綜合了上述因素并結合角色自身情況得出的卡牌保留價值棄牌舉例 已知場上局勢如下(未提到的角色均已陣亡): 主公:新標準版曹操(2體力2牌,古錠刀、仁王盾、紫骍,1號位) 忠臣:標準版甄姬(2體
32、力4牌,諸葛連弩、八卦陣、的盧,5號位) 內奸:火太史慈(1體力0牌,4號位) 反賊:標準版馬超(2體力1牌,青龍偃月刀、白銀獅子,7號位)標準版大喬(1體力0牌,8號位) 當前為甄姬的棄牌階段,四張手牌為:【桃】( 2)、【酒】( 3)、【酒】( 9)、【酒】( 9) 甄姬應選擇哪兩張牌進行棄牌?棄牌舉例 現在甄姬應如何棄牌?獲取預設的“卡牌保留值” 桃:7(數據來自:游戲目錄/lua/ai/standard_cards-ai.lua) 酒:4.1(數據來自:游戲目錄/lua/ai/maneuvering-ai.lua) 閃:5.2(數據來自:游戲目錄/lua/ai/standard_car
33、ds-ai.lua)獲取預設的其它保留值 甄姬擁有技能“洛神”(代碼“luoshen”)和“傾國”(代碼“qingguo”) 從表sgs.qingguo_suit_value中可以得到與“傾國”相關的花色保留值: 黑桃:4.1 草花:4.2(數據來自:游戲目錄/lua/ai/standard-ai.lua) 沒有與這些技能有關的“技能保留值”或“點數保留值”計算“動態保留值” 首先初步計算出每張卡牌的動態保留值: 【桃】( 2):7 【酒】( 3):max(4.1, 5.2)4.19.3 【酒】( 9):max(4.1, 5.2)4.29.4 【酒】( 9):4.1 然后根據卡牌花色、同類卡牌
34、數目等信息進行調整計算“動態保留值”(續) 然后根據卡牌花色、點數、同類卡牌數目等信息進行調整: 【桃】( 2):70.0010.0027.003 【酒】( 3):9.30.0040.0039.307 【酒】( 9):9.40.0030.0091.28.212 【酒】( 9):4.10.0010.0091.21.32.910 最終AI將建議玩家棄掉兩張紅色牌,留下兩張黑色的【酒】。場景4:身份判斷 根據角色行為推斷其對其他角色的敵意程度 由此判斷其當前行為跳何種身份 統計其跳各種身份的次數 根據統計結果及各身份剩余人數等信息推測其真實身份 注意:所有AI共享使用同一套身份判斷有關的數據 唯一執
35、行身份判斷的AI稱為“記錄者”(sgs.recorder)身份的種類游戲中的身份: 主公(lord) 忠臣(loyalist) 內奸(renegade) 反賊(rebel)AI視角的身份: 主忠(loyalist) 內奸(renegade) 反賊(rebel) 待定(neutral)仇恨值(intention) 用于表示一名角色對另一名角色敵意程度的量 值為正數表示敵視(攻擊行為),為負數表示友好(示好行為) 每當一名角色做出一次決策而導致游戲中的某個事件發生 AI會記錄此事件的相關信息并分析該角色在此事件中表現出來的對相關角色的動機傾向 然后以此更新該角色對相關目標角色的仇恨值 此功能由Sm
36、artAI:filterEvent函數組織完成(游戲目錄/lua/ai/smart-ai.lua)filterEvent函數 功能:用于記錄和分析當前發生的事件的相關信息 參數:事件名(event)、當前視角角色(player)、信息數據(data) 這里我們重點關注兩個事件: 做出決定(sgs.ChoiceMade) 卡牌確認目標后(sgs.TargetConfirmed)做出決定(sgs.ChoiceMade) 是一個具有超前性的時機 AI根據決定的具體類型決定的具體類型調用對應的分析函數進行分析 所有分析函數事先被寫進sgs.ai_choicemade_filter表中 其中“決定的具體
37、類型”包括: 使用卡牌(cardUsed) 卡牌響應(cardResponded) 發動技能(skillInvoke) 做出選擇(skillChoice) 使用無懈可擊(Nullification) 選擇角色(playerChosen) 選擇卡牌(cardChosen) 分配卡牌(Yiji) 觀看卡牌(viewCards) 拼點(pindian)仇恨值在“做出決定”中的體現 在smart-ai.lua中集中處理的、與仇恨值密切相關的決定類型有 選擇角色(playerChosen) 使用無懈可擊(Nullification) 分配卡牌(Yiji) 其余類型與上述三種類型的處理方式類似 分布在各個
38、擴展包的AI文件中與“做出決定”有關的兩類仇恨值 角色選擇仇恨值: 表示一名角色進行角色選擇時對目標角色的敵意程度 記錄在sgs.ai_playerchosen_intention表中 卡牌分配仇恨值: 表示一名角色進行卡牌分配時對目標角色的敵意程度 記錄在sgs.ai_Yiji_intention表中 仇恨值還有一類卡牌使用仇恨值,后面再談決定使用無懈可擊的仇恨值 與被無懈可擊的錦囊牌所具有的仇恨值有關 無懈可擊層級:當前場上已經連續使用無懈可擊的次數 如果被無懈可擊的錦囊牌不為【無懈可擊】:層級:重置為1仇恨值:該錦囊牌的卡牌使用仇恨值的相反數 如果被無懈可擊的錦囊牌為【無懈可擊】:層級:
39、增加1仇恨值:變為前一仇恨值的相反數卡牌確認目標后(sgs.TargetConfirmed) 在卡牌即將生效之前,指定完目標之后的一個時機 對應“卡牌使用仇恨值” 分別更新卡牌使用者對每一個目標角色的敵意程度卡牌使用仇恨值 表示一名角色對目標角色使用某類卡牌時體現出的敵意程度 記錄在sgs.ai_card_intention表中 角色選擇仇恨值、卡牌分配仇恨值和卡牌使用仇恨值雖然名為“值” 但是都可以寫成函數形式,從而分情況表現不同的敵意程度敵意程度與跳身份之間的關系 每名角色都有“偏忠”、“偏反”和“偏內”三個計量 對主忠角色表示敵意(仇恨值為正),“偏忠”計量下降 對主忠角色表示友好(仇恨
40、值為負),“偏忠”計量上升 對反賊角色表示敵意(仇恨值為正),“偏反”計量下降 對反賊角色表示友好(仇恨值為負),“偏反”計量上升 如果場上存在內奸,根據實際情況更新“偏內”計量 根據三個計量的值確定角色所跳的身份更新“偏內”計量、判定內奸的原則 主忠內局面,沒人跳過內奸,忠臣之間相互攻擊:不更新 原跳忠臣或內奸,攻擊主忠:“偏內”計量上升 原跳反賊,示好主忠:“偏內”計量上升 原跳忠臣或內奸,示好反賊:“偏內”計量上升 原跳反賊,攻擊反賊:“偏內”計量上升特殊的跳身份行為 游戲第一輪,若所有角色未跳過身份, 對其他非主公角色使用火攻、殺、決斗或發動技能“銀鈴”, 且不會對目標角色造成收益的,
41、 視為對主公表示友好,“偏忠”計量上升 游戲前三輪,若未跳過身份,在棄牌階段棄牌時, 被發現棄殺,而本可以殺主公:“偏忠”計量上升 或者本可以殺其他已跳身份的角色:更新仇恨,進而影響計量 被發現棄樂不思蜀、兵糧寸斷思路類似身份判斷舉例 當前局勢如下: 主公:風張角(4體力4牌,白銀獅子,1號位)【主視角角色】 忠臣:神趙云(2體力3牌,紫骍,2號位)【當前回合角色】標準版孫權(4體力3牌,方天畫戟、仁王盾,5號位)新標準版呂蒙(4體力2牌,朱雀羽扇、赤兔,8號位) 反賊:風夏侯淵(3體力2牌,3號位)新風于吉(1體力0牌,4號位)新標準版郭嘉(3體力2牌,6號位)標準版甄姬(3體力3牌,7號位
42、) 內奸不明 此時趙云用紫骍發動“龍魂”對張角使用了【殺】,這說明什么?身份判斷舉例 原跳忠臣的趙云忽然開始殺主公?他是在跳內奸么?分析過程 首先排除流離、借刀殺人等特殊情況 然后,由于殺的目標角色(張角)有技能“雷擊” 并且從使用者(趙云)的角度,張角手牌中有【閃】 同時此【殺】不能造成2點以上的大傷害 以及場上存在明確的反賊角色(夏侯淵等) 而且趙云沒有技能“烈弓”,而張角需要發動技能“雷擊” 所以認為這是在與張角做配合,是對主公張角示好的行為 結果:趙云的“偏忠”計量上升,在當前局面下不會被認為是內奸事后驗證 趙云的身份是忠臣,判斷正確 其他角色的身份如下: 3號位:風夏侯淵反賊 4號位
43、:新風于吉反賊 5號位:標準版孫權內奸 6號位:新標準版郭嘉反賊 7號位:標準版甄姬反賊 8號位:新標準版呂蒙忠臣身份判斷舉例(二) 游戲第一輪,還沒有角色跳過身份,目前場上形勢如下: 1號位:標準版劉備(主公,5體力5牌) 2號位:火諸葛亮(3體力3牌,爪黃飛電,赤兔) 3號位:標準版孫權(4體力6牌,朱雀羽扇)【當前回合角色】 4號位:標準版甘寧(4體力4牌) 5號位:新標準版司馬懿(3體力4牌) 6號位:風周泰(4體力4牌) 7號位:標準版貂蟬(3體力4牌)【主視角角色,反賊】 8號位:神司馬懿(4體力4牌) 此時孫權在其棄牌階段棄牌時棄置了兩張【殺】,這意味著什么?身份判斷舉例 如何評
44、價孫權的這一行為?分析過程 孫權棄置了【殺】 而孫權裝備有【朱雀羽扇】是可以殺到劉備主公的 而且劉備也沒有影響其他角色使用【殺】的技能 但孫權還是把【殺】棄掉了 所以認為這是對劉備主公表示友好的行為 結果:孫權的“偏忠”計量上升,在當前局面下被視為忠臣事后驗證 孫權的身份是內奸,在第一輪可以認為偏忠,判斷正確 其他角色身份為: 2號位:火諸葛亮忠臣 4號位:標準版甘寧反賊 5號位:新標準版司馬懿反賊 6號位:風周泰反賊 8號位:神司馬懿忠臣場景5:分析局勢 首先統計場上忠臣和反賊的人數如果沒有反賊、有忠臣存活:主忠優勢(評分:99分)如果沒有忠臣、有反賊存活:反賊優勢(評分:99分) 然后根據
45、所有存活角色的體力、防御力,以及主公狀態等情況為局勢進行評分 最后根據評分得出當前局勢 評分越高,局勢越傾向于主忠方;越低,越傾向于反賊方兩個評分公式 局勢評分公式:局勢評分主忠評分和反賊評分和(主忠人數反賊人數)3 角色評分公式:角色評分體力max(防御力體力2,0)0.5局勢分類 主忠優勢(loyalist) 主忠稍優(loyalish) 反賊優勢(rebel) 反賊稍優(rebelish) 局勢平衡(neutral) 局勢糾結(dilemma)局勢評分與局勢分類的關系評分區間評分區間主公健康主公健康主公危險主公危險評分4主忠優勢主忠優勢局勢糾結2評分4主忠稍優局勢糾結2評分2局勢平衡反賊
46、稍優4評分2反賊稍優反賊優勢反賊優勢評分4反賊優勢反賊優勢角色防御力 與角色的體力、手牌數、技能、裝備、座次等信息有關 用于評估一名角色的生存能力 主要指對【殺】的防御能力 首先計算基本防御力,其值為:體力2手牌數 然后根據角色的裝備情況和擁有的技能等信息 在基本防御力的基礎上進行適當的調整 得出最終的角色防御力(參考:游戲目錄/lua/ai/smart-ai.lua中的sgs.getDefense函數)局勢分析舉例 現在是標準版甄姬的出牌階段,目前場上形勢如下: 主公:標準版孫權(5體力0牌,方天畫戟、八卦陣、的盧,1號位) 忠臣:標準版孫尚香(1體力1牌,2號位)新標準版馬超(2體力2牌,
47、大宛,3號位) 反賊:新標準版貂蟬(2體力3牌,古錠刀、紫骍,樂不思蜀,6號位)風夏侯淵(1體力0牌,7號位)風周泰(4體力4牌,8號位) 內奸:標準版甄姬(3體力3牌,雌雄雙股劍,5號位)【主視角角色】 另有反賊:標準版周瑜(4號位)已陣亡 那么作為內奸,甄姬應該如何評價場上局勢?局勢分析舉例 現在局勢如何?初步判斷 目前忠臣有孫尚香、馬超,共2名角色 反賊有貂蟬、夏侯淵、周泰,共3名角色 主公孫權非常健康,沒有危險 當前角色甄姬的是5號位,但因4號位周瑜已陣亡,故座次為4 同理,之后的貂蟬、夏侯淵、周泰的座次依次為5、6、7計算各角色防御力(孫權) 基本防御力:5(體力)20(手牌數)10
48、 裝備了防具【八卦陣】:防御力212 裝備了防御馬【的盧】:防御力113 身份是主公:防御力0.412.6 座次加成:防御力7(人數)1(座次)4(當前座次)%7(人數)/413.35 技能加成:防御力2(技能數)/413.85 因此,孫權的防御力是13.85。計算各角色防御力(孫尚香) 基本防御力:1(體力)21(手牌數)3 擁有技能“結姻”:防御力2.35.3 體力不足2:防御力0.44.9 座次加成:防御力7(人數)2(座次)4(當前座次)%7(人數)/45.4 技能加成:防御力2(技能數)/45.9 因此,孫尚香的防御力是5.9。計算各角色防御力(馬超) 基本防御力:2(體力)22(手
49、牌數)6 體力不足2:防御力0.45.6 座次加成:防御力7(人數)3(座次)4(當前座次)%7(人數)/45.85 技能加成:防御力2(技能數)/46.35 因此,馬超的防御力是6.35。計算各角色防御力(貂蟬) 基本防御力:2(體力)23(手牌數)7 體力不足2:防御力0.46.6 判定區有【樂不思蜀】:防御力0.56.1 擁有技能“離間”:防御力2.28.3 座次加成:防御力7(人數)5(座次)4(當前座次)%7(人數)/49.8 技能加成:防御力2(技能數)/410.3 因此,貂蟬的防御力是10.3。計算各角色防御力(夏侯淵) 基本防御力:1(體力)20(手牌數)2 體力不足2:防御力
50、0.41.6 座次加成:防御力7(人數)6(座次)4(當前座次)%7(人數)/42.25 技能加成:防御力1(技能數)/42.5 因此,夏侯淵的防御力是2.5。計算各角色防御力(周泰) 基本防御力:4(體力)24(手牌數)12 座次加成:防御力7(人數)7(座次)4(當前座次)%7(人數)/413 技能加成:防御力1(技能數)/413.25 因此,周泰的防御力是13.25。計算主忠評分和 根據公式:角色評分體力max(防御力體力2,0)0.5 可得主忠方各角色的評分為: 孫權:5max(13.8552,0)0.56.925 孫尚香:1max(5.912,0)0.52.95 馬超:2max(6.
51、3522,0)0.53.175 于是,主忠評分和為:6.9252.953.17513.05計算反賊評分和 各反賊角色的評分為: 貂蟬:2max(10.322,0)0.55.15 夏侯淵:1max(2.512,0)0.51.25 周泰:4max(13.2542,0)0.56.625 所以,反賊評分和為:5.151.256.62513.025局勢評分 根據公式:局勢評分主忠評分和反賊評分和(主忠人數反賊人數)3 可得當前局勢評分為:13.0513.025(33)30.025 由于評分在(2,2)范圍內,而且主公健康 所以當前局勢為局勢平衡場景6:聊天及其它 每當一名玩家出現某個行為時 在場電腦玩家就會有幾率地進行聊天 也就是說,和身份判斷一樣 聊天也是對當前發生的特定事件進行分析和處理的結果 所以依然需要借助filterEvent函數實現 更一般地,所有這種與聊天類似的、和具體事件相關的分析處理過程 都屬于filterEvent函數的控制范圍三個登記表 調試函數登記表(sgs.ai_debug_func表) 用于
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025標準商鋪租賃合同范本
- 煙臺科技學院《體育社會組織建設與管理》2023-2024學年第一學期期末試卷
- 南京工業大學《軌道交通通信系統》2023-2024學年第二學期期末試卷
- 江西經濟管理職業學院《波與成像》2023-2024學年第二學期期末試卷
- 2025塑料保護劑經銷合同
- 吉利學院《Biochemistry》2023-2024學年第二學期期末試卷
- 2025至2031年中國大噴量實心錐噴嘴行業投資前景及策略咨詢研究報告
- 2025花卉采購合同書范本
- 2025年室內排水、電線、網絡等管道井專項勞務分包施工合同
- 老式住宅拆除方案范本
- 【公開課課件】《農業區位因素及其變化》
- 2024屆清華大學強基計劃數學學科筆試試題(附答案)
- (必會)軍隊文職(數學1)近年考試真題題庫(含答案解析)
- 全國統一規范電子稅務局概況介紹及操作輔導
- 工商企業管理畢業論文范文(4篇)
- 浙江省杭州市(2024年-2025年小學三年級語文)人教版開學考試(上學期)試卷(含答案)
- 【貿易戰背景下華為公司危機應對措施及其啟示18000字(論文)】
- 【網絡謠言型尋釁滋事罪的認定存在的爭議探析8600字(論文)】
- 2024延遲退休政策詳解
- 水泥標準培訓考核2024
- 圖書館運營管理服務投標方案(技術方案)
評論
0/150
提交評論