我有一个填充0和1的二维数组。我必须以这样的方式显示该数组: - 始终显示0 - 当时只显示1个。
它假设看起来像迷宫,其中0是墙,1是当前位置。 我怎么能用c ++做到这一点?
编辑: 我提出了一个解决方案,但也许更简单一个。如果我创建了我的_array的副本并复制0和空格而不是1s,该怎么办?然后在循环中我将_array“1”中的一个分配给第二个数组,然后显示整个数组,然后用空格换回交换1?
EDIT2:
int _tmain(int argc, _TCHAR* argv[])
{
file();
int k=0,l=0;
for(int i=0;i<num_rows;i++)
{
for(int j=0;j<num_chars;j++)
{
if(_array[i][j] == 1)
{
k=i;
l=j;
break;
}
}
}
while(1)
{
for(int i=0;i<num_rows;i++)
{
for(int j=0;j<num_chars;j++)
{
if(_array[i][j] == 0) printf("%d",_array[i][j]);
else if(_array[i][j]==1)
{
if(k==i && l==j)
{
printf("1");
}
else printf(" ");
}
l++;
if(l>num_chars) break;
}
k++;
l=0;
printf("\n");
}
k=0;
system("cls");
}
return 0;
}
我写了类似的东西,但我仍然不知道如何在适当的时候清除屏幕。函数文件()从文件读取到2D数组。
答案 0 :(得分:0)
假设你想要那样的东西
000000
0 0
0000 0
0 1 0
0 0000
000000
您可以在出现时0
打印,如果没有则打印空白。要处理当前位置,您可以使用其他两个变量,例如posX
,posY
。现在,每当您在阵列中找到1
时,请检查if (j == posX && i = posY)
并打印1
,如果是这样的话......
由于您只需要在不同的位置可视化迷宫,我建议使用简单的显示功能。 DisplayMaze(int x, int y)
正以所需格式将迷宫打印到屏幕上。如果_array[y][x] == 1
还打印了一个1
...
void DisplayMaze(int x, int y)
{
for (int row = 0; row < num_rows; row++)
{
for (int col = 0; col < num_chars; col++)
{
if (_array[row][col] == 0)
std::cout << "0 ";
else if (row == y && col == x)
std::cout << "1 ";
else
std::cout << " ";
}
std::cout << std::endl;
}
std::cout << std::endl;
}
为了显示所有可能的位置,你必须迭代它们并检查数组中当前位置是否标有1
(否则显示没有意义)
for (int y = 0; y < num_rows; y++)
{
for (int x = 0; x < num_chars; x++)
{
if (_array[y][x] == 1)
{
DisplayMaze(x, y);
}
}
}
输出应如下所示:
0 0 0 0 0 0
0 1 0
0 0 0 0 0
0 0
0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 1 0
0 0 0 0 0
0 0
0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 1 0
0 0 0 0 0
0 0
0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 1 0
0 0 0 0 0
0 0
0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0
0 0 0 0 1 0
0 0
0 0 0 0 0
0 0 0 0 0 0
...
但是,我建议使用更像C ++的方法,因为迷宫可以作为一个类实现。这个类可以带来它自己的display-method,并封装内部数据。它基本上可以是:
class Maze
{
public:
// generate empty maze with given size
Maze(int width, int height);
// destructor
~Maze();
// print maze if the given position is marked with 1
void printPosition(int x, int y) const;
// takes a cstring as input to initialize the maze from
Maze& operator<<(const char* input);
// returns true if the given position is marked with 1
bool isValidPosition(int x, int y) const;
private:
// this is the actual representation of the maze
std::vector<std::vector<int> > grid_;
};
它将被用作以下内容:
Maze myMaze(num_chars, num_rows);
myMaze << "000000"
"011110"
"000010"
"011110"
"010000"
"000000";
for (int y = 0; y < num_rows; y++)
{
for (int x = 0; x < num_chars; x++)
{
if (myMaze.isValidPosition(x,y))
{
myMaze.printPosition(x,y);
}
}
}
答案 1 :(得分:0)
雇用你* [已解决] *
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int x,y;
cin>>x>>y;
char map[x][y];
memset(map, 'a', sizeof(map));
int y_pos = 0;
for (int x_pos = 0; x_pos < x * y; x_pos++){
if (x_pos == x){
x_pos = 0;
y_pos = y_pos + 1;
cout<<endl;
}
if (y_pos == y){
system("pause");
return 0;
}
cout<<map[x_pos][y_pos];
}