I am currently working on a text based game in C and I’m having a problem altering values when certain events happen. Here is some of my data structure code:
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;
Now, I think my problem is that I currently have c_room (Current Room) as a rooms, instead of a pointer to a rooms. This affects me later because I need to alter things like n_monsters within the struct rooms for the current room. However, when I modify it by doing p.c_rooms.n_monsters -= 1; I’m not sure it alters the actual value of n_monsters for the room that I should be referring to. I’ve tested this by leaving a room when n_monsters is 0, and then coming back to see that it’s back at 1, the default value.
So yea, how would I point to right room?
Just:
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.
Assuming that
c_roomis a plain struct and not a pointer then you are right.If you have
This will actually copy the content of
ainsideB.asince they are assigned by value. They will be two differentA, any modification to one of them won’t be reflected on the other.In your situation I would do something like:
Now you will be able to correctly reference to room by
p->room, it will be just a pointer to the actual room.