您好,我正在用c构建一个简单的游戏(这是该语言的新功能)。我使用以下结构:
typedef struct
{
int adjacent_mines;
bool revealed;
bool is_mine;
} Tile;
struct GameState
{
Tile tiles[NUM_TILES_X][NUM_TILES_Y];
};
typedef struct GameState GameState;
我想知道如何正确调用和设置结构吗?我有以下代码,我想在其中设置每个图块的状态。
void intialize_mines(){
for (int i =0; i < NUM_TILES_X; i++){
for (int j =0; j < NUM_TILES_Y; j++){
tiles[i,j].revealed = false;
}
}
}
但是根据我的控制台输出,我做错了。我将如何正确设置此设置?
答案 0 :(得分:3)
struct GameState
只声明一个类型(就像int
只是一个类型一样)。您必须使用类似于普通变量(GameState foo;
)的int foo;
在内存中创建真实的结构。而且,如果不引用foo.tiles
之类的结构,就无法访问结构的内容。在此范围内,tiles
本身是未知的。
之后,您可以使用foo.tiles[i][j].revealed
访问该结构。
但是要在您的函数中访问此结构,您必须将其作为指针传递给函数,或者在文件范围(也称为全局)中声明该结构。我希望第一个版本的功能更清晰。
您的函数将如下所示:
void intialize_mines( GameState *foo){
for (int i =0; i < NUM_TILES_X; i++){
for (int j =0; j < NUM_TILES_Y; j++){
foo->tiles[i][j].revealed = false; // -> is a special operator for pointers to structs. It's the same as (*foo).
}
}
}
相应的函数调用为:
GameSate bar;
intialize_mines( GameState &bar);
您还应该检查如何使用多维数组。您使用两个单独的[]
正确地声明了它,但是在函数中使用了[x,y]
,这在C语言中是不正确的。它与声明tiles[i][j]
答案 1 :(得分:1)
对于像tiles
这样的多维数组,您必须像这样在[]
中指定每个维度的数组下标:
tiles[i][j].revealed = false;
这意味着将属于revealed
第j
行第i
行第tiles
的{{1}}设置为false
。
在执行任何操作之前,您必须定义类型GameState
的结构变量。
GameState initGS;
void intialize_mines(){
for (int i =0; i < NUM_TILES_X; i++){
for (int j =0; j < NUM_TILES_Y; j++){
initGS.tiles[i][j].revealed = false;
}
}
}
答案 2 :(得分:0)
您只是想实例化GameState结构。
COALESCE(b.ContactId,a.ContactId) AS ContactId,
COALESCE(b.LastActivityDate,a.LastActivityDate) AS LastActivityDate,
COALESCE(b.ActivityType,a.ActivityType,) AS ActivityType,
COALESCE(b.ActionPersonName,a.ActionPersonName) AS ActionPersonName