游戲開發(fā)中的人工智能_第1頁
游戲開發(fā)中的人工智能_第2頁
游戲開發(fā)中的人工智能_第3頁
游戲開發(fā)中的人工智能_第4頁
游戲開發(fā)中的人工智能_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、游戲開發(fā)中的人工智能-腳本AI及腳本引擎腳本概述述腳本引擎擎實(shí)例AI腳本語言言的危險(xiǎn)險(xiǎn)開發(fā)腳本本語言的的注意事事項(xiàng)腳本AI及腳本引引擎腳本概述述腳本概述述概述開發(fā)腳本本語言的的動(dòng)機(jī)腳本語言言剖析編譯器腳本是為為了簡化化某種特特定程序序的復(fù)雜雜任務(wù)而而設(shè)計(jì)的的一種編編程語言言。因此此,腳本本是根據(jù)據(jù)程序的的特點(diǎn)定定制的,它的使使用范圍圍在很大大程度上上取決于于所需要要解決的的問題。腳本機(jī)制制可以說說是游戲戲開發(fā)過過程中不不可或缺缺的一部部分,它它可以讓讓游戲設(shè)設(shè)計(jì)師而而不是游游戲程序序員撰寫寫出游戲戲的巧妙妙之處,并予以以精細(xì)化化。玩家家也可以以利用腳腳本語言言,建立立或修改改其所處處的游戲戲世

2、界或或等級。腳本系統(tǒng)統(tǒng)怎樣及及如何操操作,主主要取決決于該系系統(tǒng)的使使用者。開發(fā)腳本本系統(tǒng)時(shí)時(shí)還應(yīng)該該考慮其其他因素素,例如如:加密密、開發(fā)發(fā)描述編編譯器等等,使得得最后的的結(jié)果難難以讓人人閱讀。腳本概述述并行開發(fā)發(fā):腳本本語言可可以允許許設(shè)計(jì)人人員在獨(dú)獨(dú)立于程程序開發(fā)發(fā)人員的的情況下下構(gòu)造很很多新的的特性并并做修改改。易于使用用:腳本本語言提提供了一一種比專專業(yè)編程程語言更更簡單,開發(fā)環(huán)環(huán)境更受受保護(hù)的的工具。數(shù)據(jù)驅(qū)動(dòng)動(dòng)的設(shè)計(jì)計(jì)開發(fā)速度度快安全性:腳本語語言在一一個(gè)受保保護(hù)的環(huán)環(huán)境中運(yùn)運(yùn)行,可可以保證證腳本內(nèi)內(nèi)的致命命錯(cuò)誤不不會(huì)使游游戲崩潰潰,最壞壞的情況況就是腳腳本被停停止執(zhí)行行??蓴U(kuò)展性

3、性:允許許游戲使使用者擴(kuò)擴(kuò)展AI開發(fā)腳本本語言的的動(dòng)機(jī)一個(gè)腳本本語言通通常由兩兩部分組組成:語語言和引引擎腳本語言言與任何何一種編編程語言言一樣,規(guī)定了了一組特特定的語語法,腳腳本語言言可以通通過轉(zhuǎn)化化或編譯譯變換為為引擎可可以處理理的格式式。腳本引擎擎也稱為為解釋器器,用來來執(zhí)行經(jīng)經(jīng)過編譯譯的腳本本。經(jīng)過編譯譯的腳本本稱為字字節(jié)碼流流(bytecodestream),它包含了了腳本需需要解釋釋器所執(zhí)執(zhí)行的所所有內(nèi)容容。腳本語言言的剖析析編譯器概述詞法分析析器語法分析析器代碼生成成器語法分析析樹編譯器概概述編譯器負(fù)負(fù)責(zé)把開開發(fā)人員員編寫的的源文件件轉(zhuǎn)化為為計(jì)算機(jī)機(jī)可以執(zhí)執(zhí)行的代代碼。腳腳本語言

4、言的編譯譯器與傳傳統(tǒng)的編編譯器直直接產(chǎn)生生可執(zhí)行行代碼不不同,它它生成字字節(jié)碼流流,字節(jié)節(jié)碼流包包含了腳腳本需要要解釋器器所執(zhí)行行的所有有內(nèi)容。編譯器轉(zhuǎn)轉(zhuǎn)換步驟驟:詞法法分析器器首先用用來處理理詞組,讀入源源代碼,然后把把它們分分解為一一些基本本的單元元,即腳腳本語言言中任何何一個(gè)單單獨(dú)的結(jié)結(jié)構(gòu)(construct),稱為為Token。例如:-,*,=,if,void,MyFunction。Token被傳送給給語法分分析器。語法分析析器負(fù)責(zé)責(zé)定義語語言的合合理結(jié)構(gòu)構(gòu),確保保當(dāng)前的的腳本是是一段合合理的程程序,負(fù)負(fù)責(zé)把腳腳本源代代碼轉(zhuǎn)換換為編譯譯器可以以理解的的結(jié)構(gòu),即語法法分析樹樹。語法分析析

5、樹被交交給代碼碼生成器器生成字字節(jié)碼流流。代碼碼生成器器遞歸地地遍歷整整個(gè)語法法分析樹樹以處理理其中每每一個(gè)節(jié)節(jié)點(diǎn),并并生成相相應(yīng)的可可以執(zhí)行行的命令令。語法分析析樹語法分析析樹是程程序員所所寫的腳腳本源代代碼的另另一種表表現(xiàn)形式式,它能能被編譯譯器所理理解。由由于絕大大多數(shù)編編程語言言都是高高度結(jié)構(gòu)構(gòu)化的,所以它它們能被被表示為為一種樹樹狀結(jié)構(gòu)構(gòu)。樹上的每每一個(gè)節(jié)節(jié)點(diǎn)都對對應(yīng)了語語言中的的一種結(jié)結(jié)構(gòu)類型型(例如如,條件件語句,函數(shù)調(diào)調(diào)用,表表達(dá)式等等),這這些節(jié)點(diǎn)點(diǎn)的子節(jié)節(jié)點(diǎn)是相相應(yīng)的語語言結(jié)構(gòu)構(gòu)所需要要的操作作數(shù)。語法分析析樹腳本引擎擎堆棧機(jī)堆棧機(jī)的的執(zhí)行控制代碼碼流腳本引擎擎堆棧機(jī)任何一

6、種種腳本語語言都需需要一個(gè)個(gè)用來執(zhí)執(zhí)行程序序員所編編寫腳本本的引擎擎,即翻翻譯器,負(fù)責(zé)腳腳本執(zhí)行行的各個(gè)個(gè)方面的的工作。由于翻譯譯器執(zhí)行行的指令令集并不不是特定定的匯編編代碼,因此稱稱之為虛虛擬機(jī)(VM),負(fù)責(zé)責(zé)執(zhí)行編編譯器所所生成的的字節(jié)碼碼流。堆棧機(jī)是是腳本語語言虛擬擬機(jī)技術(shù)術(shù)中普遍遍采用的的一種基基本形式式。堆棧棧機(jī)的操操作碼首首先從堆堆棧中彈彈出將被被操作的的數(shù)據(jù),然后把把得到的的答案壓壓入同一一個(gè)堆棧棧中。不不斷重復(fù)復(fù)該過程程,直到到整個(gè)字字節(jié)碼流流都被執(zhí)執(zhí)行后結(jié)結(jié)束。由由此可知知,操作作僅需要要堆棧和和指令指指針(用用來指向向字節(jié)碼碼流中將將被執(zhí)行行的下一一條指令令)。實(shí)現(xiàn)堆棧棧機(jī)

7、最直直接的方方法就是是構(gòu)造一一個(gè)類,包括堆堆棧數(shù)據(jù)據(jù),指令令指針以以及用來來處理各各種操作作碼的邏邏輯過程程(操作作碼處理理器)。操作碼處處理器是是構(gòu)造堆堆棧機(jī)的的關(guān)鍵,它負(fù)責(zé)責(zé)處理每每一個(gè)操操作碼所所需要的的工作。由于每每一個(gè)操操作碼處處理器是是類中唯唯一的一一個(gè)成員員函數(shù),可以通通過一個(gè)個(gè)函數(shù)指指針表來來正確地地調(diào)用。操作碼的的值由堆堆棧機(jī)定定義,它它需要定定義從0開始的連連續(xù)的整整數(shù),來來作為函函數(shù)指針針表的索索引。每個(gè)操作作碼處理理器都返返回一個(gè)個(gè)布爾變變量來表表明操作作碼所定定義的操操作是否否成功,若操作作失敗則則停止對對字節(jié)碼碼流的執(zhí)執(zhí)行,調(diào)調(diào)用錯(cuò)誤誤恢復(fù)程程序后清清空。腳本引擎擎

8、堆棧機(jī)堆棧機(jī)例如:ClassVMbool HandlePush(Opeodeop)/.typedef bool( VM:*OpcodeHandler)(opcode);OpcodeHandler m_opHandlersNnm_opcode;每個(gè)函數(shù)數(shù)處理器器被OpcodeHandler定義,都都以一個(gè)個(gè)操作碼碼為參數(shù)數(shù)。通過過把當(dāng)前前指令的的操作碼碼傳遞給給處理器器,對應(yīng)應(yīng)不同操操作就分分別調(diào)用用某個(gè)固固定的處處理器來來執(zhí)行。堆棧機(jī)中中還包括括一個(gè)堆堆棧數(shù)據(jù)據(jù)成員,用來存存放各種種操作所所需的操操作數(shù)。由于STL容器向量量提供了了常數(shù)時(shí)時(shí)間的插插入和刪刪除操作作,而且且對于每每一個(gè)數(shù)數(shù)據(jù)項(xiàng)的

9、的隨機(jī)訪訪問操作作都是常常數(shù)時(shí)間間的,所所以非常常適合用用來構(gòu)造造這種堆堆棧。堆棧機(jī)中中還包括括一個(gè)指指令指針針,指令令指針始始終指向向所需執(zhí)執(zhí)行的下下一條指指令,表表現(xiàn)為指指向字節(jié)節(jié)碼流的的操作碼碼指針。腳本引擎擎堆棧機(jī)初始化,即清空空堆棧、將指令令指針指指向字節(jié)節(jié)碼流的的起始位位置。進(jìn)入循環(huán)環(huán),依次次執(zhí)行每每條指令令。首先先,指令令指針?biāo)赶虻牡牟僮鞔a碼被獲得得,作為為索引傳傳遞給操操作碼處處理器用用來調(diào)用用正確的的操作處處理函數(shù)數(shù)。循環(huán)環(huán)直到整整個(gè)字節(jié)節(jié)流碼被被執(zhí)行完完畢后結(jié)結(jié)束。操作碼處處理器完完成堆棧棧操作的的所有細(xì)細(xì)節(jié),例例如:出出棧、入入棧、相相加操作作等。堆棧機(jī)的的執(zhí)行控制代

10、碼碼流條件語句句對于簡單單條件語語句,即即只具有有條件為為真時(shí)所所執(zhí)行的的程序塊塊。首先先得到條條件表達(dá)達(dá)式的取取值,然然后把它它壓入堆堆棧的頂頂部,接接著執(zhí)行行“為0時(shí)跳轉(zhuǎn)”操作,即首先先把堆棧棧頂部的的操作數(shù)數(shù)彈出,若值為為假,則則按照字字節(jié)流碼碼中給出出的偏移移量進(jìn)行行跳轉(zhuǎn)(跳到條條件語句句后的第第一條語語句);若值為為真,則則執(zhí)行條條件語句句中的程程序塊。對于具有有條件為為真和為為假的程程序塊而而言,偏偏移量指指向條件件表達(dá)式式為假時(shí)時(shí)所需執(zhí)執(zhí)行的程程序塊的的第一句句。編譯譯器會(huì)在在條件表表達(dá)式為為真時(shí),所需執(zhí)執(zhí)行的程程序塊結(jié)結(jié)束的地地方,生生成一條條相對跳跳轉(zhuǎn)語句句,用來來跳過緊緊跟

11、在后后面的條條件為假假時(shí)所需需執(zhí)行的的程序塊塊。控制代碼碼流循環(huán)語句句循環(huán)語句句執(zhí)行時(shí)時(shí)混合使使用條件件轉(zhuǎn)移和和相對轉(zhuǎn)轉(zhuǎn)移指令令。例如如:C風(fēng)格的for循環(huán)會(huì)生生成以下下偽匯編編代碼:Perform preloopexpression.A:Performloop conditional expression.Jump to label Biftop-stack elementiszero.Perform loopbodystatements.Perform loopincrementalexpression.Jump to label A.B:Firststatementafterthe fo

12、r-loop.控制代碼碼流函數(shù)由于當(dāng)函函數(shù)執(zhí)行行完畢時(shí)時(shí)需要返返回到調(diào)調(diào)用它的的代碼所所在的位位置,所所以虛擬擬機(jī)需要要通過維維護(hù)一個(gè)個(gè)指令指指針的地地址堆棧棧來對函函數(shù)調(diào)用用的狀態(tài)態(tài)進(jìn)行跟跟蹤,以以便當(dāng)函函數(shù)返回回時(shí)對指指令指針針的值進(jìn)進(jìn)行更新新。即當(dāng)當(dāng)函數(shù)被被調(diào)用時(shí)時(shí),當(dāng)前前指令指指針的值值被壓入入這個(gè)堆堆棧的頂頂部,然然后函數(shù)數(shù)中第一一條指令令的地址址值被賦賦給指令令指針。當(dāng)函數(shù)數(shù)執(zhí)行完完畢時(shí),函數(shù)堆堆棧頂部部的數(shù)據(jù)據(jù)被用來來重置指指令指針針的值,以便程程序執(zhí)行行回到函函數(shù)調(diào)用用的地方方。虛擬機(jī)用用堆棧幀幀(stackframes)來存放放函數(shù)的的返回值值、參數(shù)數(shù)和局部部變量。通過幀幀指

13、針(framepointer)指向第第一個(gè)局局部變量量來訪問問堆棧幀幀中的任任何參數(shù)數(shù)和局部部變量。處于激激活狀態(tài)態(tài)的堆棧棧幀都維維護(hù)在一一個(gè)鏈表表中,并并且被保保存在調(diào)調(diào)用堆棧棧(call stack)中,調(diào)調(diào)用堆棧棧中包含含每個(gè)堆堆棧幀的的指針和和指令指指針。實(shí)例指定對手手屬性:決定因因素是游游戲類型型腳本的基基本分析析影響對手手行為增加預(yù)先先定義好好的全局局變量,并由游游戲引擎擎賦值,以評估估游戲世世界里的的特殊情情況。AI角色的移移動(dòng)口語互動(dòng)動(dòng)口語嘲諷諷輔助暗示示觸發(fā)事件件及增加加氣氛AI腳本語言言的缺陷陷語言的成成熟性:改進(jìn)、開發(fā)工工具、參參考手冊冊缺乏具有有完全特特性的開開發(fā)、調(diào)調(diào)試和統(tǒng)統(tǒng)計(jì)工具具腳本都是是在運(yùn)行行時(shí)進(jìn)行行解釋的的,因此此具有更更大的性性能負(fù)擔(dān)擔(dān)固定性的的AI腳本會(huì)使使得游戲戲重玩性性大大降降低設(shè)計(jì)正確確的界面面(編輯輯器)設(shè)計(jì)者與與AI交互決定AI實(shí)體的初初始位置置、提供供附加AI實(shí)體參數(shù)數(shù)、指定定運(yùn)動(dòng)路路徑、指指定

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論