好吧,我已經看過很多像我自己這樣的人,他們都是編程初學者。大多數時候,他們的問題很難回答或理解問題的真實性。我會盡我所能對我的問題儘可能具體,以免上述提及。文明1像瓷磚地圖生成
首先,我一直在關注教程http://xnagpa.net/xna4rpg.php。我的平鋪引擎基於Jamie McMahon在他的RPG教程系列中製作的引擎。只是讓你知道我的瓷磚引擎的一般結構是什麼樣子。
其次,我將嘗試解釋我在瓷磚引擎內部要做的事情。我最近發現了一篇關於原始文明如何生成地圖的文章。 http://forums.civfanatics.com/showthread.php?t=498630 而且我更喜歡這種生成「世界」風格地圖的方法。即:海洋,大陸,島嶼等。所以我決定試着去實現它並將其應用到我的tile引擎中。它適用於大部分。我添加到拼貼引擎的部分應該隨機在指定的地圖圖層(y,x)中選取一個位置,然後從該位置生成一塊土地(或多個拼貼),然後用地圖圖層中的拼貼替換在大塊土地上創建的瓷磚。 (生病在一分鐘內顯示代碼),然後爲期望數量的任意數量的陸地(塊)或繼續創建大塊土地,直到地塊的數量等於所需數量的地塊。
我的問題: 我的程序做了它應該做的(如上所述),除了它只做一塊地塊(塊瓷磚)它做的一切都很好,但它由於某種原因不會超過一個大陸。現在我懷疑它實際上是在製造其他大陸,但不知怎麼的,瓷磚引擎設置顯示地圖圖層的方式正在導致陸地被水覆蓋。也許它是一個分層問題。但它不應該是因爲大陸的一切都屬於同一層。所以我完全不知道爲什麼要這樣做。
public void GenerateLandChunks(MapLayer layer)
{
Tile tile = new Tile(0, 3);
Random random = new Random();
int x = random.Next(8, layer.Width - 10);
int y = random.Next(10, layer.Height - 20);
int length = random.Next(10, 70);
for (int i = 0; i < length; i++)
{
if (length != 0 && x > 8 || x < layer.Width - 10 && y > 10 || y < layer.Height - 20)
{
layer.SetTile(y, x, tile);
layer.SetTile(y, x + 1, tile);
layer.SetTile(y + 1, x, tile);
}
x = random.Next(x - 1, x + 2);
y = random.Next(y - 1, y + 2);
}
}
這是我的方法來產生實際的塊它做我想做的。 (高於)
MapLayer randomLayer = new MapLayer(100, 100);
for (int y = 0; y < randomLayer.Height; y++)
{
for (int x = 0; x < randomLayer.Width; x++)
{
Tile tile = new Tile(1, 3);
randomLayer.SetTile(x, y, tile);
}
}
int landMasses = 5;
for (int i = 0; i < landMasses; i++)
{
randomLayer.GenerateLandChunks(randomLayer);
}
這是我創建地圖圖層的地方。我最初將整個地圖設置爲水瓦(瓦(1,3)),然後我告訴它會產生5個地塊。
這似乎應該工作。它的確如此,但就像我剛纔所說的那樣。它不顯示其他4個陸地羣衆。
我的問題: 有沒有什麼你可以在這裏看到,我做錯了,以完成我想要做的事情?
如果你需要更多的代碼來了解發生了什麼,讓我知道和生病發布你需要什麼。就像我所說的,除了我發佈的內容外,其他內容與Jamie McMahon的瓷磚引擎完全相同。
對不起,如果我不清楚,或者我的問題很難回答。我試圖讓它儘可能簡單。感謝您的時間。
好吧,生病嘗試一下。我很抱歉,我只是想清楚這麼多的文字。謝謝 – Spool
它工作完美。非常感謝你。我會盡量保持我的問題在未來更短。對於那個很抱歉。但是,謝謝。 – Spool
@Spool是的,到了一定的地步。也請務必接受答案,如果它實際上是您的問題的答案:) – Dialecticus