-
Notifications
You must be signed in to change notification settings - Fork 0
/
characters.c
71 lines (58 loc) · 1.84 KB
/
characters.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "characters.h"
// Character constructor
struct Character* character(char* name, struct Item* item){
struct Character *pointerChar;
pointerChar = (struct Character *) malloc(sizeof(struct Character));
pointerChar->name = name;
pointerChar->inventory = item;
return pointerChar;
}
// Function to move character to a room upon clue command
void move_character(struct Character* roomFrom, struct Character* c, struct Character* roomTo){
removeCharacter(roomFrom,c);
addCharacter(roomTo, c);
}
// Function to set room character is in
void setCharRoom(struct Character* c, struct Room* room){
c->currentRoom = room;
}
// Function to get room character is in
struct Room* getCharRoom(struct Character* c){
return c->currentRoom;
}
// Function to get character name
char* getCharName(struct Character* c){
return c->name;
}
// Function to get character's inventory (only for avatar)
struct Item* inventory(struct Character* c){
return c->inventory;
}
// Function to get next character
struct Character* getNextChar(struct Character* c){
return c->nextChar;
}
// Function to remove character from room
void removeCharacter(struct Character* roomCharList, struct Character* c){
// Store head node
struct Character* prev = roomCharList;
struct Character* temp = roomCharList->nextChar;
// Search for the character to be deleted, keep track of the
// previous node to change 'prev->next'
while (temp != NULL && (temp->name != c->name))
{
prev = temp;
temp = temp->nextChar;
}
// Unlink the node from linked list
prev->nextChar = temp->nextChar;
temp->nextChar = NULL;
}
// Function to add character to room
void addCharacter(struct Character* roomCharList, struct Character* c){
if(roomCharList->nextChar == NULL){
roomCharList->nextChar = c;
} else {
addCharacter(roomCharList->nextChar,c);
}
}