我正在尝试制作一个程序来打印出一个网格,并给定 x 和 y 坐标改变网格中的一个值。例如,如果用户输入 X:0 和 Y:0,它会将下图中的值“9”更改为预定义的值(在这种情况下,我想将值 9 更改为 0)。
我的问题是,是否可以更新控制台的输出,以便“0”覆盖“9”而无需再次打印出整个网格。我希望能够多次这样做。
如果这是不可能的,我怎样才能按照我实现这个的方式打印出更新的网格?如果我要将显示网格 for 循环 放在一个单独的函数中,我需要将 2d 数组作为参数调用,我确信你不能这样做。
这是我所拥有的:
void generateGrid(int diff){
srand(time(NULL));
int arr[maximum][maximum];
for (int i=0;i<diff;i++)
{
for (int j=0;j<diff;j++)
{
arr[i][j] = rand() % 9 + 1;
}
}
cout<<"\n\tPuzzle\n\t";
for(int i=0;i<diff;i++)
{
cout<<i<<" ";
}
cout<<"\n\n";
for(int i=0;i<diff;i++)
{
cout<<i<<"\t";
for(int j=0;j<diff;j++)
{
cout<<arr[i][j]<<" ";
}
cout<<"\n";
}
int x, y;
cout<<"\nEnter x value: ";
cin>>x;
cout<<"Enter y value: ";
cin>>y;
arr[x][y] = 0;
}
Diff 是指拼图大小(难度)
别处:
int easy = 5;
int medium = 8;
int hard = 10;
int maximum = 10;
原文由 GordanAndrews 发布,翻译遵循 CC BY-SA 4.0 许可协议
标准 C++ 不支持在控制台中的位置设置单个字符而不重新打印。这是特定于操作系统的,并且有一些评论可以解决这个问题。
否则,正确的解决方案是将您的游戏板逻辑封装到一个类中。我们可以使用嵌套的
std::vector
来处理动态大小的板,并提供获取和设置单元格的功能。一个单独的Print
函数允许我们根据需要将板打印到控制台。现在你可以像这样写你的
main
:现场演示