2011-10-03 68 views
2

我正在製作我的第一個3D遊戲,但我陷入了一個部分。我從來沒有好algortihms甚至數學,所以我有點難以與此:(隨機生成3x3x3「塊」大結構

無論如何,我想要生成3x3x3(當然,如果算法會在任何大小,它會很好!)「結構「或任何它應該被調用,1個單位是一個塊/立方體,我不希望它充滿塊,但隨機生成形狀,以便有些部分會有塊,有些會是空的,所有塊應該連接到一個ATLEAST其他塊(不斜,但「直」)。

我希望你明白我是什麼後:)

我迅速做了一個小圖片用油漆,如果有幫助的。不過,我希望它會變得更加空虛,如果上半部分比下半部分更頻繁,它會很棒。

enter image description here

+0

沒有圖像附加到您的文章。 – Krumelur

+0

Oded:嗯,我試圖手動,但代碼充滿了if語句和random.Next()調用。我想不出有什麼辦法通過循環或更清潔的方式來做到這一點。 – flai

+0

你真的應該發佈你的代碼,並解釋你有問題的地方。您的評論僅用於進一步混淆事物。 – Oded

回答

5

你爲什麼不只是創造一些結構,然後使用隨機數來確定其中的一個。如果你製作7個不同的用戶,玩家幾乎不會注意到任何形式的重複。 Btw:如果忽略所有旋轉對稱的結構,那麼不應該有那麼多符合條件的不同結構。

1

的示例算法,你可以實現:
- 挑在3x3x3的隨機位置
- 隨機選擇一個方向出來的可能直線選項(刪除,將帶你立方體外選項)
- 去到那個位置
(所以它在你的3x3x3的陣列或類似的東西設置爲「1」) - 重新開始

可選:
*也刪除,你已經去過
*首先生成一個隨機選擇numbe r表示要填充的點的數量,然後在有多少點時停止算法。
*允許所有方向,並且只需輸入立方體的「另一面」(這可能會導致部分被未連接到其他部分)

2

進行了擴展,@ FlyOn的評論,我會建議你考慮一下作爲規則體系的問題。寫出/規劃出規則。問自己這樣的問題:

  • 當生成的鄰位,有什麼有效的三維空間運動達到那個位置?

    (在固體每個座標塊具有6面相鄰的座標塊,8點相鄰的座標塊和12邊緣相鄰的座標塊6 + 8 + 12 + 1 = 27 = 3^3)

  • 你怎麼能限制你的隨機生成本身只生成面臨相鄰的座標,以便你不必在隨機後應用該規則?

  • 如果您位於位置(0,0,0),並且選擇的隨機相鄰塊爲(0,0,-1),那麼確定該值是否有效所需的測試是什麼?

寫了邏輯和寫一些單元測試式的方法調用與測試的邏輯方法。當你用不同的輸入測試它們時,看看它們是否按預期工作。

三維空間中的邏輯謎題非常有趣:)