2017-03-03 96 views
2

我想在Lua中製作一個2D程序生成的殭屍啓示錄遊戲。生成具有程序生成結構的現實世界

使用多個噪聲圖,我可以很容易地得到一個高度圖,溼度圖和溫度圖的二維數組,我可以用它來生成逼真的生物羣落。 這很容易做到,但爲了減少滯後,我需要將地圖分成塊,所以我只生成一次塊。我也可以做到這一點,但我想要的是一個巨大的開放世界,有河流,樹木(森林中有更多的樹木),農場和其他特殊建築,村莊和城市,道路......

我目前思想是,爲不同結構的其他較小二維陣列,並隨機將它們與另一個結構地圖,但我不知道如何做到這一點,但也可能建築物和道路重疊,我不想。我不認爲我可以生成2個或更多塊(因爲原理圖會覆蓋結構所在的地圖)的單個結構,所以我該如何做到這一點,有人可以幫忙嗎? 謝謝!

+0

你可以依靠你的高度圖矩陣來支持一些'理想'的景點,更大的水面,更小的山地。還涉及一些城鎮之間的最小距離。 –

回答

2

世界是靜態還是動態?如果樹木燒燬,村莊被毀壞,但在別處重新創建,等等。複雜性會跳躍。此外,如果村民在場並擁有任何類型的人工智能,他們需要「知道」周圍的事物,這些事情可能會隨着程序生成而變得粘稠。

一個「訣竅」是創建世界塊,當創建一個新的塊時,然後生成並保存結構數據。您也可以將此作爲「外圍」功能發生,其中如果播放器位於區塊A中,則在後臺生成並保存尚未生成的任何區塊。

放置結構應該是微不足道的。塊結構的ID和(塊特定的)xy座標是您需要放置它們的全部。您可以包含結構「區域」的寬度和高度以協助進行結構放置碰撞檢測。比如說,在農場圍欄,你可以在那裏放置圍欄,玩家可以圍繞它或任何東西走動。對於像洞穴入口山中的地牢那樣的東西,你需要一個「入口結構」,當玩家與之交互時,將玩家置於地下城。

努力讓這些力學計算出來之前試圖讓開放世界超級巨大。首先使用2x2或3x3塊世界並單獨測試結構。這比最初的景觀決策更重要,因爲遊戲玩法大概會圍繞這些結構而不是景觀。

Lua是實現你遊戲的好選擇,但你最終可能會想在C/C++中做程序生成/結構佈局/等。 Use C/C++ to do the heavy lifting like the procedural generation,並將其轉化爲Lua/LOVE消耗的C-callHere's some code這不是2D自上而下,但考慮到可能有用的生成,計時等。在Lua/LOVE中的Here's a city generator。來自Stanford的More on map generationStackoverflow postNPC movement in 2d map

玩得開心!

+0

你能詳細介紹一下_why_ C/C++對於這些任務更好嗎? –

+0

@MikeLyons不一定更好。算法是一種算法。但是根據我上面的鬆散建議,隨着更多功能納入世代,處理負擔變得更大,您只需要爲遊戲性能做好準備。當然,使用Lua來充實代碼算法,特別是如果你更習慣於用那種語言來做這件事,但最終當代人變得更加複雜時,你會發現性能開始受到重創。 – ZagNut

+0

@MikeLyons(con't)當表現開始下降時,你需要一些更低層次的東西來接管。它甚至不需要是C/C++ - 您可以使用任何具有Lua綁定的低級語言。另外,當我在我老化的大腦中描繪這個時,我應該補充一點,我正在考慮「實時」程序生成(例如根據請求重組並組裝在內存中的塊)。如果塊是磁盤上的靜態數據,那麼實際上你只需要跟蹤數據的狀態變化(例如,在地面塊上挖一個洞)。 – ZagNut