##EasyReadMore##

2010年3月12日 星期五

星海2-防守型 AI -0.01版

.
我昨天在 PTT 發現了兩篇文章由 ddavid 網友所寫

Re: [SC2] AI 腳本開發最簡入門

Re: [SC2] AI 腳本開發最簡入門2

讓我很感興趣,於是就開始著手編寫 星海2 AI

我發現其實可以讓電腦 AI 互打,而自己當裁判觀戰
方法如下方圖片
.
在自己的欄位上按滑鼠右鍵選 "加入裁判"
就會變成下圖
.
成功的讓自己當裁判,看電腦對打!

接著我試著修改目前最著名的 AI : StarCrack AI v6.1.1
成功的控制了電腦神族早期的發展,讓電腦的早期發展路線固定!

接著我想到,我可以在星海2 地圖編輯器發表之前,試著研究跟發表 AI
當然我不能發展目前別人已經發展的路線 ( 最智能的電腦對戰 AI )
我選擇了一個新的方向 --> ( 不開分礦,最強防守 AI )

目標達成如下幾點:
 1.電腦不開分礦
 2.電腦用最少的資源達到最大的防守效果
 3.電腦防守時間越久得分越高
 4.玩家在3分鐘內攻下電腦,電腦會打字說:你這次進攻得分 95
     玩家在6分鐘內攻下電腦,電腦會打字說:你這次進攻得分 90
     玩家在9分鐘內攻下電腦,電腦會打字說:你這次進攻得分 85
       依此列推,
         ( 跟電腦對打,就像在玩 RPG 地圖 )

 接著我構思了神族防守型電腦的發展路線:
  1.將出口處蓋滿光砲
  2.接著發展 高階聖堂武士 跟研發 幽能風暴
  3.生產 聖母艦 後接著生產 航空母艦

其實要突破這防守也很簡單,用人類的核彈就能簡單攻入
  不過到底最快多久能攻入也不清楚

接著下方是我目前的程式碼,不過目前碰到這幾個問題:
  1.目前無法指定電腦蓋光砲的位置
  2.無法使用 AISetStock(player, 1, c_PB_TemplarArchive);  要求電腦蓋 聖堂文庫
  3.不清楚如何告知電腦升級 光砲防禦
  4.如何判斷電腦自己幾分鐘滅亡,並且適當的打字告知玩家得分多少!
.

void ProtossOpenGnd0 (int player)       {
    int nProbe = AITechCount(player, c_PU_Probe, c_techCountInProgressOrBetter);
    int nZealot = AITechCount(player, c_PU_Zealot, c_techCountInProgressOrBetter);
    int nStalker = AITechCount(player, c_PU_Stalker, c_techCountInProgressOrBetter);
    int nDisruptor = AITechCount(player, c_PU_Disruptor, c_techCountInProgressOrBetter);

    int nPylon = AITechCount(player, c_PB_Pylon, c_techCountInProgressOrBetter);
    int nGateway = AITechCount(player, c_PB_Gateway, c_techCountInProgressOrBetter);
    int nForge = AITechCount(player, c_PB_Forge, c_techCountInProgressOrBetter);
    int nCyberneticsCore = AITechCount(player, c_PB_CyberneticsCore, c_techCountInProgressOrBetter);
    int nTwilightCouncil = AITechCount(player, c_PB_TwilightCouncil, c_techCountInProgressOrBetter);

    AIClearStock(player);

    AISetStock(player, 1, c_PB_Nexus);
    AISetStock(player, 8, c_PU_Probe);
    AISetStock(player, 1, c_PB_Pylon);
          // 最基本開始一主堡,八工兵,一水晶    

    if(nPylon >= 1) {
        AISetStock(player, 11, c_PU_Probe);
        AISetStock(player, 1, c_PB_Forge);    }
               // 如果水晶蓋好,就11工兵,一冶煉廠

      if(nForge >= 1)  {
        AISetStock(player, 3, c_PB_PhotonCannon);    }
                // 如果冶煉廠蓋好,就蓋三個光砲

AISetStock(player, 1, c_PB_Gateway);
                // 蓋兵營

        if(nGateway >= 1) {
                   // 如果兵營蓋好

            AISetGasPeonCountOverride(player, c_townMain, 3);
            if(AIGetBuildingCountInTown(player, c_townMain, c_PB_Assimilator, c_techCountCompleteOnly) > 1) {
                AISetGasPeonCountOverride(player, c_townMain, 6);    }
                     // 主堡附近有一瓦斯就派三工兵,如果一瓦斯以上就派六工兵

            AISetStock(player, 2, c_PB_Pylon);
            AISetStock(player, 19, c_PU_Probe);
            AISetStock(player, 1, c_PB_Assimilator);
            AISetStock(player, 6, c_PB_PhotonCannon);
            AISetStock(player, 1, c_PB_CyberneticsCore);
                 // 這些是有兵營後會做的,兩水晶,19工兵,一瓦斯,六光砲,一機械控制核心              

            if(nCyberneticsCore >= 1) {
                AISetStock(player, 28, c_PU_Probe);
                AISetStock(player, 2, c_PB_Assimilator);
                AISetStock(player, 4, c_PB_Pylon);
                AISetStock(player, 12, c_PB_PhotonCannon);
                AISetStock(player, 1, c_PB_TwilightCouncil);
                   // 如果機械控制核心蓋好,28工兵,兩瓦斯,四水晶,12光砲,一暮光議會

              if(nTwilightCouncil >= 1)     {
                  AISetStock(player, 24, c_PB_PhotonCannon);
                  AISetStock(player, 6, c_PB_Pylon);  }
       // 如果暮光議會蓋好,24光砲,6水晶
                                                   }   // 接如果機械控制核心蓋好
                                     }   // 接如果兵營蓋好

    AIEnableStock(player);

AIGenericOpen(player, 800, false);      // 這行的作用是告知 AI ,在800秒後運作交還給 StarCrack AI v6.1.1 決定
  }


下載目前 AI 修改進度 0.01 版 :
[--訊6--] [Xuite] [MediaFire] [Badongo]
--載點請勿轉貼-
.
.

4 則留言:

  1. 哈囉,我是那個ddavid啦:D
    關於你的四個問題也都是我還要研究的,除了第二個問題是不是你c_PB_TemplarArchives最後少打了s啊?(請參考RequirementsAI.galaxy,原名是"TemplarArchive"沒有錯,但它指定的const變數名稱加了s XD)

    回覆刪除
  2. 哈哈,原來如此,搞定了!
    相信 0.02 版很快就能發布了!

    回覆刪除
  3. 作者已經移除這則留言。

    回覆刪除
  4. 看到你的文章對於編寫星海AI也產生了一點興趣

    但ddavid網友的文章連結好像已經不見了...

    上星海版也是沒有看到

    上網爬文好像也都是只能下載既有的AI而已...

    還請問版主有沒有備份或著是相關連結可以提供?

    感謝幫忙!

    回覆刪除

※怎麼下載?Xuite硬碟MediaFireBadongoSendSpace
※文章可以轉貼嗎?可以,不過要註明出處、標示本站連結。
※載點可以轉貼嗎?不可以,不能盜連。
※建議瀏覽器:Chrome 或 Firefox 或 Opera 或 IE7以上
!請按+1來支持本站!