程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> J2ME下漫游(追逐)AI的實現

J2ME下漫游(追逐)AI的實現

編輯:關於JAVA

作為游戲開發者,要給玩家制造挑戰,只要使游戲的難度有所增加,使游戲中的假想敵人像玩家一樣機智,一樣具有人類的智慧和應變能力。這就需要使用一種計算機專業領域新興的一門科學AI(artificial intelligence,人工智能)。

人工智能,作為一門新興科學,人類思維的模擬是AI的主要研究領域,也是難、熱點之一。人類的思維是一個十分不確定性的過程,要對其精確建模十分困難。在我做的這個游戲中所使用的AI還很粗糙,是屬於人工智能的基礎性知識。游戲開發專家將和游戲相關的AI劃分為3種基本類型:

·漫游AI——確定一個游戲對象如何在一個虛擬的游戲世界中漫游;

·行為AI——確定跟蹤或追逐在一個游戲對象或多個游戲對象後面的別一個游戲對象是多麼具有攻擊性;

·策略AI——在一個策略游戲中,從一組固定的實現定義的漫游規則中確定最佳的移動。

漫游AI是射擊類游戲最常見的AI方法,是對游戲對象建模的AI,也就是說,游戲對象做出決定,確定它們如何在一個虛擬世界中漫游。漫游AI的一個典型的例子就是像Galaga的太空射擊游戲,其中外星人常常試圖跟蹤和追逐玩家。同樣,漫游AI也用來實現按照預先定義的方式飛行,發射子彈或射擊的敵機。基本上,對於由計算機(或程序)控制的對象,不論是它必須做出決定改變當前的路徑,還是要游戲中實現需要的結果,或者只是簡單地遵守某種特定的移動方式,都要用到漫游AI。在我做的這個游戲中,敵方飛機所需要的結果就是遵從某種移動方式,同時嘗試和玩家的飛機發生碰撞並玩家生命值降低。在其他的游戲中,計算機玩家所需要的結果可能是避開人類玩家所發射的子彈。

實現漫游AI通常比較簡單,一般包括一個對象(玩家的飛機)的位置,改變別一個對象(敵人的飛機)的速度或位置。對象的漫游移動也可以由隨機的或預先定義的方式的影響。通常有3種類型的漫游AI:追逐、躲避和模式。

追逐是這樣一種漫游:一個游戲對象跟蹤或追逐另外一個游戲對象或多個游戲對象。追逐是很多射擊類游戲所使用的一種方法,其中敵方飛機常常追逐玩家飛機。根據玩家飛船的位置,改變外星人的速度和位置,這就實現了追逐。

例如,我做的這個游戲中實現追逐的算法:

/*flag標記具有跟蹤能力的小飛機*/
private int flag=-1;
for(int i=0;i<MAX_SP;i++)
       if(smallPlane[i].isVisible())
       {
         if(i==flag)
         {
           if(smallPlane[i].getX()>playerSprite.getX())
                         smallPlane[i].move(-speedOfSP, speedOfSP);
           else
             smallPlane[i].move(speedOfSP, speedOfSP);
         }
         else
           smallPlane[i].move(0,speedOfSP);
     }

如程序中可以看出,玩家飛機smallPlane[i]的坐標位置(smallPlane[i].getX())根據玩家飛機playerSprite的位置(playerSprite.getx())而改變。這段代碼可能產生的問題就是可能AI工作的非常良好,敵人飛機幾乎可能毫不猶豫地糾纏住玩家,基本上使得玩家沒有機會躲開它,這可能是游戲設計者所需要的,但是,玩家更希望敵人在追逐玩家的時候能夠多飛一會兒。如果希望這個過程更加完美一些,玩家至少有機會能夠以機動性戰勝外星人。即敵人飛機在追逐玩家精靈時不應該全力以赴地進行躲閃,而是有余力去追擊敵人。

使追逐算法變得更加平和的一種方法就是,在過程中加入一點隨機性,我做的這個游戲使用的是這樣一種方法:

/*有跟蹤能力的小飛機的出現具有隨機性*/
x=(int)(random.nextInt()%3);
                     if(x==0)
                     {
                       flag=i;// flag標記具有跟蹤能力的小飛機
                     }
   break;

在這段代碼中,敵人飛機只有三分之一的機會能夠跟蹤玩家。即便只有三分之一的機會能夠追逐到玩家,敵人飛機還是對玩家具有攻擊性,而這也使玩家能夠爭取逃脫的機會。

在漫游AI中,還有一個分類,即是按照預先定義的方式飛行,發射子彈或射擊的敵方機體。在我做的這個游戲中,敵機由計算機(程序)來進行控制,幾乎敵機的所有行為均由程序控制。

對於逃避、模式漫游戲AI,行為AI我做的這個游戲中沒有具體的實現,所以只是簡單地進行介紹(可以參看《J2ME手機游戲編程入門》第三部分,第13章)。逃避AI在邏輯上與逃避AI是相對的,即敵機試圖躲避玩家飛機的射擊。和追逐一樣,逃避也可以使用隨機方法或者模式移動來減緩。比如逃避的一個經典例子是Pac-Man。模式移動指得是游戲對象使用一組預定義的移動的一種漫游AI類型。模式移動的典型例子是經典街機Galaga中的外星人,它們在屏幕上表演各種各樣的漂亮的特技飛行。模式包括圓圈,八字形等等。

AI的另外一大類是行為AI,它常常是一組混和漫游AI算法賦予游戲對象特定的地為。比如敵方機體有時候追逐,有時候躲避,並且每次交替時間都是隨機的。常常在實現中,先定義幾種行為:追逐、躲避、按某模式飛行或隨機飛行,並且可以上述行為分配時間百分比,如50%追逐,10%躲避,40%隨機飛行等。實現行為AI的偽碼可以這樣表示。

int behavior=Math.abs(rand.nextInt())%100;
if(behavior<50)
//追逐
else if(behavior<60)
//躲避
else
//隨機飛行

最後一種AI類型即是策略AI,這種AI機制常常在棋牌類,益智類游戲中比較常見。

出處:http://gaochaojs.blog.51cto.com/812546/187540

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved