我有一个用ASCII打印的游戏板,我希望最终看起来像这样
___
3 ___/ 1 \___ ___
___/ 2 \___/ 2 \/ 3 \
2 / 1 \___/ 3 \___/\___/___
\___/ 2 \___/ / 2 \
1 / 1 \___/ 1 \___ \___/
\___/ 2 \___/ 2 \
0 \___/ \___/
1 2 3 4
地图沿x轴和y轴分布,地图的大小也是固定的。要打印的数字都存储在2d数组中。如上所示,其中一些也可能是空的。 这是我试图做的事情。 map-> sizeX和map-> sizeY给出地图的X轴和y轴的大小。如果该块中的数字为0,则表示该块不存在,我们不打印它。任何帮助将不胜感激。
void printMap(struct Map *map) {
for (int i = 0; i < map->sizeX; ++i) {
for (int k = 0; k < map->sizeX && i == 0; ++k)
printf(" ___ ");
printf("\n");
for (int j = 0; j < map->sizeY; ++j) {
if(i == 0) {
printf("/ %d \\", giveFloe(map, i, j)->numbOfFish);
}
else {
printf("/ %d \\", giveFloe(map, i, j)->numbOfFish);
}
}
printf("\n");
for (int l = 0; l < map->sizeX; ++l)
printf("\\___/");
}
printf("\n");
}
这是我得到的输出,因为我无法正确打印第一行,我没有继续。地图不超过15 x 15,所以我确信它可以打印在终端窗口上。
___ ___ ___ ___ ___ ___ ___ ___ ___ ___
/ 3 \/ 0 \/ 2 \/ 0 \/ 2 \/ 0 \/ 3 \/ 0 \/ 1 \/ 0 \
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/
/ 0 \/ 0 \/ 0 \/ 2 \/ 0 \/ 1 \/ 0 \/ 3 \/ 0 \/ 3 \
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/
/ 2 \/ 0 \/ 3 \/ 0 \/ 3 \/ 0 \/ 3 \/ 0 \/ 1 \/ 0 \
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/
/ 0 \/ 1 \/ 0 \/ 2 \/ 0 \/ 2 \/ 0 \/ 2 \/ 0 \/ 3 \
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/
/ 3 \/ 0 \/ 0 \/ 0 \/ 2 \/ 0 \/ 3 \/ 0 \/ 1 \/ 0 \
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/
/ 0 \/ 3 \/ 0 \/ 2 \/ 0 \/ 1 \/ 0 \/ 3 \/ 0 \/ 1 \
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/
/ 3 \/ 0 \/ 2 \/ 0 \/ 2 \/ 0 \/ 3 \/ 0 \/ 2 \/ 0 \
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/
/ 0 \/ 2 \/ 0 \/ 3 \/ 0 \/ 3 \/ 0 \/ 2 \/ 0 \/ 2 \
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/
/ 3 \/ 0 \/ 2 \/ 0 \/ 3 \/ 0 \/ 3 \/ 0 \/ 2 \/ 0 \
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/
/ 0 \/ 2 \/ 0 \/ 3 \/ 0 \/ 1 \/ 0 \/ 3 \/ 0 \/ 3 \
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/
这是我能得到的,假设地图不会超过终端窗口。我需要地图看起来像上面绘制的六边形。
struct Map {
struct Floe *mapPointer;
int sizeX;
int sizeY;
struct Box *changelog;
int changeCount;
int maxChanges;
struct Player *players;
int playerCount;
};
giveFloe()
接收结构图并返回该坐标上的floe
。
struct Floe {
int numbOfFish;
int whosPenguin;
};
答案 0 :(得分:1)
我认为你的第一步可能是重新思考网格是如何布局的。
首先,您应该知道每个六边形应该打印在哪一行上(请注意我的图像如何将每一行视为一行)。
第二,在同一行上有两个六边形是否合法是否合法?请参阅网格右侧的六边形3
和2
。
___
5 ___/ 1 \___ ___
4 ___/ 2 \___/ 2 \/ 3 \
3 / 1 \___/ 3 \___/\___/___
2 \___/ 2 \___/ / 2 \
1 / 1 \___/ 1 \___ \___/
0 \___/ 2 \___/ 2 \
\___/ \___/
0---1---2---3----4---5 <-- columns 4 and 5 don't fit normally