显示" int **数组"在C中使用ncurses

时间:2016-03-20 12:01:08

标签: c arrays int ncurses

如何在my.h中显示int **array而不是我的定义中使用的空格?我使用ncurses作为接口,并显示它而不是将字符串放在.c文件中,我创建了一个.h并为接口定义了所有字符串。有人可以解释一下如何做到这一点吗?

基本上,在我的.C文件中,我只是做了#34; mvprintw(...,MAP_1)" 但是从MAP_2到MAP_21,我想用int **数组替换空格

这是my.h:

#ifndef MY_H_
# define MY_H_

# define HEADER_1 "      ______________________  _________\n"
# define HEADER_2 "     /_  __/ ____/_  __/ __ \\/  _/ ___/\n"
# define HEADER_3 "      / / / __/   / / / /_/ // / \\__ \\ \n"
# define HEADER_4 "     / / / /___  / / / _, _// / ___/ / \n"
# define HEADER_5 "    /_/ /_____/ /_/ /_/ |_/___//____/  \n"

# define MAP_1 "௦----------௦\n"
# define MAP_2 "|          |\n"
# define MAP_3 "|          |\n"
# define MAP_4 "|          |\n"
# define MAP_5 "|          |\n"
# define MAP_6 "|          |\n"
# define MAP_7 "|          |\n"
# define MAP_8 "|          |\n"
# define MAP_9 "|          |\n"
# define MAP_10 "|          |\n"
# define MAP_11 "|          |\n"
# define MAP_12 "|          |\n"
# define MAP_13 "|          |\n"
# define MAP_14 "|          |\n"
# define MAP_15 "|          |\n"
# define MAP_16 "|          |\n"
# define MAP_17 "|          |\n"
# define MAP_18 "|          |\n"
# define MAP_19 "|          |\n"
# define MAP_20 "|          |\n"
# define MAP_21 "|          |\n"
# define MAP_22 "௦----------௦\n"

#endif /* !MY_H_ */

谢谢!

3 个答案:

答案 0 :(得分:0)

使用ncurses显示字符串。字符串是char的数组(或者可能是指针中的堆分配区域),它是零字节终止的。

因此将(strcpystrncpy)一些字符串(如MAP_13)复制到某个字符串缓冲区(可能是char linebuf [128];)中,并适当填充该缓冲区。有一些常规将俄罗斯方块线(一些array[i])转换为字符串。

我建议(为了便于调试,并确保零字节终止)在复制之前清除缓冲区(例如,使用memset(linebuf, 0, sizeof(linebuf)); ....)。

顺便说一句,对于俄罗斯方块游戏,我不会使用int - s的矩阵,而是使用unsigned char或某些enum的矩阵,或直接使用 displayable char - s

答案 1 :(得分:0)

您可以像这样定义一个char数组数组:

// each of the N elements of array can hold strings up to 19 characters
char array[][20] = {
    "one",
    "two",
    "...",
    "forty two"
};

答案 2 :(得分:0)

需要考虑多个方面:

如果OP想要在每一行上打印给定数量的空格, int* 数组会很有用,例如,

int myarray[] = { 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 };

for (n = 1; n <= 22; ++n)
     printw("%*s\n", myarray[n], " ");

int** 数组类似(但未提供数据声明...),例如

for (n = 1; n <= 22; ++n)
     printw("%*s\n", *myindirect[n], " ");

也可能有用。