• <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)  編輯 收藏 引用
            一本大道加勒比久久综合| 91精品婷婷国产综合久久| 久久无码国产| 日本精品久久久久久久久免费| 久久精品国产秦先生| 欧洲性大片xxxxx久久久| 色天使久久综合网天天| 国产成人精品久久| 久久精品麻豆日日躁夜夜躁| 久久精品国产99国产电影网 | 99久久香蕉国产线看观香| 伊人久久五月天| 久久99精品久久只有精品| 草草久久久无码国产专区| 久久人妻无码中文字幕| 99久久er这里只有精品18| 久久久久久亚洲精品不卡| 九九精品99久久久香蕉| 久久久亚洲精品蜜桃臀| 99久久久精品免费观看国产| 久久精品综合网| 94久久国产乱子伦精品免费| 伊人久久大香线蕉av不卡| 久久久久亚洲AV成人网人人软件| 无码精品久久久久久人妻中字| 国产精品成人无码久久久久久| 久久亚洲私人国产精品vA | 亚洲va久久久久| 国产精品日韩欧美久久综合| 日本欧美久久久久免费播放网 | 亚洲午夜精品久久久久久app| 精品久久一区二区| 午夜精品久久久久久中宇| 亚洲国产成人久久综合一区77| 久久综合狠狠色综合伊人| 久久国产高潮流白浆免费观看| A级毛片无码久久精品免费| 中文字幕精品久久| 久久天天躁狠狠躁夜夜2020一| 思思久久99热只有频精品66| 婷婷久久五月天|