pro_ascii_space.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537
  1. <?php
  2. $title = "ASCII";
  3. include("../header.php");
  4. ?>
  5. <!-- Main -->
  6. <main role="main" class="container">
  7. <div class="focus-center">
  8. <h1>
  9. ASCII Space Destroyer
  10. </h1>
  11. <img class="rounded" src="../images/projets_ascii_ship_torpEL.png" alt="code flat icon">
  12. <h2>
  13. Jeu vidéo réalisé en C++
  14. </h2>
  15. <p class="lead">
  16. Derrière ce nom un peu bourrin se cache un shooter à la <em>Space Invader</em> où les joueurs peuvent
  17. concevoir
  18. leur propre vaisseau avant de partir à l'aventure.
  19. </p>
  20. </div>
  21. <!-- Content -->
  22. <h3>
  23. <img src="https://img.icons8.com/color/48/000000/term.png" alt="V">
  24. Introduction
  25. </h3>
  26. <p>
  27. Entre mes deux années de prépa, j'ai eu envie de reprendre le C++.
  28. </p>
  29. <p>
  30. J'aime bien le thème de l'espace, ainsi que la possibilité pour le joueur de créer son propre vaisseau.
  31. </p>
  32. <p>
  33. C'est ainsi qu'a débuté le projet ASCII Space Destroyer.
  34. </p>
  35. <h3>
  36. Le jeu
  37. </h3>
  38. <h4>
  39. Principe
  40. </h4>
  41. <div class="row">
  42. <div class="col-lg-12 col-xl-4">
  43. <p>
  44. <strong>ASCII Space Destroyer</strong> est un jeu de de tir. Il s'inspire de <em>SpaceInvader</em>, le
  45. pionnier
  46. du genre. Les flottes de vaisseau ennemies se rapprochent, et vous devez tous les abattre avant qu'ils
  47. ne
  48. franchissent le bord droit de l'écran.
  49. </p>
  50. <p>
  51. La particularité de ce jeu est que votre vaisseau est composé de caractères ASCII, ces 127 caractères
  52. standards
  53. qui se retrouvent dans tous les jeux de caractères. Ainsi, chaque caractère forme une <em>brique</em>
  54. pour
  55. votre
  56. vaisseau, et elle peut être détruite. Votre vaisseau se détruit au fur et à mesure selon les dégâts
  57. subis.
  58. Si
  59. votre cockpit (représenté par le caractère <code>m</code>) est détruit, c'est Game Over.
  60. </p>
  61. </div>
  62. <div class="col-lg-12 col-xl-8">
  63. <img class="rounded img-fluid mx-auto d-block" src="../images/projets_ascii_game1.png" alt="cv flat icon"/>
  64. </div>
  65. </div>
  66. <h4>
  67. Progression
  68. </h4>
  69. <div class="row">
  70. <div class="col-lg-12 col-xl-9">
  71. <img class="rounded img-fluid mx-auto d-block" src="../images/projets_ascii_menu.png" alt="cv flat icon"/>
  72. </div>
  73. <div class="col-lg-12 col-xl-3">
  74. <p>
  75. Le joueur peut choisir la planète où il souhaite batailler à partir du menu. Pour chaque planète, une
  76. courte
  77. description permet de comprendre la raison de l'attaque et d'estimer les défenses de l'adversaire. Pour
  78. chaque
  79. planète pacifiée, le joueur obtient une récompense qui lui permet d'utiliser de meilleurs vaisseaux.
  80. Soit la
  81. limite du nombre de blocs sur son vaisseau augmente (apelée <code>CPU</code> dans le jeu) soit il
  82. débloque une
  83. arme ou le bouclier de combat.
  84. </p>
  85. </div>
  86. </div>
  87. <h4>
  88. Faire son propre vaisseau
  89. </h4>
  90. <p>
  91. L'avantage de ce genre de graphisme, c'est que n'importe quel joueur peut créer son propre vaisseau : il suffit
  92. pour cela d'un éditeur de texte.
  93. </p>
  94. <p>
  95. Lors du chargement du vaisseau, le programme va automatiquement reconnaître les combinaisons de caractères
  96. utilisées pour placer le cockpit et les divers équipements disponibles.
  97. </p>
  98. <p>
  99. Voici une courte description de l'arsenal à disposition.
  100. </p>
  101. <div class="row">
  102. <div class="col-xl-4 col-lg-6 col-md-12">
  103. <h5>
  104. Le Gun <code>[-</code>
  105. </h5>
  106. <p>
  107. Le tir le plus classique. Pour l'équiper sur votre vaisseau, il suffit d'écrire <code>[-</code> quelque
  108. part
  109. dans sa structure. Cette arme tire en ligne droite jusqu'à toucher sa cible. Les projectiles sont en
  110. forme de
  111. <code>+</code>.
  112. </p>
  113. <p>
  114. À l'impact, le Gun fait des dégâts localisés autour du point de contact.
  115. </p>
  116. </div>
  117. <div class="col-xl-4 col-lg-6 col-md-12">
  118. <h5>
  119. Le Cutter <code>[|</code>
  120. </h5>
  121. <p>
  122. Similaire au Gun dans sa manière de tirer, c'est à l'impact que le cutter se diférencie. Lorsque le
  123. projectile
  124. en forme de <code>|</code> touche une structure ennemie, tous les blocs situés sur la même ligne
  125. verticale
  126. prennent 50 points de dommages (maxi : 100).
  127. </p>
  128. <p>
  129. Ainsi, si deux projectiles de ce type frappent au même endroit, il est possible de couper un vaisseau
  130. ennemi en
  131. deux. Soyez donc attentifs, ils peuvent s'avérer particulièrement efficaces sur certains types de
  132. structure ...
  133. </p>
  134. </div>
  135. <div class="col-xl-4 col-lg-6 col-md-12">
  136. <h5>
  137. Le Disper <code>[<</code>
  138. </h5>
  139. <p>
  140. Les joueurs reconnaîtront dans cette arme le classique fusil à pompe présent dans la plupart des jeux de
  141. tir.
  142. </p>
  143. <p>
  144. Ainsi, le Disper tire plusieurs balles en même temps, mais les tirs sont dispersés et la portée réduite.
  145. Il faut
  146. savoir que le tir de Disper fait davantage de dégâts au contact.
  147. </p>
  148. <p>
  149. Très efficace pour détruire les ennemis proches de la limite, mais le corps à corps est toujours un
  150. paris risqué
  151. qui se conclue souvent par la perte de deux ou trois éléments de vaisseau ...
  152. </p>
  153. </div>
  154. <div class="col-xl-4 col-lg-6 col-md-12">
  155. <h5>
  156. Le Protoseeker <code>[O</code>
  157. </h5>
  158. <p>
  159. Lorsqu'on le voit en fonctionnement, on a l'impression que le Protoseeker est un pistolet à eau ...
  160. </p>
  161. <p>
  162. Ce qui n'est pas très loin de la réalité. En effet, le Protoseeker est l'arme la plus faible du jeu.
  163. Elle
  164. compense sa faible puissance par une fréquence élevée et un ciblage automatique. Le tir est toujours
  165. orienté
  166. vers le vaisseau ennemi le plus proche.
  167. </p>
  168. <p>
  169. Ce genre d'arme est très aprécié dans les situations confuses, ou l'on passe son temps à esquiver les
  170. projectiles ennemis. Pendant ce temps là, le Protoseeker continue à toucher sa cible, infaillible.
  171. </p>
  172. </div>
  173. <div class="col-xl-4 col-lg-6 col-md-12">
  174. <h5>
  175. Missile Launcher <code>[></code>
  176. </h5>
  177. <p>
  178. Le lanceur de missiles est sans doute l'arme la plus dangereuse du jeu.
  179. </p>
  180. <p>
  181. Ses caractéristiques : des dégâts puissants et localisés, une fréquence réduite ... Mais surtout un
  182. autoguidage
  183. fatal. Ce système de guidage permet au missile de modifier sa trajectoire lors de son vol et de viser
  184. directement le cockpit de l'ennemi le plus proche.
  185. </p>
  186. <p>
  187. Si le Protoseeker arrose l'ennemi d'un tir nourri, le missile contourne les défenses et frappe
  188. directement au
  189. coeur de sa cible.
  190. </p>
  191. <p>
  192. Soyez donc vigilant si vous venez à affronter ce genre d'arme : la modification de trajectoire le rend
  193. très
  194. difficle à éviter. Néanmoins, si vous êtes assez attentif, vous pourrez découvrir une faille dans
  195. l'algorithme
  196. de guidage qui vous permettra d'échapper à l'impact.
  197. </p>
  198. </div>
  199. <div class="col-xl-4 col-lg-6 col-md-12">
  200. <h5>
  201. Brexit launcher <code>[{</code>
  202. </h5>
  203. <p>
  204. Nommé d'après l'événement homonyme (il semblerait que je manquai d'inspiration à ce moment là), le
  205. <strong>Brexit</strong>
  206. est une arme basée sur la division.
  207. </p>
  208. <p>
  209. De puissance comparable au <strong>Gun</strong>, le <strong>Brexit</strong> tire simultanément deux tirs
  210. en
  211. diagonale.
  212. </p>
  213. <p>
  214. Peut être utilisé en arme d'appoint pour couvrir de nouveaux angles d'attaques; ou bien pour faire des
  215. dégâts en
  216. évitant une attaque frontale, ce qui s'avère utile lors de l'attaque d'un vaisseau lourdement armé.
  217. </p>
  218. </div>
  219. <div class="col-xl-4 col-lg-6 col-md-12">
  220. <h5>
  221. Hecto combustion <code>[~</code>
  222. </h5>
  223. <p>
  224. L'hecto combustion est une arme assez spéciale. Cette arme tire un <code>H</code> très lent. Son atout
  225. vient du
  226. fait qu'il n'explose pas à l'impact. Il fait des dégâts et continue sa route.
  227. </p>
  228. <p>
  229. Ainsi, il peut être utilisé pour perforer des blindages épais. Mais sa lenteur le rend assez difficile à
  230. maîtriser.
  231. </p>
  232. </div>
  233. <div class="col-xl-4 col-lg-6 col-md-12">
  234. <h5>
  235. Sniper rifle <code>[=</code>
  236. </h5>
  237. <p>
  238. Le Sniper tire un projectile en ligne droite, très puissant et accélérant.
  239. </p>
  240. <p>
  241. Il fait davantage de dégât avec la distance. À utiliser pour attaquer l'ennemi dès son apparition.
  242. </p>
  243. </div>
  244. <div class="col-xl-4 col-lg-12 col-md-12">
  245. <h5>
  246. Le bouclier de combat <code>()</code>
  247. </h5>
  248. <p>
  249. Le bouclier n'est pas une arme, mais un dispositif de défense.
  250. </p>
  251. <p>
  252. Si le vaisseau possède au moins un bouclier, il apparaît bleuté et entouré d'un champ protecteur. Ce
  253. champ de
  254. force absorbe les dégâts sans endommager la structure.
  255. </p>
  256. <p>
  257. À force d'encaisser les dégâts, le bouclier se vide. Une fois vide, l'enveloppe disparaît : le vaisseau
  258. n'est
  259. plus protégé.
  260. </p>
  261. <p>
  262. Si le vaisseau n'a pas encaissé de dégât pendant un certain laps de temps, le bouclier recommence à se
  263. régénérer.
  264. </p>
  265. <p>
  266. Le nombre de générateurs augmente la capacité du bouclier, c'est à dire le nombre de dégâts qu'il peut
  267. encaisser
  268. avant de disparaître, ainsi que la vitesse de rechargement.
  269. </p>
  270. </div>
  271. </div>
  272. <h5>
  273. Tableau récapitulatif
  274. </h5>
  275. <p>
  276. Voici le résumé de tous les équipements fonctionnels disponibles pour construire votre vaisseau.
  277. </p>
  278. <div class="table-responsive">
  279. <table class="table">
  280. <thead>
  281. <tr>
  282. <th>Nom</th>
  283. <th>Symbole</th>
  284. <th>Projectile</th>
  285. <th>Catégorie</th>
  286. <th title="Charge CPU : coût supplémentaire de ce bloc">CPU</th>
  287. </tr>
  288. </thead>
  289. <tbody>
  290. <tr>
  291. <td>Cockpit</td>
  292. <td><code>m</code></td>
  293. <td></td>
  294. <td>Structure</td>
  295. <td>1</td>
  296. </tr>
  297. <tr>
  298. <td>Bloc</td>
  299. <td title="N'importe quel caractère ASCII">ASCII</td>
  300. <td></td>
  301. <td>Structure</td>
  302. <td>1</td>
  303. </tr>
  304. <tr>
  305. <td>Gun</td>
  306. <td><code>[-</code></td>
  307. <td><code>+</code></td>
  308. <td>Arme</td>
  309. <td>20</td>
  310. </tr>
  311. <tr>
  312. <td>Cutter</td>
  313. <td><code>[|</code></td>
  314. <td><code>|</code></td>
  315. <td>Arme</td>
  316. <td>22</td>
  317. </tr>
  318. <tr>
  319. <td>Disper</td>
  320. <td><code>[<</code></td>
  321. <td><code>*</code></td>
  322. <td>Arme</td>
  323. <td>24</td>
  324. </tr>
  325. <tr>
  326. <td>Protoseeker</td>
  327. <td><code>[O</code></td>
  328. <td><code>O</code></td>
  329. <td>Arme</td>
  330. <td>22</td>
  331. </tr>
  332. <tr>
  333. <td>Missile launcher</td>
  334. <td><code>[></code></td>
  335. <td><code>-></code></td>
  336. <td>Arme</td>
  337. <td>70</td>
  338. </tr>
  339. <tr>
  340. <td>Brexit launcher</td>
  341. <td><code>[{</code></td>
  342. <td><code>X</code></td>
  343. <td>Arme</td>
  344. <td>27</td>
  345. </tr>
  346. <tr>
  347. <td>Hecto combustion</td>
  348. <td><code>[~</code></td>
  349. <td><code>H</code></td>
  350. <td>Arme</td>
  351. <td>56</td>
  352. </tr>
  353. <tr>
  354. <td>Sniper rifle</td>
  355. <td><code>[=</code></td>
  356. <td><code>=</code></td>
  357. <td>Arme</td>
  358. <td>50</td>
  359. </tr>
  360. <tr>
  361. <td>Bouclier</td>
  362. <td><code>()</code></td>
  363. <td></td>
  364. <td>Défense</td>
  365. <td>30</td>
  366. </tr>
  367. </tbody>
  368. </table>
  369. </div>
  370. <h3>
  371. Technologies
  372. </h3>
  373. <p>
  374. Ce jeu a été codé en <strong>C++</strong> avec l'IDE <strong>Code::Blocks</strong>. Je me suis aidé pour cela de
  375. la biblothèque SDL.
  376. </p>
  377. <div class="row">
  378. <div class="col-lg-12 col-xl-6">
  379. <h4>
  380. SDL 1.2
  381. </h4>
  382. <p>
  383. SDL signifie <strong>S</strong>imple <strong>D</strong>irectMedia <strong>L</strong>ayer. Cette
  384. bibliothèque
  385. permet d'ajouter des fonctions élémentaires pour intéragir avec l'utilisateur.
  386. </p>
  387. <p>
  388. Véritable boîte à outils, j'ai utilisé pour ce programme le module graphique pour afficher une fenêtre,
  389. et le
  390. module de gestion d'événements pour récupérer les entrées utilisateur (clavier, souris).
  391. </p>
  392. <p>
  393. La SDL est une bibliothèque bas niveau. C'est à dire qu'elle est très primitive, il faut beaucoup de
  394. code pour
  395. arriver à un rendu correct. Cela demande au programmeur beaucoup de travail, et beaucoup d'organisation.
  396. </p>
  397. <p>
  398. Lien vers <a href="https://www.libsdl.org/">le site officiel de SDL 1.2</a>.
  399. </p>
  400. </div>
  401. <div class="col-lg-12 col-xl-6">
  402. <h4>
  403. SDL GFX
  404. </h4>
  405. <p>
  406. SDL GFX rajoute quelques fonctions graphiques à la SDL. Je l'ai utilisée principalement ici pour sa
  407. fonction qui
  408. permet d'afficher des caractères. Sans cette fonction, difficile d'afficher ces vaisseaux faits de
  409. caractères
  410. ASCII ...
  411. </p>
  412. <p>
  413. Et oui, SDL ne fait pas ça ... quand je vous disais que SDL est une bibliothèque bas niveau et ne
  414. faisait pas
  415. grand choses, je ne plaisantais pas.
  416. </p>
  417. </div>
  418. </div>
  419. <h3>
  420. Téléchargements
  421. </h3>
  422. <div class="row">
  423. <div class="col-md-12 col-lg-4 col-xl-4">
  424. <h4>
  425. <img src="https://img.icons8.com/color/48/000000/debian.png" alt="[Debian logo]">
  426. GNU/Linux
  427. </h4>
  428. La SDL et la SDL_gfx doivent être installées pour exécuter ce jeu (Gfx : 40kB)
  429. <br/><code>sudo apt update</code>
  430. <br/><code>sudo apt install libsdl-gfx1.2-5</code>
  431. <a href="/downloads/pro_ascii_space/ASCII_Space_Destroyer_Debian_v1.0.zip" class="btn btn-success">
  432. Télécharger
  433. </a>
  434. </div>
  435. <div class="col-md-12 col-lg-4 col-xl-4">
  436. <h4>
  437. <img src="https://img.icons8.com/color/48/000000/windows-logo.png" alt="[Windows logo]">
  438. Windows
  439. </h4>
  440. <a href="#" class="btn btn-success disabled">Télécharger</a>
  441. </div>
  442. <div class="col-md-12 col-lg-4 col-xl-4">
  443. <h4>
  444. <img src="https://img.icons8.com/color/48/000000/mac-os.png" alt="[Apple logo]">
  445. Mac OS
  446. </h4>
  447. <a href="#" class="btn btn-success disabled">Télécharger</a>
  448. </div>
  449. </div>
  450. <!-- Dev in progress -->
  451. <div class="alert alert-info mt-5">
  452. <img class="float-left" src="https://img.icons8.com/color/90/000000/road-worker.png" alt="[Working]">
  453. <p>
  454. Mon site web est encore en <strong>développement</strong>.
  455. </p>
  456. <p>
  457. Vous pourrez télécharger d'autres exécutables du jeu, pour les systèmes MacOS ou Windows.
  458. </p>
  459. <p>
  460. Repassez plus tard ...
  461. </p>
  462. </div>
  463. <!-- Pagination -->
  464. <ul class="pagination pagination-lg justify-content-center">
  465. <li class="page-item">
  466. <a class="page-link arrow" title="Page précédente" href="pro_static_site.php">&laquo</a>
  467. </li>
  468. <li class="page-item">
  469. <a class="page-link" title="Site web de Jovian" href="pro_static_site.php">1</a>
  470. </li>
  471. <li class="page-item active">
  472. <div class="page-link" title="ASCII Space destroyer">2</div>
  473. </li>
  474. <li class="page-item">
  475. <a class="page-link" title="Pulsar" href="pro_pulsar.php">3</a>
  476. </li>
  477. <li class="page-item">
  478. <a class="page-link" title="Quoridor" href="pro_quoridor.php">4</a>
  479. </li>
  480. <li class="page-item">
  481. <a class="page-link arrow" title="Page suivante" href="pro_pulsar.php">&raquo</a>
  482. </li>
  483. </ul>
  484. </main>
  485. <!-- Footer -->
  486. <footer class="footer bg-dark mt-5">
  487. <div class="container">
  488. <span class="text-muted">Images sources : ICON8</span>
  489. <a href="https://icons8.com/icon/104082/cv">CV icon by Icons8</a>
  490. <a href="https://icons8.com/icon/104084/city">City icon by Icons8</a>
  491. <a href="https://icons8.com/icon/19293/code">Code icon by Icons8</a>
  492. <a href="https://icons8.com/icon/17838/debian">Debian icon by Icons8</a>
  493. <a href="https://icons8.com/icon/17854/windows-xp">Windows XP icon by Icons8</a>
  494. <a href="https://icons8.com/icon/17843/apple-logo">Apple Logo icon by Icons8</a>
  495. </div>
  496. </footer>
  497. <!-- Scripts -->
  498. <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
  499. integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
  500. crossorigin="anonymous"></script>
  501. <script src="../js/bootstrap.js"></script>
  502. </body>
  503. </html>