• <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 閱讀(429) 評論(0)  編輯 收藏 引用
            国产精品美女久久久久| 色妞色综合久久夜夜| 国产精品久久网| 久久久久亚洲AV综合波多野结衣| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久精品麻豆日日躁夜夜躁| 国产激情久久久久影院小草| 久久青青国产| 久久久久无码精品国产不卡| 久久精品国产72国产精福利| 亚洲精品美女久久777777| 久久国产精品二国产精品| 日韩乱码人妻无码中文字幕久久| 国产精品久久久久久搜索| 热久久视久久精品18| 国产成人香蕉久久久久| 久久久久av无码免费网| 亚洲精品视频久久久| 久久艹国产| 久久婷婷综合中文字幕| 久久精品中文字幕久久| 久久人妻无码中文字幕| 国产福利电影一区二区三区久久久久成人精品综合 | 亚洲天堂久久久| 国产亚洲成人久久| 国产精品久久久久久久久| 中文成人无码精品久久久不卡| 久久精品国产一区二区三区日韩| 青草国产精品久久久久久| 久久综合五月丁香久久激情| 97久久精品人人做人人爽| 狠狠人妻久久久久久综合| 亚洲αv久久久噜噜噜噜噜| 欧美日韩成人精品久久久免费看| 久久久久久国产精品无码下载| 国内精品久久九九国产精品| 午夜天堂精品久久久久| 久久亚洲日韩看片无码| 久久久婷婷五月亚洲97号色| 久久亚洲精品无码VA大香大香| 久久香综合精品久久伊人|