You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.php 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. // starten van een sessie om een aantal variabelen bij te houden
  3. // voor de duur van het spel
  4. session_start();
  5. ?>
  6. <html>
  7. <body>
  8. <h1>Battleships</h1>
  9. <form method="POST">
  10. Shot: <input name="shot" /><br />
  11. <input type="submit" />
  12. </form>
  13. <pre><?php
  14. // <pre></pre> = teken wat tussen deze tags staat letterlijk. Zoniet, zal de browser dit als HTML beschouwen. Zie lessen HTML
  15. // Spel opzetten, de grootte van het speelveld is 100 op 1
  16. $fieldSizeX = 100;
  17. $fieldSizeY = 1;
  18. $subSize = floor($fieldSizeX / 3);
  19. // Als de sessie de key "subPosition" NIET bevat,
  20. // dan moeten we een nieuw spel starten
  21. if (!isset($_SESSION["subPosition"])) {
  22. $subPosition = rand(1, $fieldSizeX);
  23. // stockeer de positie van de duikboot in de sessie
  24. $_SESSION["subPosition"] = $subPosition;
  25. $positionsFired = array();
  26. // Onderstaande lijn is in feite overbodig. Waarom?
  27. // deze is op de vorige lijn nog maar net aangemaakt dus deze is altijd leeg
  28. $_SESSION['positionsFired'] = $positionsFired;
  29. $ammo = floor($fieldSizeX / 2);
  30. // stockeer ammo in de sessie
  31. $_SESSION['ammo'] = $ammo;
  32. $hits = array();
  33. $_SESSION['hits'] = $hits;
  34. } else {
  35. // vraag de variabelen op uit de sessie
  36. $subPosition = $_SESSION["subPosition"];
  37. $positionsFired = $_SESSION["positionsFired"];
  38. $ammo = $_SESSION['ammo'];
  39. $hits = $_SESSION['hits'];
  40. }
  41. $subHead = $subPosition - (ceil($subSize/2)-1);
  42. $subTail = $subPosition + floor($subSize/2);
  43. $won = false;
  44. $lost = false;
  45. // $_POST is een associative array die de input van de gebruiker (formulier) bevat.
  46. $shot = $_POST['shot'];
  47. // Verminder de ammo met 1
  48. if ($shot) {
  49. $ammo = $ammo - 1;
  50. }
  51. // Raak? Goed bezig!
  52. if ($shot >= $subHead && $shot <= $subTail && !in_array($shot,$hits)) {
  53. array_push($hits,$shot);
  54. }
  55. //hou de nieuwe $hits bij in de sessie
  56. $_SESSION['hits'] = $hits;
  57. echo "ammo left:" . $ammo . '<br/>';
  58. // hou de nieuwe ammo bij in de sessie
  59. $_SESSION['ammo'] = $ammo;
  60. // Voeg het schot toe aan de lijst met reeds uitgevoerde schoten, en stockeer in sessie
  61. array_push($positionsFired, $shot);
  62. $_SESSION['positionsFired'] = $positionsFired;
  63. //alles geraakt? gewonnen!
  64. //kop van de duikboot valt onder "|"
  65. if ($subHead == 0 && count($hits) == $subSize -1 ){
  66. $won = true;
  67. }
  68. // kop van de duikboot valt links buiten het veld
  69. elseif($subHead < 0 && count($hits) == $subSize - ($subHead*-1)-1){
  70. $won = true;
  71. }
  72. //staart van de duikboot valt onder "|"
  73. elseif($subTail == $fieldSizeX +1 && count($hits) == $subSize -1){
  74. $won = true;
  75. }
  76. // staart van de duikboot valt rechts buiten het veld
  77. elseif($subTail > $fieldSizeX + 1 && count($hits) == $subSize - ($subTail - ($fieldSizeX +1))-1){
  78. $won = true;
  79. }
  80. // indien alles normaal verloopt
  81. elseif(count($hits) == $subSize){
  82. $won = true;
  83. }
  84. // Geen ammo meer en ook niet gewonnen (laatste schot kan raak zijn)? Verloren!
  85. if ($ammo == 0 && !$won) {
  86. $lost = true;
  87. }
  88. // Teken het speelbord.
  89. // Voor elke rij (van 0 tot Y + 1)
  90. for ($y = 0; $y <= $fieldSizeY + 1; ++$y) {
  91. //Create the upper and lower border
  92. if ($y == 0 || $y == $fieldSizeY + 1) {
  93. for ($i = 0; $i <= $fieldSizeX + 1; ++$i) {
  94. if ($i == 0 || $i == $fieldSizeX + 1) {
  95. echo '+';
  96. } else echo '-';
  97. }
  98. }
  99. //Create the center rows
  100. else {
  101. echo '|';
  102. // Voor elke kolom, van 1 tot de lengte van het X
  103. for ($x = 1; $x <= $fieldSizeX; ++$x) {
  104. // Als gewonnen, teken de duikboot.
  105. if ($won && $x == $subHead - 1) { //Begin met de < voor de duikbootpositie.
  106. echo '<';
  107. } elseif ($won && $x == $subTail + 1) { // en de laatste positie
  108. echo '>';
  109. }
  110. else {
  111. if (in_array($x, $positionsFired)) { //Teken de schoten
  112. if ($x >= $subHead && $x <= $subTail) { // Duikboot geraakt?
  113. echo "#";
  114. } else { // gemist schot
  115. echo "x";
  116. }
  117. } else { // geen schot, gewoon een spatie
  118. echo "&nbsp;";
  119. }
  120. }
  121. }
  122. echo '|';
  123. }
  124. echo "<br/>";
  125. }
  126. // Opruiming bij het einde van het spel
  127. if ($won) {
  128. echo "<h1>You have won!</h1>";
  129. session_unset(); // Sessie leegmaken
  130. session_destroy(); // en sessie verwijderen
  131. }
  132. if ($lost) {
  133. echo "<h1>You have lost!</h1>";
  134. session_unset();
  135. session_destroy();
  136. }
  137. ?>
  138. </pre>
  139. </body>
  140. </html