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

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

基礎(chǔ) | Roguelike隨機(jī)地圖----洞穴類(一)

2020-02-26 17:36 作者:有木乘舟  | 我要投稿

本系列為筆者初學(xué)c/c++和游戲開(kāi)發(fā)時(shí)的入門博文,以算法和C/C++練習(xí)為主,不涉及到游戲開(kāi)發(fā)軟件(如unity,虛幻4等),適合剛?cè)腴T的小伙伴一起學(xué)習(xí)探討,歡迎在評(píng)論區(qū)留下意見(jiàn)。該系列重點(diǎn)講述Roguelike類型游戲,在早期開(kāi)發(fā)會(huì)涉及到的一些基礎(chǔ)算法。

  • 開(kāi)發(fā)語(yǔ)言:c/c++

  • 開(kāi)發(fā)平臺(tái):macOS mojave / Linux

  • 編譯器:vs Code

一、核心內(nèi)容

  • 細(xì)胞自動(dòng)機(jī)(Cellular Automata)

  • STL庫(kù)(vector,queue,list等)

  • 啟發(fā)式搜索

二、實(shí)現(xiàn)方法

一張洞穴類地圖上包含兩個(gè)最基本的元素:墻壁,地面。前者阻擋角色的行動(dòng),后者構(gòu)成可容納其他元素的“洞穴”。

我們最直觀的的構(gòu)造一個(gè)洞穴的方式,就是在墻壁中挖一個(gè)洞,這樣就形成一個(gè)最簡(jiǎn)單的洞穴。但是在游戲中,一個(gè)地圖往往需要一定的復(fù)雜度,來(lái)放置各式各樣的元素(如怪物、陷阱、寶箱等)。因此在上述方法的基礎(chǔ)上,我們可以通過(guò)細(xì)胞自動(dòng)機(jī)算法來(lái)構(gòu)造更復(fù)雜的洞穴。

由此可以形成最初的方案:

  • 在大地圖的墻壁上隨機(jī)挖一些洞

  • 每個(gè)細(xì)胞自動(dòng)吞食周圍一定范圍內(nèi)的墻壁,形成空洞

為了保證地圖的隨機(jī)性,我們加入一個(gè)隨機(jī)數(shù),細(xì)化后可歸納出以下的實(shí)現(xiàn)步驟:

  1. 構(gòu)建一個(gè)大地圖以二維平面圖表示,以二維數(shù)組存儲(chǔ);地圖最外圍一圈為墻壁不變,地圖內(nèi)每個(gè)點(diǎn)以小于0.45的概率生成墻壁,其余為地面

  2. 遍歷數(shù)組,對(duì)每個(gè)點(diǎn)執(zhí)行下列規(guī)則(細(xì)胞自動(dòng)機(jī)算法):

    • 對(duì)當(dāng)前點(diǎn),若其周圍墻壁數(shù)量大于4個(gè),則其設(shè)為墻壁

    • 對(duì)當(dāng)前點(diǎn),若其周圍墻比數(shù)量小于4個(gè),則其設(shè)為地面

  3. 遍歷地圖,對(duì)每個(gè)區(qū)域執(zhí)行下列規(guī)則(區(qū)域?yàn)榻?jīng)過(guò)2之后形成的“墻壁”和"洞穴",不是單獨(dú)的點(diǎn),而是點(diǎn)的集合;啟發(fā)式搜索算法):

    • 對(duì)當(dāng)前區(qū)域,若該區(qū)域?yàn)閴Ρ谇覕?shù)量小于5個(gè),則將該區(qū)域設(shè)為地面

    • 對(duì)當(dāng)前區(qū)域,若該區(qū)域?yàn)榈孛媲覕?shù)量小于20個(gè),則將該區(qū)域設(shè)為墻壁

  4. 遍歷地圖,將所有獨(dú)立區(qū)域連通(也可以不連通,通過(guò)其他方式來(lái)抵達(dá))。

三、最終成果示例

圖1 初始地圖,白色為墻壁,可見(jiàn)其分布是隨機(jī)無(wú)序的
圖2 經(jīng)過(guò)算法"吞食"后形成的地圖

洞穴類地圖的簡(jiǎn)單生成方法核心部分介紹完畢,接下來(lái)會(huì)分幾章節(jié)詳細(xì)講解具體算法的實(shí)現(xiàn),會(huì)給出相應(yīng)的代碼。歡迎有不同意見(jiàn)的小伙伴留言討論。

基礎(chǔ) | Roguelike隨機(jī)地圖----洞穴類(一)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
博客| 鲁甸县| 平湖市| 陵水| 三原县| 昌都县| 洞口县| 宁强县| 益阳市| 宿州市| 昂仁县| 衢州市| 扎鲁特旗| 东乡县| 东乡| 上饶县| 星子县| 丹凤县| 北辰区| 惠安县| 苍溪县| 青河县| 唐海县| 磐安县| 新宾| 密云县| 中卫市| 壶关县| 深水埗区| 友谊县| 茌平县| 鄄城县| 新密市| 英山县| 泰安市| 辉县市| 玉山县| 都安| 海盐县| 吉水县| 通城县|