##EasyReadMore##

2009年12月11日 星期五

[教程] 和我一起學習jass AI系列之——jass中和AI有關的一些東西








[教程] 和我一起學習jass AI系列之——jass中和AI有關的一些東西

文章網址:http://bbs.wow8.org/thread-130905-1-5.html

既然來這個區了,就不能老研究真三的AI,要廣泛涉獵。

當然我自己的水平也不怎麼樣。所以編輯這個帖子我還是花了些時間的。為此我還翻出了很多jass方面的教程。。

我盡量做到講解比較詳細。那麼開始了。

AI jass的概念

我們想學AI的話必須首先接觸這個東西:AI線程:Threads的概念。
線程就像TRIGGER的一個循環判斷語句,線程會不停的判斷在線程程序列表內所缺少的元素,並去按照線程的指令排放順序去完成它。
就像碗中的飯,有即吃,有即吃,有即吃,呵呵......
為什麼不用TRIGGER去完成電腦的人工智能呢?
由於使用TRIGGER相比之下可能會消耗大量的內存,所以,最好用AI線程來完成電腦的人工智能。
當然我並不是說非要用線程。但想地圖不卡的話一定要用。
而且在TRIGGERR裡無法完成很多智能的功能。

熟悉wonder的AI地圖的人可能知道,其實wonder的AI也是用的線程。
注意: 線程只針對單個玩家運作。

線程(Threads) 詳細解釋

通常, 當AI腳本開始運行時只創建一個線程, 創建更多的線程可以用comman.j的本地函數:
native StartThread takes code func returns nothing

運行方式的區別在於線程一旦開啟即可自動運轉,觸發器必須調用或者借助事件的發生才可以運行。 調用 call StartThread(function myfunc) 將創建一個從函數myfunc開始執行的線程.
當線程執行到call Sleep(n)。線程會休眠n秒,然後繼續執行。

*每個玩家最多可以擁有6個線程(包括一開始執行的主線程在內,當一個玩家有6個線程數時, 調用StartThread()的語句將被忽略. )
*線程不能回收, 當你為某玩家創建了5個自定義線程, 將無法為該玩家創建更多的線程.
*局域性的全局狀態,在同一玩家中的所有線程都共享全局狀態(包括變量). 即是修改某個全局變量, 修改後的值在此玩家的所有線程中都是可見的.
*當新線程創建時, 線程立即生效. *當線程讓步執行時, 創建此線程的父線程將繼續執行.


注意: 雖然AI腳本可以使用大部分common.j的庫函數, 但有些類型的函數在AI不能正常工作, 如:
a) 返回字符串類型(string)的本地函數, 如I2S(), SubString()等
b) 需要以code, trigger, boolexpr 等類型數據為參數的本地函數, 如觸發器函數, 隊列函數(ForGroup, 等)
注意: AI中不可以使用Blizzard.j的函數, 觸發器中也不可以使用common.ai的函數, AI和觸發器都可以使用common.j的函數(當然, 對於AI, 還受上面所說的限制)
common.ai和common.j是寫AI時可以調用和參考庫文件, 要研究AI, 先去讀這2個文件.

PS:多看Blizzard.j,你就會發現T裡面用的那些B函數是很耗資源和效率不搞的!!。B函數只是面向T,他的核心還是common.j。

在遊戲中, 可能會有多個獨立的jass腳本文件同時運行. 比如在對戰地圖中的遊戲, 運行觸發器腳本文件的同時, 也可能運行了每個電腦玩家的AI腳本文件. 每個腳本文件之間的全局變量不是共享的. 所以, 一個電腦玩家的AI腳本中設置的全局變量不會影響另一個電腦玩家的AI腳本的執行.

觸發器腳本也不可以和AI腳本共享全局變量. 但可以用傳遞命令的方法進行腳本之間的數據交換. 命令由一對數值型數據(integer)組成: 命令值(command value)和數據值(data value).

從觸發器腳本向AI腳本發出通訊命令, 可以使用common.j中定義的以下本地函數:
native CommandAI takes player num,
integer command, integer data returns nothing

PS:實際上wonder就大量的使用了CommandAI 實現j和AI之間的通訊。

當然一般我們可以把AI代碼寫在J文件中,或者像wonder那樣寫在其他的文件中,再去調用。

切記:AI代碼都是純jass,所以不要套用T裡的blizzard.j裡的函數。




沒有留言:

張貼留言

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