我正在尝试制作一个80x20的2D阵列,它可以创建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 :(得分: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]
您可以看到您的周边索引将是第一行和最后一行,以及第一列和最后一列。我将把实现留给您,但您应该能够使用2D数组的这个子集来选择您想要连接的值。
祝你好运!
答案 1 :(得分: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
}
从填充数组的算法开始并随机地随机播放它可能会......效率低......但是,正如参数所说的那样,最终其中一个随机排列会触及你想要的东西。