我目前正在使用C语言进行基于文本的游戏,当某些事件发生时,我遇到了改变值的问题。以下是我的一些数据结构代码:
typedef struct player {
int maxhealth;
int curhealth;
int in_combat;
monster c_enemy;
char *class;
char *condition;
rooms c_room;
inventory i;
stats stats;
} player;
现在,我认为我的问题是我目前将c_room(当前房间)作为房间,而不是指向房间的指针。这会影响我以后因为我需要改变当前房间的struct room中的n_monsters之类的东西。但是,当我通过执行p.c_rooms.n_monsters - = 1修改它时;我不确定它会改变我应该指的房间的n_monsters的实际价值。我已经通过在n_monsters为0时离开房间测试了这个,然后回来看它回到1,默认值。
所以,我怎么指向正确的房间? 只是:
typedef struct player {
int maxhealth;
int curhealth;
int in_combat;
monster c_enemy;
char *class;
char *condition;
rooms *c_room; // Like this?
inventory i;
stats stats;
} player;
// And then the assignment would look like:
c_room = *rooms[3]; <- an array of rooms for the dungeon in the game.
答案 0 :(得分:1)
假设c_room
是一个普通的结构而不是指针,那么你是对的。
如果你有
struct A {
int v;
};
struct B {
struct A a;
}
A a;
a.v = 3;
B b;
b.a = a;
这实际上会复制a
内B.a
的内容,因为它们是按值分配的。它们将是两个不同的A
,对其中一个的任何修改都不会反映在另一个上。
在你的情况下,我会做类似的事情:
struct Room {
// whatever
}
struct Room rooms[MAX_ROOMS];
struct Player {
struct Room *room;
}
Player p;
p.room = &rooms[index];
现在,您可以通过p->room
正确引用房间,它只是指向实际房间的指针。