最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

數(shù)組在游戲開發(fā)中的應(yīng)用

2023-03-09 15:29 作者:Feishiko  | 我要投稿

很多游戲,像Tetris(俄羅斯方塊)、Sokoban(推箱子)的邏輯實(shí)現(xiàn)都是依靠對數(shù)據(jù)的操縱,把離散的數(shù)據(jù)用數(shù)據(jù)結(jié)構(gòu)儲(chǔ)存起來,就能對其做很多事情。

比如在Tetris中,我們可以把每一塊離散的空間都放到一個(gè)二維數(shù)組里面,然后給數(shù)組里面的每一個(gè)元素一個(gè)ASCII,比如#表示方塊,.表示空位置。方塊旋轉(zhuǎn)的時(shí)候可以乘以一個(gè)2d旋轉(zhuǎn)矩陣,然后讓方塊轉(zhuǎn)動(dòng)到對應(yīng)的位置;當(dāng)有一行全部被#擠滿的時(shí)候,那一行將被刪除,并且在上面的所有方塊往下移動(dòng)一格。然后我們可以把這個(gè)二維數(shù)組用繪圖API畫出來。

再比如Sokoban,我們可以用@表示玩家,#表示墻壁,O表示箱子,^表示坑。然后基于二維數(shù)組進(jìn)行各種邏輯上的處理,比如要讓玩家移動(dòng),要保證玩家前面不能有墻壁,舉一個(gè)簡單的例子,這里用lua

只要你掌握了怎么操縱數(shù)組,那么對于很多功能的實(shí)現(xiàn)就會(huì)變得非常簡單!像關(guān)卡生成或者尋路算法等等,都需要對數(shù)據(jù)進(jìn)行各種操縱。

甚至關(guān)卡編輯器我們也可以使用各種格子。

在SHENZHEN I/O中,玩家如果要制作自己的關(guān)卡,就要自己寫lua,其中關(guān)卡編輯器就是一個(gè)asciiMap!玩家把地圖用ascii的方式打成字符串,然后后臺(tái)就會(huì)把這個(gè)table拿去解析成一個(gè)二維數(shù)組。

我自己用一些比較原始的游戲引擎做游戲的時(shí)候,也喜歡寫asciiMap,然后解析成二維數(shù)組,進(jìn)而寫一些邏輯。

再比如尋路算法,如果你的游戲地圖是用二維數(shù)組表示的,那么就能通過操縱各種數(shù)據(jù)來實(shí)現(xiàn)尋路。這里我們用一個(gè)叫做BFS的算法。

使用BFS需要一個(gè)Quene,我們簡略畫一個(gè)地圖。其中下面的@是玩家,E是敵人,#是墻壁,.是空地

首先我們要?jiǎng)?chuàng)建另一個(gè)二維數(shù)組,#標(biāo)記為-9999,空地標(biāo)記為0,@標(biāo)記為0,E自身是9999。在@的位置對四周非-9999的進(jìn)行標(biāo)記,此輪標(biāo)記為1,然后把標(biāo)記為1的位置記錄到Quene,Quene的原則是先進(jìn)先出。

接下來就可以對1的這個(gè)位置做剛才一樣的事情,但是我們是從Quene里面提取的位置,直到Quene沒有東西為止。之后的asciiMap應(yīng)該大致如此:(x表示10,因?yàn)檫@里放不下了)

然后E(敵人)就可以找周圍更小一點(diǎn)的數(shù),如果更小就走這一格,最后就能走到玩家的位置。

再比如Solitaire(單人紙牌),像蜘蛛紙牌/空當(dāng)接龍之類的,也很需要對數(shù)組進(jìn)行操縱

Solitaire有很多行,很多列,然后每一個(gè)元素里面存一個(gè)數(shù)字,數(shù)字表示對應(yīng)的牌,舉個(gè)簡單的例子:

隨便打了一點(diǎn),當(dāng)然正常Solitaire是隨機(jī)的,亂序的,不像我這么整齊。

我們都知道,撲克牌一共四種花色,每種花色13張牌,我們就可以1-13一個(gè)花色;14-26一個(gè)花色以此類推。

再然后我們可能要堆疊牌,比如我們要把紅桃7放到紅桃8上面,這里紅桃是1-13,那么我們要判斷當(dāng)前牌的id+1是否等于要放到的牌上面(是否等于8)

總結(jié)

所以對于很多游戲來說,數(shù)組是一個(gè)很強(qiáng)大的工具!如果你能很好的用在你的游戲上,這會(huì)很有幫助!

數(shù)組在游戲開發(fā)中的應(yīng)用的評論 (共 條)

分享到微博請遵守國家法律
民县| 贵溪市| 黔西| 石台县| 松潘县| 沙雅县| 长沙市| 青海省| 来宾市| 大化| 普宁市| 望谟县| 兴海县| 博兴县| 图片| 且末县| 泰宁县| 合阳县| 甘泉县| 团风县| 新泰市| 旌德县| 乌恰县| 望都县| 太湖县| 牡丹江市| 庐江县| 辽中县| 蒲城县| 锡林浩特市| 深水埗区| 宁陕县| 古丈县| 崇州市| 武川县| 怀宁县| 萨嘎县| 郎溪县| 松潘县| 法库县| 兰坪|