• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 72,  comments - 4,  trackbacks - 0
            rts游戲warringstates的AI管理
            創建時間:2013年4月7日(星期天) 上午10:37 | 分類:AI | 字數:1834  | 發送到我的Qzone | 另存為... | 打印 | 添加到日歷
            warringstates的aiplayer中有幾個管理器每幀更新:
            1. build_mgr(工程部)
            2. exploration_mgr(探索部)
            3. army_mgr(軍工部)
            4. unit_mgr(人力部)
            5. resource_mgr(資源部)

            每個管理器相當于一個部門,它每幀會更新處理兩個事情:a. 請求列表(request)處理; b.工作(job)列表處理;c.job的響應事件(觸發式:
            job提交的請求得到滿足時觸發回來)
            每個部門更新時在job中處理自己要做的事情(這是b.步驟),發現需要其它部門的幫助時,則向其它部門發出請求, 其它部門會把請求收入隊列,
            然后更新時檢查是否可以滿足對應的請求(這是在a.步驟),是則立即給響應,否則按排工作組員(job)去完成; 完成后再給對應請求部門(這里直接是請求者(job)發出響應 (這是c.步驟)

            例如:
            1. aiplayer的更新中發現人口太多,房屋不夠則向build_mgr發出一個增加住房的請求,build_mgr收到后找到消耗金錢少的但住人多的
            戶型并產生一個AIBuildJob讓組員去完成.
            2. AIBuildJob的更新中發現要建造這樣的戶型所需的資源當前不夠(缺少木村),于是他向resource_mgr(資源管理器)MakeRequest申請
            所需要的資源。
            3. resource_mgr的更新中:
               a. 從請求列表中取出該請求,產生對應的AIHarvestJob放入jobs列表中。
               b. 接著遍歷更新jobs取出該AIHarvestJob更新
               c. AIHarvestJob的更新發現該采集job還沒有對應農民,于是它向unit_mgr請求對應類型的農民。
            4. unit_mgr的更新中:
               從請求列表中取出該請求, 發現當前mAvailableUnits中有符合的已產生的農民,于時立即響應給對應的請求者AIHarvestJob
               AIHarvestJob把對應的農民登錄到mHarvesters中.(說明:如果沒有的話則產生一個AITrainJob,在AITrainJob的處理中會看是否有對應unitype的工廠,
            沒有則向build_mgr發出請求,有則向資源請求對應的單位所需要的資源,等資源管理器更新時發現請求滿足并響應回來時則開始向對應的工廠發出
            eCOMMAND_TYPE_Train指令,之后就會跑到GameBuilding的Train工作流程)

            5. resource_mgr的更新中:
               遍歷更新jobs取出該AIHarvestJob進行更新,該AIHarvestJob遍歷mHarvesters取得那個農民,向他發出eCOMMAND_TYPE_Harvest
               指令。

            6. object_mgr的更新中:
               遍歷所有單位進行更新,輪到那個農民更新時,它think函數中發現當前指令是eCOMMAND_TYPE_Harvest,于是它開始了Harvest的
            工作流程:判斷背包中木材是否滿了,是則回城(搜索路徑),否則尋找木材資源(搜索路徑),到達后卸載/收割資源.

            這樣當木材足夠時在resource_mgr的更新中,發現對應的木材資源請求足夠時就會移除該請求并向
            對應的AIBuildJob發出響應說明木材已收集夠了; AIBuildJob收到后接著會向unit_mgr請求一名建筑工人。
            (插入說明: 向unit_mgr請求所得的工人都是出租方式的,時間到了會收回并按請求級別優先級重新分配給其它需要他的請求)
            由于之前收割的農民租期到了,而且那個木材收割的request已被移除(因此沒再請求分配農民)。
            所以unit_mgr會把當前這個農民重新分配為建筑工人,向對應AIBuildJob發出響應。AIBuildJob收到后開始在主城附近有塊空地
            并向建筑工人發出eCOMMAND_TYPE_Build指令讓其開始建造的工作流程.


            其它軍工部的更新會判斷當前是否需要軍隊,并向人力部請求對應的兵,人力部又會看是否有這樣的兵,沒有的話則判斷對應產生
            這樣兵種的兵工廠是否存在,不存在的話又會向工程部發出請求對應的兵工廠,工程部收到后又會判斷是否有足夠資源,沒有的話
            又會向資源部要求對應的資源,資源部又會向人力請求對應的農民來采集資源,等等,如此類似的相關循環。。。
            posted on 2013-04-07 11:34 flipcode 閱讀(438) 評論(0)  編輯 收藏 引用
            国产精品久久亚洲不卡动漫| 99久久精品这里只有精品 | 九九热久久免费视频| 青青青国产成人久久111网站| 精品久久人人妻人人做精品| 日批日出水久久亚洲精品tv| 漂亮人妻被黑人久久精品| 91麻精品国产91久久久久| 午夜精品久久久久9999高清| 久久久久久亚洲Av无码精品专口 | 久久久久亚洲AV成人网| 伊人久久综合热线大杳蕉下载| 久久精品国产99久久香蕉| 五月丁香综合激情六月久久| 久久91这里精品国产2020| 亚洲中文久久精品无码ww16 | 综合人妻久久一区二区精品| 国产精品热久久毛片| 久久久噜噜噜久久中文福利| 欧美与黑人午夜性猛交久久久| 精品精品国产自在久久高清| jizzjizz国产精品久久| 国产精品久久午夜夜伦鲁鲁| 亚洲精品99久久久久中文字幕 | 久久无码高潮喷水| 久久综合九色欧美综合狠狠 | 精品久久久久久无码免费| 精品国产乱码久久久久久郑州公司| 无夜精品久久久久久| 久久综合色区| 久久精品中文字幕第23页| 久久精品国产91久久麻豆自制| 久久久久久午夜成人影院 | 久久精品www人人爽人人| 久久精品免费一区二区| 久久久久亚洲AV片无码下载蜜桃 | 亚洲欧美国产精品专区久久| 久久噜噜久久久精品66| 久久久久免费视频| 久久久久久久91精品免费观看| 久久午夜福利无码1000合集|