Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. require_once 'includes/dbase.inc';
  3. include 'includes/functions.inc';
  4. include 'includes/ships.inc';
  5. include "includes/head.inc";
  6. // TODO: Vraagje voor ruben -> Werken op 2 branches tegelijk? Hoe best practice?
  7. // Array om gwn de difficulty benaming te printen
  8. $difficultyStr = ["Beginner", "Easy", "Intermediate", "Hard"];
  9. $_SESSION['diffLabel'] = $difficultyStr;
  10. // Waarden voor in de database
  11. $_SESSION['statusLabel'] = ["You lost :(", "You won :)"];
  12. // Dit gaat op basis van onze difficulty de tabelrijen aanpassen
  13. $diffTableRows = [2, 3, 4, 5];
  14. // gamestates setten
  15. if (!isset($_SESSION['gameState'])) {
  16. $_SESSION['gameState'] = false;
  17. }
  18. if (!isset($_SESSION['lost'])) {
  19. $_SESSION['lost'] = false;
  20. }
  21. if (!isset($_SESSION['gameDone'])) {
  22. $_SESSION['gameDone'] = false;
  23. }
  24. if (!isset($_SESSION['tryAgain'])) {
  25. $_SESSION['tryAgain'] = false;
  26. }
  27. if (!isset($_SESSION['won'])) {
  28. $_SESSION['won'] = false;
  29. }
  30. if (isset($_POST['startGame'])) {
  31. // Session timeout setten
  32. checkSession();
  33. // Deze wordt indien iets inserted wordt in de db ge-unset. Dan doe ik de check, if isset... Dit zorgt er dan voor dat bij refresh er geen foutieve zaken geinsert wordt
  34. $_SESSION['checkRefresh'] = true;
  35. // Voor de zekerheid onze gamewaarden usnetten
  36. unset($_SESSION['curShips']);
  37. unset($_SESSION['shots']);
  38. // Dit is belangerijk om onze form weer te geven voor onze shots in te voeren
  39. $_SESSION['gameState'] = true;
  40. // Als difficulty is geset
  41. if (isset($_POST['difficulty'])) {
  42. // Session timeout setten
  43. checkSession();
  44. $_SESSION['difficulty'] = intval($_POST['difficulty']);
  45. } else {
  46. // Difficulty niet geset? Dan gebeurd er niets
  47. $_SESSION['gameState'] = false;
  48. }
  49. // Nog een extra check voor de zekerheid, deze keer op de session
  50. if (!isset($_SESSION['difficulty'])) {
  51. $_SESSION['gameState'] = false;
  52. }
  53. // Als current ships niet bestaat wordt de schepen gegenereerd
  54. if (!isset($_SESSION['curShips'])) {
  55. generateShips($_SESSION['difficulty'], $diffTableRows[$_SESSION['difficulty'] - 1]);
  56. }
  57. }
  58. // Wordt de shoot btn ingedrukt?
  59. if (isset($_POST['shoot']) && !empty($_POST)) {
  60. // Session timeout setten
  61. checkSession();
  62. // Ammo verminderen indien groter dan 0, in principe is deze if niet nodig, want als ammo 0 is komen we zelfs niet in deze iteratie
  63. if ($_SESSION['ammo'] > 0) {
  64. $_SESSION['ammo']--;
  65. }
  66. // Onze huidige shoten opslaan in een array, zodat we deze later kunnen printen in onze tabel
  67. $_SESSION['shots'][] = $_POST['usrShot'];
  68. // Check of we de duikoot raken
  69. hitOrMis($_POST['usrShot'], $_SESSION['curShips']);
  70. // controle of we alle schepen vernietigd hebben
  71. checkIfAllDestroyed($_SESSION['curShips']);
  72. }
  73. // Deze session checkRefresh is om te vermijden dat er resubmission gebeurd on page refresh. Deze wordt unset als er score geinsert wordt in de db
  74. if (isset($_SESSION['checkRefresh'])) {
  75. if ($_SESSION['ammo'] === 0) {
  76. $_SESSION['lost'] = true;
  77. }
  78. }
  79. // Is lost true en niet alle schepen destroyed? Dan is uw ammo leeg
  80. if ($_SESSION['lost'] && !checkIfAllDestroyed($_SESSION['curShips'])) {
  81. unset($_SESSION['gameEndMessage']);
  82. unset($_SESSION['lost']);
  83. $_SESSION['won'] = 0;
  84. $_SESSION['tryAgain'] = true;
  85. $_SESSION['gameState'] = true;
  86. $_SESSION['gameDone'] = false;
  87. writeScore($_SESSION['usr_id'], $_SESSION['difficulty'], $_SESSION['won'], $_SESSION['ammo']);
  88. // Deze unset ik, zodat bij een pagerefresh niet weer opniew de variabele $_SESSION['lost'] op true wordt gezet. Vervolgens is het met isset checken of ammo bestaat en dan $_SESSION['lost'] op true zetten
  89. unset($_SESSION['checkRefresh']);
  90. $_SESSION['gameEndMessage'] = "You ran out of ammo";
  91. }
  92. // Deze session checkRefresh is om te vermijden dat er resubmission gebeurd on page refresh. Deze wordt unset als er score geinsert wordt in de db
  93. if (isset($_SESSION['checkRefresh'])) {
  94. if ($_SESSION['gameDone'] && $_SESSION['ammo'] > 0) {
  95. writeScore($_SESSION['usr_id'], $_SESSION['difficulty'], $_SESSION['won'], $_SESSION['ammo']);
  96. unset($_SESSION['checkRefresh']);
  97. }
  98. }
  99. // Is het spel gedaan en druk je op try again?
  100. if (isset($_POST['tryAgain'])) {
  101. checkSession();
  102. if (isset($_POST['difficulty'])) {
  103. $_SESSION['difficulty'] = $_POST['difficulty'];
  104. }
  105. unset($_SESSION['gameMessage']);
  106. // opnieuw schepen genereren op basis van uw difficulty
  107. generateShips($_SESSION['difficulty'], $diffTableRows[$_SESSION['difficulty'] - 1]);
  108. $_SESSION['tryAgain'] = false;
  109. $_SESSION['gameDone'] = false;
  110. $_SESSION['gameState'] = true;
  111. $_SESSION['lost'] = false;
  112. $_SESSION['checkRefresh'] = true;
  113. }
  114. ?>
  115. <!-- Is de gameState true dan krijgen we onze difficulty selection te zien -->
  116. <?php if ($_SESSION['gameState']) { ?>
  117. <div class="main__content info">
  118. <div class="info-container">
  119. <span class="info-container__wrap">
  120. <span class="info-container__title">Difficulty: </span>
  121. <span class="info-container__item"><?= $difficultyStr[$_SESSION['difficulty'] - 1]; ?></span>
  122. </span>
  123. <span class="info-container__wrap">
  124. <!-- ALs ammo minder dan 3 is, class alert toevoegen -->
  125. <span class="info-container__title">Ammo: </span>
  126. <span class="info-container__item <?php if ($_SESSION['ammo'] < 4) {
  127. echo 'alert';
  128. } ?>"><?= $_SESSION['ammo']; ?></span>
  129. </span>
  130. </div>
  131. </div>
  132. <?php } ?>
  133. <fieldset class="main__content content">
  134. <?php
  135. // Functie die de input shot form genereert
  136. printGameForm($difficultyStr);
  137. ?>
  138. </fieldset>
  139. <?php if ($_SESSION['gameState']) { ?>
  140. <!-- Dit is de linkse container die onze schepen weergeeft -->
  141. <section class="main__content ships-container">
  142. <h2 class="ships-container__title">
  143. <!-- Ships vervoegen -->
  144. <?php if ($_SESSION['difficulty'] > 1) {
  145. echo "Ships";
  146. } else {
  147. echo "Ship";
  148. } ?>
  149. </h2>
  150. <?php
  151. // Deze functie print onze huidige schepen en wordt geupdate of we ze raken of niet
  152. printCurShotMessage();
  153. ?>
  154. </section>
  155. <?php } ?>
  156. <div class="main__content content">
  157. <!-- Deze functie print de tabel op basis van difficulty level en update ze -->
  158. <?php printTable($diffTableRows[$_SESSION['difficulty'] - 1]); ?>
  159. </div>
  160. </div>
  161. <?php
  162. if ($_SESSION['teacherMode']) {
  163. if ($_SESSION['gameState']) {
  164. // var_dump($_SESSION['curShips']);
  165. echo "<span class='alert'>*Teacher Mode*</span><br>Ship locations: ";
  166. for ($i = 0; $i < count($_SESSION['curShips']); $i++) {
  167. var_dump($_SESSION['curShips'][$i]->getLocArr());
  168. }
  169. }
  170. // session_destroy();
  171. }
  172. include "includes/foot.inc";
  173. ?>