朱艷萍
摘要:該文主要闡述了前端RPG開發(fā)中,當(dāng)作為背景的地圖較為復(fù)雜時,如何用程序的方法構(gòu)建與背景地圖一致的二維數(shù)組,采用圖文結(jié)合論述其算法,并使用原生JavaScript語言實(shí)現(xiàn)。
關(guān)鍵詞:二維數(shù)組;背景地圖;RPG;角色
中圖分類號:TP311? ? ? 文獻(xiàn)標(biāo)識碼:A? ? ? 文章編號:1009-3044(2019)03-0065-02
所謂RPG是指角色扮演游戲(Role Playing Game),是游戲類型的一種,在游戲中,玩家負(fù)責(zé)扮演這個角色在一個寫實(shí)或虛構(gòu)世界中活動。本文主要是闡述在RPG游戲中代表寫實(shí)或虛構(gòu)世界的復(fù)雜背景地圖其對應(yīng)二維數(shù)組的設(shè)計(jì)如何完成。該類型游戲中玩家負(fù)責(zé)扮演角色,通過一系列的指令完成游戲,這些指令與其背景地圖密切相關(guān),玩家是否能成功執(zhí)行游戲指令取決于該地圖對應(yīng)的二維數(shù)組元素是否準(zhǔn)確與地圖元素一一對應(yīng),構(gòu)建這樣的一個二維數(shù)組成為關(guān)鍵。
1網(wǎng)格化地圖及網(wǎng)格大小依據(jù)
游戲玩家要能準(zhǔn)確執(zhí)行指令,其背景環(huán)境中每一處元素一定要與某個數(shù)據(jù)關(guān)聯(lián),指令執(zhí)行的判斷依據(jù)便是這個數(shù)據(jù),方法便是將地圖網(wǎng)格化,繪制網(wǎng)格大小的依據(jù)是讓網(wǎng)格能包含地圖中最小背景元素即可,當(dāng)為每個網(wǎng)格標(biāo)注數(shù)據(jù)后,游戲玩家能夠根據(jù)數(shù)據(jù)準(zhǔn)確判斷是哪個背景元素,以執(zhí)行相應(yīng)指令,如圖1所示,地圖網(wǎng)格化效果。
2獲取二維數(shù)組算法描述及必要性
要得到圖1中的與地圖元素對應(yīng)的二維數(shù)組,需要逐行逐列去確認(rèn)地圖中背景元素情況,然后給對應(yīng)二維數(shù)組元素標(biāo)注數(shù)字,代表該背景元素。如果背景地圖元素簡單,地圖網(wǎng)格比較大,網(wǎng)格數(shù)量比較少,相應(yīng)二維數(shù)組比較小,那么標(biāo)注二維數(shù)組會非常容易,人工完成也不會很費(fèi)力,但是,如果該背景地圖元素復(fù)雜,地圖網(wǎng)格小,網(wǎng)格數(shù)量多,對應(yīng)二維數(shù)組將非常大,通過人工肉眼對照地圖網(wǎng)格逐個去確認(rèn)背景元素,完后又人工逐個去標(biāo)注對應(yīng)二維數(shù)組元素值,工作量會非常巨大!將該過程編制成一套程序顯得尤為有意義。為了便于對問題進(jìn)行描述,我們將上圖中凡是能夠通行的地方我們稱之為通路,凡是不能通行的地方,我們稱之為障礙物,那么上述構(gòu)建二維數(shù)組的過程的具體做法是,將與地圖網(wǎng)格對應(yīng)的二維數(shù)組元素全部初始化為1(代表通路),為每個網(wǎng)格添加點(diǎn)擊事件,通過點(diǎn)擊事件與計(jì)算機(jī)進(jìn)行通信,用戶若點(diǎn)擊某個網(wǎng)格表明該網(wǎng)格需要標(biāo)注障礙物,將該網(wǎng)格對應(yīng)的二維數(shù)組元素修改為0(代表障礙物)。
3獲取二維數(shù)組具體實(shí)現(xiàn)步驟
1) 繪制一個網(wǎng)格
arrCreate函數(shù)最后的返回值arr至關(guān)重要,這個返回值就是我們這個項(xiàng)目的最終的目的,后面所有的動作算法都是為了將該二維數(shù)組與背景地圖對應(yīng)起來。調(diào)用arrCreate(rows,cols)函數(shù)后,網(wǎng)格用二維數(shù)組數(shù)據(jù)填充效果如圖2所示,可見,此時二維數(shù)組的值與地圖背景元素布置是沒有對應(yīng)的。
4) 給網(wǎng)格添加點(diǎn)擊事件。
該步驟是整個程序的核心動作,也是實(shí)現(xiàn)程序化構(gòu)建二維數(shù)組的關(guān)鍵點(diǎn),給網(wǎng)格添加點(diǎn)擊事件實(shí)現(xiàn)與計(jì)算機(jī)通信,要求計(jì)算機(jī)將用戶點(diǎn)擊的網(wǎng)格進(jìn)行標(biāo)注,本項(xiàng)目中對需要設(shè)置障礙標(biāo)志的地方點(diǎn)擊后標(biāo)注0。
考慮到用戶點(diǎn)擊過程中,可能出現(xiàn)一些人為因素導(dǎo)致點(diǎn)擊失誤,比如點(diǎn)擊網(wǎng)格錯位的情況,我們在設(shè)計(jì)程序時讓用戶可以通過多次點(diǎn)擊網(wǎng)格,實(shí)現(xiàn)設(shè)置障礙和取消障礙的隨意切換,比如:第一次點(diǎn)擊某個網(wǎng)格表示設(shè)置障礙,第二次點(diǎn)擊時表示取消障礙,再次點(diǎn)擊又是設(shè)置障礙,優(yōu)化addClick函數(shù)如下:
調(diào)用優(yōu)化后的addClick函數(shù),反復(fù)點(diǎn)擊網(wǎng)格,網(wǎng)格數(shù)據(jù)會在0和1之間切換,效果如下圖4所示:
至此,程序化方法實(shí)現(xiàn)二維數(shù)組構(gòu)建的方法基本完成。文章前面提到,本文僅用了0表示地圖中障礙物,1表示地圖中通路,當(dāng)實(shí)際開發(fā)需要將地圖中場景元素嚴(yán)格區(qū)分時,只需在每次點(diǎn)擊時用不同的數(shù)據(jù)進(jìn)行標(biāo)注,并同步到二維數(shù)組中,計(jì)算機(jī)通過對二維數(shù)組元素值進(jìn)行判斷時,就如同玩家面對地圖進(jìn)行判斷一樣,有興趣的讀者可以觸類旁通完成此項(xiàng)工作。
參考文獻(xiàn):
[1] 張志強(qiáng).C++中指針的研究與應(yīng)用[J].電腦知識與技術(shù),2011(14).
[2] 譚丞.關(guān)于在C++中數(shù)組申請歸還實(shí)現(xiàn)的研究與應(yīng)用[J].福建電腦,2009(4).
【通聯(lián)編輯:光文玲】