game.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. /*
  2. * File: game.h
  3. * Author: Arthur Brandao
  4. *
  5. * Created on 28 novembre 2018
  6. */
  7. #ifndef GAME_H
  8. #define GAME_H
  9. /* --- Include --- */
  10. #include <pthread.h>
  11. #include "constante.h"
  12. #include "player.h"
  13. #include "json.h"
  14. #include "object.h"
  15. /* --- Constante --- */
  16. #define WIDTH 0
  17. #define HEIGHT 1
  18. /* --- Struct --- */
  19. typedef struct{
  20. boolean active;
  21. int index;
  22. char* name; //Nom
  23. int nbPlayer; //Nombre de joueur
  24. char* mapName; //Nom de la map
  25. char* mapContent; //La map en string
  26. int width; //Largeur de la map
  27. int height; //Hauteur de la map
  28. char** map; //Map
  29. Player* player[MAXPLAYER]; //Les joueurs actuels
  30. Object* object; //Les objets sur la map
  31. }Game;
  32. /* --- Extern --- */
  33. extern Game game[MAXGAME];
  34. extern int nbGame;
  35. extern pthread_mutex_t gameMutex[MAXGAME];
  36. extern pthread_mutex_t playerMutex[MAXGAME * MAXPLAYER];
  37. /* --- Fonctions --- */
  38. /**
  39. * Initialise les structures des parties
  40. */
  41. boolean ini_games();
  42. /**
  43. * Liste le nom de toutes les maps sous forme de JSON
  44. * @param JsonArray* Structure de reponse pour les maps existantes
  45. */
  46. void list_map(JsonArray*);
  47. /**
  48. * Liste les game en cours en JSON
  49. * @param JsonArray* Structure de reponse pour les games existantes
  50. * @return int Le nombre de game active
  51. */
  52. int list_game(JsonArray*);
  53. /**
  54. * Donne les dimension d'une carte
  55. * @param char* La carte
  56. * @return int* Tableau de resultat
  57. */
  58. int* map_size(char*);
  59. /**
  60. * Création d'une game
  61. * @param char* Nom de la game
  62. * @param char* Nom de la map
  63. * @return L'index de la game dans le tableau ou ERR
  64. */
  65. int create_game(char*, char*);
  66. /**
  67. * Ajoute un joueur
  68. * @param Game* La game dans laquelle ajouter le joueur
  69. * @param int Id du client lié au joueur
  70. * @return L'index du joueur dans la game ou ERR
  71. */
  72. int add_player(Game*, int);
  73. /**
  74. * Decris une game en JSON
  75. * @param Game* La game à décrire
  76. * @param int Index du joueur à décrire en plus de la game (-1 pour rien)
  77. * @param JsonEncoder* Le json pour mettre la description
  78. */
  79. void describe_game(Game*, int, JsonEncoder*);
  80. /**
  81. * Notification des joueurs d'une partie
  82. * @param Game* La partie des joueurs
  83. * @param char* Action (POST ou GET)
  84. * @param char* La ressource
  85. * @param JsonEncoder* Les paramètres JSON à envoyer
  86. * @param int L'id d'un joueur à ne pas notifier
  87. * @return
  88. */
  89. boolean notify_player(Game*, char*, char*, JsonEncoder*, int);
  90. /**
  91. * Indique si il y a un collision avec un joueur
  92. * @param Game* La partie dans laquelle vérifier
  93. * @param int X
  94. * @param int Y
  95. * @return Collision ou non
  96. */
  97. boolean player_collision(Game*, int, int);
  98. /**
  99. * Indique si il y a un collision avec un joueur et retourne l'index
  100. * @param Game* La partie dans laquelle vérifier
  101. * @param int X
  102. * @param int Y
  103. * @param int* L'index du joueur avec laquelle la collision à lieu
  104. * @return Collision ou non
  105. */
  106. boolean player_collision_index(Game*, int, int, int*);
  107. /**
  108. * Explose un bombe
  109. * @param Game* La game de la bombe
  110. * @param int L'index du joueur à qui appartient la bombe
  111. * @param int X de la bombe
  112. * @param int Y de la bombe
  113. * @param JsonEncoder* Les infos de l'explosion
  114. * @return Reussite
  115. */
  116. boolean bomb_explode(Game*, int, int, int, JsonEncoder*);
  117. /**
  118. * Explosion des bombes en chaine
  119. * @param Game* La game de la bombe
  120. * @param int L'index du joueur à qui appartient la bombe
  121. * @param int X de la bombe
  122. * @param int Y de la bombe
  123. * @param JsonArray* Les infos de l'explosion
  124. * @param JsonArray* Toutes les cases touchées par l'explosion
  125. */
  126. void bomb_chain(Game*, int, int, int, JsonArray*, JsonArray*);
  127. /**
  128. * Determine le spawn des objets (bonus/malus/bombe)
  129. * @param Game* La game où faire spawn l'objet
  130. * @param int X
  131. * @param int Y
  132. * @param JsonEncoder* Json por recueillir les infos de l'objet ajouté
  133. * @return 0 Pas d'objet, 1 Bombe, 2 Bonus/Malus
  134. */
  135. int spawn_object(Game*, int, int, JsonEncoder*);
  136. /**
  137. * Supprime un joueur d'une partie
  138. * @param Game* La partie
  139. * @param int L'index du joueur dans la partie
  140. */
  141. void remove_player(Game*, int);
  142. /**
  143. * Stop une partie
  144. * @param Game* La partie
  145. */
  146. void stop_game(Game*);
  147. /**
  148. * Stop toutes les parties
  149. */
  150. void clean_games();
  151. #endif /* GAME_H */