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