2008-12-28 72 views
4

我想在C++中創建一個隨機迷宮,但我無法啓動,因爲我不知道如何創建網格或單元格。我怎麼能創造它?我也想用ASCII字符創建它。我怎麼能將它存儲在數組中? (可以給任何一個示例代碼和一些解釋,所以我可以更好地理解它)如何在C++中爲隨機迷宮創建單元格或網格?

另一個問題:我需要學習和使用哪些數據結構?我打算使用Eller算法或Kruskal算法。

謝謝你們幫助我!我是一個begginer程序員,我想了解這一點,因爲這是我的項目的一部分,謝謝你差異很大!

回答

2

您可能想要將您的迷宮存儲在二維字符數組中。你可以用或不用C++初始化它來聲明一個數組。

char a[30][10]; // declares a char array of 30 rows and 10 columns. 

// declare an array with 3 rows and 3 columns, and provide initial values 
char ticTacToeBoard[3][3] = {{'x', 'x', 'o'}, 
          {'o', 'o', 'x'}, 
          {'x', 'o', ' '} 
          }; 

你可以在你的迷宮更改初始值'|''-'牆壁,並用空格字符,' ',爲通道。 任何初始化方法都可以工作,但您始終以相同的方式使用元素。以下是如何清除上面初始化陣列中的電路板。

// clear the board 
for (int row=0; row<3; row++) { 
    for (int col=0; col<3; col++) { 
     ticTacToeBoard[row][col] = ' '; 
    } 
} 

如果你想讀一個元素(當你試圖瀏覽一個迷宮有用)的值,可以使用相同的下標符號,當你設置它的價值。

char y = a[2][2]; // reads the character in row 2, column 2 
+0

你好,先生!非常感謝您的回答!!現在我明白謝謝你了! – jessemiel 2008-12-29 02:34:59

7

您是否在尋找Maze generation algorithmsmore)?你的問題是算法還是圖形?

典型算法通過將迷宮中的每個「單元」視爲圖的頂點來工作,從所有「牆」開始,並移除與生成樹對應的一組牆。 (所以爲了隨機化它們,很多都是從隨機權重開始,找到最小生成樹。)至少對於小型的迷宮來說,你不需要任何特殊的數據結構來表示單元;你可以把每個細胞想象成一對(x,y)(它的coördinates)。並且因爲(x,y)的鄰居只是(x,y±1)(x±1,y)(忽略那些超出邊界的那些鄰居),所以您不需要任何數據結構(鄰接矩陣/鄰接列表)來存儲圖的邊緣。

在任何情況下,一旦您擁有生成樹,您就會確切地知道哪些牆存在,哪些不存在,因此您可以完整描述迷宮。如果你要繪製迷宮,你知道要繪製哪些。

要使用ASCII字符畫,你只是一個穿過每行一個:畫「上牆」(把「--」如果(x,y)(x,y+1)存在之間的牆),然後繪製實際行(放如果存在(x,y)(x+1,y)之間的牆壁,則爲「|」)。最後畫出底部邊界。

+0

謝謝先生回答,如果對你沒問題,你能給我一個樣本代碼讓我更好地理解它嗎?謝謝你somuch先生! – jessemiel 2008-12-28 20:14:18

0

垂直壁:| | Horiz。華爾街:_

如果您使用固定寬度的字體:

_____ 
| | _ 
|_ | | 
__ | | 
|_____| 

我不知道到底該怎麼做,但在這裏就是我會開始。

確定網格上的起點和終點將在哪裏。然後,創建一個單一的路徑,以任何你想要的扭曲。基本上,它應該是隨機移動,每次都檢查是否還有一條路可以走到最後。然後,從該路徑上移除一定數量的牆,並從這些孔創建其他路徑。繼續操作,直到空間用完。然後,也許,確保沒有創建更短的路徑。如果他們有,阻止他們。