2014-06-06 104 views
0

我正在製作一個戰艦模擬器,您可以在其中駕駛戰列艦完成某個目標,同時防禦敵方船隻。所述敵方船隻應具有原始AI的形式,以允許其追蹤你的船的位置並試圖射擊它。AS3中的人工智能問題

我遇到的問題是,我並不完全確定如何根據位置對一組敵船進行編碼以磨合玩家的船。我曾多次嘗試讓敵船移動,但無濟於事。

附件是我的敵人船舶運動最近編碼的嘗試(mvi_PBattleship是玩家船mvi_EBattleship是敵艦):

var EMoveTimer:Timer = new Timer(10); 
    EMoveTimer.addEventListener("timer", EMove); 

    function EMove(eventArgs:TimerEvent):void{ 

     EMoveTimer.start(); 

     if(((mvi_EBattleship.x + 31.7) < mvi_PBattleship.x) && (mvi_EBattleship.x < mvi_PBattleship.x) && ((mvi_EBattleship.y + 195.8) < mvi_PBattleship.y) && (mvi_EBattleship.y < mvi_PBattleship.y)){ 
      mvi_EBattleship.x += 1; 
      mvi_EBattleship.y += 1; 
     } 

     else if(((mvi_EBattleship.x + 31.7) < mvi_PBattleship.x) && (mvi_EBattleship.x < mvi_PBattleship.x) && (mvi_EBattleship.y > (mvi_PBattleship.y + 195.8)) && ((mvi_EBattleship + 195.8) > (mvi_PBattleship.y + 195.8))){ 
      mvi_EBattleship.x += 1; 
      mvi_EBattleship.y -= 1; 
     } 

     else if((mvi_EBattleship.x > (mvi_PBattleship.x + 31.7)) && ((mvi_EBattleship.x + 31.7) > (mvi_PBattleship.x + 31.7)) && ((mvi_EBattleship.y + 195.8) < mvi_PBattleship.y) && (mvi_EBattleship.y < mvi_PBattleship.y)){ 
      mvi_EBattleship.x -= 1; 
      mvi_EBattleship.y += 1; 
     } 

     else if((mvi_EBattleship.x > (mvi_PBattleship.x + 31.7)) && ((mvi_EBattleship.x + 31.7) > (mvi_PBattleship.x + 31.7)) && (mvi_EBattleship.y > (mvi_PBattleship.y + 195.8)) && ((mvi_EBattleship + 195.8) > (mvi_PBattleship.y + 195.8))){ 
      mvi_EBattleship.x -= 1; 
      mvi_EBattleship.y -= 1; 
     } 

     else if((mvi_EBattleship.x > mvi_PBattleship.x) && ((mvi_EBattleship.x + 31.7) < (mvi_PBattleship.x + 31.7)) && ((mvi_EBattleship.y + 195.8) < mvi_PBattleship.y) && (mvi_EBattleship.y < mvi_PBattleship.y)){ 
      mvi_EBattleship.y += 1; 
     } 

     else if((mvi_EBattleship.x > mvi_PBattleship.x) && ((mvi_EBattleship.x + 31.7) < (mvi_PBattleship.x + 31.7)) && (mvi_EBattleship.y > (mvi_PBattleship.y + 195.8)) && ((mvi_EBattleship.y + 195.8) > (mvi_PBattleship.y + 195.8))){ 
      mvi_EBattleship.y -= 1; 
     } 

     else if((mvi_EBattleship.y > mvi_PBattleship.y) && ((mvi_EBattleship.y + 195.8) < (mvi_PBattleship.y + 195.8)) && ((mvi_EBattleship.x + 31.7) < mvi_PBattleship.x) && (mvi_EBattleship.x < mvi_PBattleship.x)){ 
      mvi_EBattleship.x += 1; 
     } 

     else if((mvi_EBattleship.y > mvi_PBattleship.y) && ((mvi_EBattleship.y + 195.8) < (mvi_PBattleship.y + 195.8)) && (mvi_EBattleship.x > (mvi_PBattleship.x + 31.7)) && ((mvi_EBattleship.x + 31.7) > (mvi_PBattleship.x + 31.7))){ 
      mvi_EBattleship.x += 1; 
     } 
    } 

所以,我的主要問題是:

1 )我應該使用什麼代碼來確保敵人追蹤玩家?

2)我該如何在玩家身上製造敵人的火力子彈?

3)有沒有辦法跟蹤兩艘敵方船隻之間的碰撞?

實際的代碼將是非常需要和讚賞,因爲這個項目預計將在明天完成。非常感謝您的幫助。

+1

您正在尋求三個非常廣泛的問題的解決方案,然後去尋求這些問題的實際工作代碼。我不確定你會得到那個。 – Marty

+0

@Marty「我相信你不會那麼做」會更精確。 – Vesper

+0

既然你已經努力在你的問題中包含上下文和代碼,下面是部分答案。也就是說,Marty&Vesper是對的:爲三個鬆散相關的問題尋求代碼並不是獲得答案的最佳方式。 1)三角法可以幫助,徑向位置涼爽; 2)子彈可以衍生出敵人,其唯一的IA就是直射; 3)hitTestObject可能會有所幫助。 – Aralicia

回答

0

我只會回答第一個問題,這是我看到的必須重要的問題。

要控制NPC(非玩家角色),您可以使用所謂的「轉向行爲」here as3的非常好的指南。

不要重新發明輪子!