因此,我的大学作业,我们应该做一个简单的游戏2D map
与实体等,所以我想出了一种方法打印Map,通过它的尺寸和文本格式,但在我们的教训,它没有提到我们如何打印终端的特定部分。我已经检查了相同的问题,但似乎不能得到一个解决方案。
这是我用来打印Map和制作它的数组的代码。BLUE_B,STANDARD_B,OUTLINE and GREEN_B
是为了丰富色彩而声明的。另外,如果可能的话,我不想使用操作系统特定的命令,除非它是完全必要的。我使用Windows的VS代码,用g++编译WSL Ubuntu-20.04。
for (int row = 0; row < i; row++) {
cout << OUTLINE "##";
for (int column = 0; column < j; column++) {
int n = rand() % 10; // According to "rand()"'s value we print either green, blue, or trees
if (n >= 3) { // We've assigned more values to green, in order to be more possible to be printed
cout << GREEN_B " "
STANDARD_B;
map[row][column] = 1;
} else if (n == 0 || n == 1) {
cout << BLUE_B " "
STANDARD_B;
map[row][column] = 0;
} else if (n == 2) {
int tree = rand() % 2;
cout << TREES "<>"
STANDARD_B;
map[row][column] = 0;
}
}
cout << OUTLINE "##"
STANDARD_B << endl;
}
for (i = 0; i < j + 2; i++) { // Bottom map border printing
cout << OUTLINE "##"
STANDARD_B;
}
2条答案
按热度按时间34gzjxbg1#
如果我没理解错的话,你可能在寻找iomanip。这只是一种方法。你可以使用setw和setfill在不同的区域放置不同的文本。你可以为不同的输出设置不同的选项。
pvabu6sv2#
要将文本光标移动到特定的行和列,您需要一个“gotoxy”样式的函数。
以下是在Linux终端和Windows终端上都可以使用的功能。(如果没有额外的初始化帮助,它不能 * 在Windows控制台**上使用。)
终端UL角的坐标为(0,0)。下面是一个使用示例:
为了你的游戏
我建议你把光标移到HOME(0,0),然后在每一帧中画出你的游戏板的“改变”部分。
我想,如果你在本地电脑上,你的游戏板相对简单,你 * 可以 * 可能逃脱一个完整的重绘每一帧...
你确定没有教授提供的宏或命令来移动光标吗?(...因为他提供了魔术宏来改变输出颜色)?