Commit a2eea9f4bf1611283cfdb5bf5d31f6ea437fe07d

Authored by Pedro L Coutin
1 parent 92db0f083c
Exists in master and in 1 other branch rohan

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);