2013-04-23 71 views
1

我正在試圖創建一個80x20的二維數組,創建6個數組的周邊上的兩個點之間隨機連接的線。我想像它會看起來像只在一些地方框起來的圖片。我的問題是,我不知道如何選擇並鏈接陣列外圍的兩個隨機點並顯示它們。我做了一個代碼選擇完全隨機點,但似乎無法解決這個任務。有人能指引我朝着正確的方向嗎?二維數組,計算並存儲6個隨機連接點

#include <iostream> 
#include <algorithm> 
using namespace std; 

int main() 
{ 
    const int rows = 80; //declares the amount of rows in the 2d array 
    const int cols = 20; //declares the amount of columns in the 2d array 
    char sky[rows][cols]; 

    fill_n(&sky[0][0], 100, '-'); 
    fill_n(&sky[0][0] + 100, rows*cols - 100, ' '); 
    random_shuffle(&sky[0][0], &sky[0][0] + rows*cols); 

    for(int r = 0; r < rows; ++r) 
    { 
     for(int c = 0; c < cols; ++c) 
      cout << sky[r][c]; 
      cout << " "; 
    } 

    return 0; 
} 
+0

連字符和空格的意義是什麼('' - ''和' ''')在'天空'?另外,你是否打算在同一行上打印所有行? – jerry 2013-04-23 19:40:45

+0

此代碼最初用於製作隨機放置星星的二維數組。所有其他空間都是空白的。 – Trollslayer 2013-04-23 19:55:13

+0

我明白了,所以連字符代表明星。您是否試圖擴展此代碼以包含所描述的功能或僅將其作爲您知道如何執行的示例發佈?根據你的描述,這聽起來像整條線必須在外圍(而不僅僅是端點)。它是否正確?如果是這樣,一條「線」是否可以穿過一個角落,或者它是否完全位於一側? – jerry 2013-04-23 20:23:02

回答

0

可視化你的陣列作爲一個簡單的例子

[0][0], [0][1], [0][2], [0][3] 
[1][0], [1][1], [1][2], [1][3] 
[2][0], [2][1], [2][2], [2][3] 
[3][0], [3][1], [3][2], [3][3] 

以下你可以看到,在外圍指數將是第一個和最後一個行,第一個和最後一列。我將把實現留給你,但是你應該能夠使用你的二維數組的這個子集來選擇你想要連接的值。

祝你好運!

+0

但是我如何讓程序選擇並連接外圍的兩個點? – Trollslayer 2013-04-23 19:57:25

+0

我們還沒有學會這麼做。還有另一種方法可以做到嗎? – Trollslayer 2013-04-24 00:39:22

+0

@Trollslayer你還沒學會怎麼做?遍歷數組? – 2013-04-24 21:07:59

0

如果我在讀你的描述吧,你想要做這樣的事情(僞代碼):

for i in 1..6 
{ pick one of four sides of the rectangle at random 
    pick a random point p1 on that side 

    pick one of the other three sides at random 
    pick a random point p2 on that side 

    use a line drawing algorithm (like Bresenham) to connect p1 and p2 
} 

與填充數組的算法開始並隨機洗牌圍繞它很可能是....效率低下......儘管如此,最終隨機排列之一會打到你想要的東西......