Commit a2eea9f4bf1611283cfdb5bf5d31f6ea437fe07d
1 parent
92db0f083c
Exists in
master
and in
1 other branch
Refactored some of the code in the client and added a few comments.
Also, removed the code to accept players if the player count ever goes below the minimum -- if we ever are to accept additional players after the game has started, it should probably be up to the maximum number of players. Or infinity, since we have linked lists stored in the heap, but checking calloc for errors? :p
Showing 5 changed files with 182 additions and 151 deletions Side-by-side Diff
client/entities/entities.h
View file @
a2eea9f
... | ... | @@ -32,10 +32,46 @@ |
32 | 32 | |
33 | 33 | void local_player_update(TCPsocket sock, PLAYER *, PLAYER *, const Uint8 *); |
34 | 34 | |
35 | +/* | |
36 | + * Move the player `p' TO a specified x, y location (assigns, doesn't | |
37 | + * translate). | |
38 | + */ | |
35 | 39 | void movePlayer(PLAYER *p, short newx, short newy); |
36 | 40 | |
41 | +/* | |
42 | + * Reset the maze cell that the player is on... | |
43 | + */ | |
37 | 44 | void clearPlayer(PLAYER *); |
38 | 45 | |
46 | +/* | |
47 | + * Return the player with pnode `pnum' from the player linked list | |
48 | + * starting with `node'. | |
49 | + */ | |
50 | +PLAYER *choose_player(PLAYER *node, unsigned char pnum); | |
51 | + | |
52 | +/* | |
53 | + * Free the player `temp' after linking the two players next to `temp' | |
54 | + * together. Also erases it from the screen. | |
55 | + */ | |
56 | +void removep(PLAYER *temp); | |
57 | + | |
58 | +/* | |
59 | + * On the linked list starting with `node', find the player with pnode | |
60 | + * `hpno', and set it to be of hunter type. | |
61 | + */ | |
62 | +void choose_hunter(PLAYER *node, unsigned char hpno); | |
63 | + | |
64 | +/* | |
65 | + * Add an initialized player "object" to the player linked list containing | |
66 | + * `node'. | |
67 | + */ | |
68 | +void add_player(PLAYER *node, PLAYER *newp); | |
69 | + | |
70 | +/* | |
71 | + * Keep receiving players from the server until it's done and it chooses a | |
72 | + * hunter, adding them to the player linked list containing `node'. | |
73 | + */ | |
74 | +unsigned char addp(PLAYER *node, TCPsocket srv_sock); | |
39 | 75 | |
40 | 76 | /* |
41 | 77 | * GLOBALS |
client/entities/player.c
View file @
a2eea9f
... | ... | @@ -121,6 +121,10 @@ |
121 | 121 | drawPlayer(me); |
122 | 122 | } |
123 | 123 | |
124 | +/* | |
125 | + * Move the player `p' TO a specified x, y location (assigns, doesn't | |
126 | + * translate). | |
127 | + */ | |
124 | 128 | void |
125 | 129 | movePlayer(PLAYER *p, short newx, short newy) |
126 | 130 | { |
... | ... | @@ -159,5 +163,139 @@ |
159 | 163 | SDL_RenderCopy(renderer, |
160 | 164 | black.texture, |
161 | 165 | NULL, &player->sprite->rect); |
166 | +} | |
167 | + | |
168 | +/* | |
169 | + * Return the player with pnode `pnum' from the player linked list | |
170 | + * starting with `node'. | |
171 | + */ | |
172 | +PLAYER * | |
173 | +choose_player(PLAYER *node, unsigned char pnum) | |
174 | +{ | |
175 | + PLAYER *temp; | |
176 | + for (temp = node->next; temp != NULL; temp = temp->next) | |
177 | + { | |
178 | + printf("temp->playerno = %d, pnum = %d\n", temp->playerno, pnum); | |
179 | + if (temp->playerno == pnum) | |
180 | + { | |
181 | + break; | |
182 | + } | |
183 | + } | |
184 | + return temp; | |
185 | +} | |
186 | + | |
187 | +/* | |
188 | + * Free the player `temp' after linking the two players next to `temp' | |
189 | + * together. Also erases it from the screen. | |
190 | + */ | |
191 | +//potential bug: hunter eats someone, then someone disconnects. they both | |
192 | +//have the same location, so they both disappear? | |
193 | +void | |
194 | +removep(PLAYER *temp) | |
195 | +{ | |
196 | + if (temp == NULL) | |
197 | + { | |
198 | + printf("Can't remove NULL player!!\n"); | |
199 | + return; | |
200 | + } | |
201 | + if (temp->prev == NULL) | |
202 | + { | |
203 | + if (temp->next != NULL) | |
204 | + { | |
205 | + temp->next->prev = NULL; | |
206 | + } | |
207 | + } | |
208 | + else | |
209 | + { | |
210 | + if (temp->next == NULL) | |
211 | + { | |
212 | + temp->prev->next = NULL; | |
213 | + } | |
214 | + else | |
215 | + { | |
216 | + temp->prev->next = temp->next; | |
217 | + temp->next->prev = temp->prev; | |
218 | + } | |
219 | + } | |
220 | + clearPlayer(temp); | |
221 | + free(temp); | |
222 | +} | |
223 | + | |
224 | +/* | |
225 | + * Blindly iterate through the player linked list starting from `node' to | |
226 | + * find the player with pnode `hpno', and set it to be of hunter type. | |
227 | + */ | |
228 | +void | |
229 | +choose_hunter(PLAYER *node, unsigned char hpno) | |
230 | +{ | |
231 | + PLAYER *temp; | |
232 | + | |
233 | + for (temp = node; temp != NULL; temp = temp->next) | |
234 | + { | |
235 | + if (temp->playerno == hpno) | |
236 | + { | |
237 | + temp->type = 1; | |
238 | + temp->sprite = &hsprite; | |
239 | + return; | |
240 | + } | |
241 | + } | |
242 | +} | |
243 | + | |
244 | +/* | |
245 | + * Add an initialized player "object" to the player linked list containing | |
246 | + * `node'. | |
247 | + */ | |
248 | +void | |
249 | +add_player(PLAYER *node, PLAYER *newp) | |
250 | +{ | |
251 | + PLAYER *temp; | |
252 | + | |
253 | + for (temp = node; temp->next != NULL; temp = temp->next) | |
254 | + { | |
255 | + printf("cycle: temp->next->playerno: %d\n",temp->next->playerno); | |
256 | + } | |
257 | + | |
258 | + for (temp = node; temp->next != NULL; temp = temp->next); | |
259 | + | |
260 | + temp->next = newp; | |
261 | + newp->prev = temp; | |
262 | + newp->next = NULL; | |
263 | +} | |
264 | + | |
265 | +/* | |
266 | + * Keep receiving players from the server until it's done and it chooses a | |
267 | + * hunter, adding them to the player linked list containing `node'. | |
268 | + */ | |
269 | +unsigned char | |
270 | +addp(PLAYER *node, TCPsocket srv_sock) | |
271 | +{ | |
272 | + Uint16 magic; | |
273 | + PLAYER *cur_player = NULL; | |
274 | + | |
275 | + do | |
276 | + { | |
277 | + cur_player = calloc(1, sizeof(PLAYER)); | |
278 | + init_player(srv_sock, cur_player); | |
279 | + add_player(node, cur_player); | |
280 | + | |
281 | + printf("Player %s (%d) connected, at (%d, %d)\n", cur_player->name, | |
282 | + cur_player->playerno, cur_player->x, cur_player->y); | |
283 | + | |
284 | + } while ((magic = getshort(srv_sock)) == ADD_PLAYER); | |
285 | + | |
286 | + printf("players added\n"); | |
287 | + | |
288 | + if (magic == HUNTER) | |
289 | + { | |
290 | + unsigned char hunter; | |
291 | + | |
292 | + SDLNet_TCP_Recv(srv_sock, &hunter, 1); | |
293 | + return hunter; | |
294 | + } | |
295 | + else | |
296 | + { | |
297 | + fprintf(stderr, "Bad magic number %X from server\n", magic); | |
298 | + exit(EXIT_FAILURE); | |
299 | + } | |
162 | 300 | } |
client/main.c
View file @
a2eea9f
... | ... | @@ -14,120 +14,6 @@ |
14 | 14 | #include "mot.h" |
15 | 15 | #include "net.h" |
16 | 16 | |
17 | - | |
18 | -PLAYER* | |
19 | -choose_player(PLAYER* node, unsigned char pnum) | |
20 | -{ | |
21 | - PLAYER *temp; | |
22 | - for(temp = node->next; temp != NULL; temp = temp->next) | |
23 | - { | |
24 | - printf("temp->playerno = %d, pnum = %d\n",temp->playerno,pnum); | |
25 | - if(temp->playerno == pnum) | |
26 | - { | |
27 | - break; | |
28 | - } | |
29 | - } | |
30 | - return temp; | |
31 | -} | |
32 | - | |
33 | -void | |
34 | -removep(PLAYER* temp) | |
35 | -{ | |
36 | - if(temp == NULL) | |
37 | - { | |
38 | - printf("Can't remove NULL player!!\n"); | |
39 | - return; | |
40 | - } | |
41 | - if (temp->prev == NULL) | |
42 | - { | |
43 | - if (temp->next != NULL) | |
44 | - { | |
45 | - temp->next->prev = NULL; | |
46 | - } | |
47 | - } | |
48 | - else | |
49 | - { | |
50 | - if (temp->next == NULL) | |
51 | - { | |
52 | - temp->prev->next = NULL; | |
53 | - } | |
54 | - else | |
55 | - { | |
56 | - temp->prev->next = temp->next; | |
57 | - temp->next->prev = temp->prev; | |
58 | - } | |
59 | - } | |
60 | - clearPlayer(temp); | |
61 | - free(temp); | |
62 | -} | |
63 | - | |
64 | -void | |
65 | -choose_hunter(PLAYER *node, unsigned char hpno) | |
66 | -{ | |
67 | - PLAYER *temp; | |
68 | - | |
69 | - for (temp = node; temp != NULL; temp = temp->next) | |
70 | - { | |
71 | - if (temp->playerno == hpno) | |
72 | - { | |
73 | - temp->type = 1; | |
74 | - temp->sprite = &hsprite; | |
75 | - return; | |
76 | - } | |
77 | - } | |
78 | -} | |
79 | - | |
80 | - | |
81 | -void | |
82 | -add_player(PLAYER *node, PLAYER *newp) | |
83 | -{ | |
84 | - PLAYER *temp; | |
85 | - for(temp = node; temp->next != NULL; temp = temp->next) | |
86 | - { | |
87 | - printf("cycle: temp->next->playerno: %d\n",temp->next->playerno); | |
88 | - } | |
89 | - for (temp = node; temp->next != NULL; temp = temp->next); | |
90 | - | |
91 | - temp->next = newp; | |
92 | - newp->prev = temp; | |
93 | - newp->next = NULL; | |
94 | -} | |
95 | - | |
96 | -unsigned char | |
97 | -addp(PLAYER *node,TCPsocket srv_sock) | |
98 | -{ | |
99 | - Uint16 magic; | |
100 | - PLAYER *cur_player = NULL; | |
101 | - do | |
102 | - { | |
103 | - cur_player = calloc(1,sizeof(PLAYER)); | |
104 | - init_player(srv_sock,cur_player); | |
105 | - add_player(node,cur_player); | |
106 | - | |
107 | - printf("Player %s (%d) connected, at (%d, %d)\n", cur_player->name, | |
108 | - cur_player->playerno, cur_player->x, cur_player->y); | |
109 | - | |
110 | - } while ((magic = getshort(srv_sock)) == ADD_PLAYER); | |
111 | - | |
112 | - printf("players added\n"); | |
113 | - | |
114 | - if (magic == HUNTER) | |
115 | - { | |
116 | - unsigned char hunter; | |
117 | - | |
118 | - SDLNet_TCP_Recv(srv_sock, &hunter, 1); | |
119 | - return hunter; | |
120 | - } | |
121 | - else | |
122 | - { | |
123 | - fprintf(stderr, "Bad magic number %X from server\n", magic); | |
124 | - exit(EXIT_FAILURE); | |
125 | - } | |
126 | - | |
127 | - | |
128 | -} | |
129 | - | |
130 | - | |
131 | 17 | int |
132 | 18 | main(int argc, char *argv[]) |
133 | 19 | { |
server/server.c
View file @
a2eea9f
... | ... | @@ -12,13 +12,6 @@ |
12 | 12 | #include "../common/mot_maze.h" |
13 | 13 | #include "server.h" |
14 | 14 | |
15 | - | |
16 | -void begin_game(Player_set *pset); | |
17 | - | |
18 | -int sendMov(int psock, short int movepno, int x, int y); | |
19 | - | |
20 | -void broadcast_disconnect(Player_set *pset, int fd); | |
21 | - | |
22 | 15 | void * |
23 | 16 | get_in_addr(struct sockaddr *sa) |
24 | 17 | { |
... | ... | @@ -300,13 +293,6 @@ |
300 | 293 | { |
301 | 294 | printf("server: socket %d hung up\n", i); |
302 | 295 | broadcast_disconnect(pset, i); |
303 | - if(--players_connected < min_players) | |
304 | - { | |
305 | - printf("too few players, accepting more players now\n"); | |
306 | - | |
307 | - /* DON'T HALT THE GAME, THOUGH */ | |
308 | - game_started = 0; | |
309 | - } | |
310 | 296 | } |
311 | 297 | else |
312 | 298 | { |
... | ... | @@ -479,6 +465,8 @@ |
479 | 465 | } |
480 | 466 | return 0; |
481 | 467 | } |
468 | + | |
469 | + | |
482 | 470 | void |
483 | 471 | begin_game(Player_set *pset) |
484 | 472 | { |
... | ... | @@ -503,6 +491,7 @@ |
503 | 491 | sendall(cur->fd, (char *) &magic, sizeof(magic)); |
504 | 492 | sendall(cur->fd, info->name, PNAMELEN); |
505 | 493 | } |
494 | + | |
506 | 495 | // hunter |
507 | 496 | magic = htons(HUNTER); |
508 | 497 | sendall(cur->fd, (char *) &magic, sizeof(magic)); |
... | ... | @@ -512,29 +501,6 @@ |
512 | 501 | printf("out of begin_game()!!\n"); |
513 | 502 | } |
514 | 503 | |
515 | - | |
516 | -/* add a bunch | |
517 | - * player no | |
518 | - magic = htons(ADD_PLAYER); | |
519 | - sendall(newfd, (char *) &magic, sizeof(magic)); | |
520 | - sendall(newfd, (char *) &pnum, sizeof(pnum)); | |
521 | - x and y, there can be collisions but who cares?????? | |
522 | - magic = htons(mrand(0, 19) * 2); | |
523 | - sendall(newfd, (char *) &magic, sizeof(magic)); | |
524 | - | |
525 | - magic = htons(mrand(0, 19) * 2); | |
526 | - sendall(newfd, (char *) &magic, sizeof(magic)); | |
527 | - | |
528 | - sendall(newfd, pname, 32); | |
529 | - } | |
530 | - | |
531 | - // random hunter | |
532 | - magic = htons(HUNTER); | |
533 | - sendall(newfd, (char *) &magic, sizeof(magic)); | |
534 | - | |
535 | - pnum = mrand(0, 11); | |
536 | - sendall(newfd, (char *) &pnum, sizeof(pnum)); | |
537 | -*/ | |
538 | 504 | |
539 | 505 | int |
540 | 506 | sendMov(int psock, short int movepno, int x, int y) |
server/server.h
View file @
a2eea9f
... | ... | @@ -47,6 +47,11 @@ |
47 | 47 | int last_pno; |
48 | 48 | }; |
49 | 49 | |
50 | +void begin_game(Player_set *pset); | |
51 | +int sendMov(int psock, short int movepno, int x, int y); | |
52 | +void broadcast_disconnect(Player_set *pset, int fd); | |
53 | + | |
54 | + | |
50 | 55 | Player_set *init_pset(); |
51 | 56 | void free_pset(Player_set *p); |
52 | 57 | void add_player(Player_set *set); |