|
@@ -0,0 +1,290 @@
|
|
|
+::: {.container role="main"}
|
|
|
+::: {.focus-center}
|
|
|
+ASCII Space Destroyer
|
|
|
+=====================
|
|
|
+
|
|
|
+{.rounded}
|
|
|
+
|
|
|
+Jeu vidéo réalisé en C++
|
|
|
+------------------------
|
|
|
+
|
|
|
+Derrière ce nom un peu bourrin se cache un shooter à la *Space Invader*
|
|
|
+où les joueurs peuvent concevoir leur propre vaisseau avant de partir à
|
|
|
+l\'aventure.
|
|
|
+:::
|
|
|
+
|
|
|
+###  Introduction
|
|
|
+
|
|
|
+Entre mes deux années de prépa, j\'ai eu envie de reprendre le C++.
|
|
|
+
|
|
|
+J\'aime bien le thème de l\'espace, ainsi que la possibilité pour le
|
|
|
+joueur de créer son propre vaisseau.
|
|
|
+
|
|
|
+C\'est ainsi qu\'a débuté le projet ASCII Space Destroyer.
|
|
|
+
|
|
|
+### Le jeu
|
|
|
+
|
|
|
+#### Principe
|
|
|
+
|
|
|
+::: {.row}
|
|
|
+::: {.col-lg-12 .col-xl-4}
|
|
|
+**ASCII Space Destroyer** est un jeu de de tir. Il s\'inspire de
|
|
|
+*SpaceInvader*, le pionnier du genre. Les flottes de vaisseau ennemies
|
|
|
+se rapprochent, et vous devez tous les abattre avant qu\'ils ne
|
|
|
+franchissent le bord droit de l\'écran.
|
|
|
+
|
|
|
+La particularité de ce jeu est que votre vaisseau est composé de
|
|
|
+caractères ASCII, ces 127 caractères standards qui se retrouvent dans
|
|
|
+tous les jeux de caractères. Ainsi, chaque caractère forme une *brique*
|
|
|
+pour votre vaisseau, et elle peut être détruite. Votre vaisseau se
|
|
|
+détruit au fur et à mesure selon les dégâts subis. Si votre cockpit
|
|
|
+(représenté par le caractère `m`) est détruit, c\'est Game Over.
|
|
|
+:::
|
|
|
+
|
|
|
+::: {.col-lg-12 .col-xl-8}
|
|
|
+{.rounded
|
|
|
+.img-fluid .mx-auto .d-block}
|
|
|
+:::
|
|
|
+:::
|
|
|
+
|
|
|
+#### Progression
|
|
|
+
|
|
|
+::: {.row}
|
|
|
+::: {.col-lg-12 .col-xl-9}
|
|
|
+{.rounded
|
|
|
+.img-fluid .mx-auto .d-block}
|
|
|
+:::
|
|
|
+
|
|
|
+::: {.col-lg-12 .col-xl-3}
|
|
|
+Le joueur peut choisir la planète où il souhaite batailler à partir du
|
|
|
+menu. Pour chaque planète, une courte description permet de comprendre
|
|
|
+la raison de l\'attaque et d\'estimer les défenses de l\'adversaire.
|
|
|
+Pour chaque planète pacifiée, le joueur obtient une récompense qui lui
|
|
|
+permet d\'utiliser de meilleurs vaisseaux. Soit la limite du nombre de
|
|
|
+blocs sur son vaisseau augmente (apelée `CPU` dans le jeu) soit il
|
|
|
+débloque une arme ou le bouclier de combat.
|
|
|
+:::
|
|
|
+:::
|
|
|
+
|
|
|
+#### Faire son propre vaisseau
|
|
|
+
|
|
|
+L\'avantage de ce genre de graphisme, c\'est que n\'importe quel joueur
|
|
|
+peut créer son propre vaisseau : il suffit pour cela d\'un éditeur de
|
|
|
+texte.
|
|
|
+
|
|
|
+Lors du chargement du vaisseau, le programme va automatiquement
|
|
|
+reconnaître les combinaisons de caractères utilisées pour placer le
|
|
|
+cockpit et les divers équipements disponibles.
|
|
|
+
|
|
|
+Voici une courte description de l\'arsenal à disposition.
|
|
|
+
|
|
|
+::: {.row}
|
|
|
+::: {.col-xl-4 .col-lg-6 .col-md-12}
|
|
|
+##### Le Gun `[-`
|
|
|
+
|
|
|
+Le tir le plus classique. Pour l\'équiper sur votre vaisseau, il suffit
|
|
|
+d\'écrire `[-` quelque part dans sa structure. Cette arme tire en ligne
|
|
|
+droite jusqu\'à toucher sa cible. Les projectiles sont en forme de `+`.
|
|
|
+
|
|
|
+À l\'impact, le Gun fait des dégâts localisés autour du point de
|
|
|
+contact.
|
|
|
+:::
|
|
|
+
|
|
|
+::: {.col-xl-4 .col-lg-6 .col-md-12}
|
|
|
+##### Le Cutter `[|`
|
|
|
+
|
|
|
+Similaire au Gun dans sa manière de tirer, c\'est à l\'impact que le
|
|
|
+cutter se diférencie. Lorsque le projectile en forme de `|` touche une
|
|
|
+structure ennemie, tous les blocs situés sur la même ligne verticale
|
|
|
+prennent 50 points de dommages (maxi : 100).
|
|
|
+
|
|
|
+Ainsi, si deux projectiles de ce type frappent au même endroit, il est
|
|
|
+possible de couper un vaisseau ennemi en deux. Soyez donc attentifs, ils
|
|
|
+peuvent s\'avérer particulièrement efficaces sur certains types de
|
|
|
+structure \...
|
|
|
+:::
|
|
|
+
|
|
|
+::: {.col-xl-4 .col-lg-6 .col-md-12}
|
|
|
+##### Le Disper `[<`
|
|
|
+
|
|
|
+Les joueurs reconnaîtront dans cette arme le classique fusil à pompe
|
|
|
+présent dans la plupart des jeux de tir.
|
|
|
+
|
|
|
+Ainsi, le Disper tire plusieurs balles en même temps, mais les tirs sont
|
|
|
+dispersés et la portée réduite. Il faut savoir que le tir de Disper fait
|
|
|
+davantage de dégâts au contact.
|
|
|
+
|
|
|
+Très efficace pour détruire les ennemis proches de la limite, mais le
|
|
|
+corps à corps est toujours un paris risqué qui se conclue souvent par la
|
|
|
+perte de deux ou trois éléments de vaisseau \...
|
|
|
+:::
|
|
|
+
|
|
|
+::: {.col-xl-4 .col-lg-6 .col-md-12}
|
|
|
+##### Le Protoseeker `[O`
|
|
|
+
|
|
|
+Lorsqu\'on le voit en fonctionnement, on a l\'impression que le
|
|
|
+Protoseeker est un pistolet à eau \...
|
|
|
+
|
|
|
+Ce qui n\'est pas très loin de la réalité. En effet, le Protoseeker est
|
|
|
+l\'arme la plus faible du jeu. Elle compense sa faible puissance par une
|
|
|
+fréquence élevée et un ciblage automatique. Le tir est toujours orienté
|
|
|
+vers le vaisseau ennemi le plus proche.
|
|
|
+
|
|
|
+Ce genre d\'arme est très aprécié dans les situations confuses, ou l\'on
|
|
|
+passe son temps à esquiver les projectiles ennemis. Pendant ce temps là,
|
|
|
+le Protoseeker continue à toucher sa cible, infaillible.
|
|
|
+:::
|
|
|
+
|
|
|
+::: {.col-xl-4 .col-lg-6 .col-md-12}
|
|
|
+##### Missile Launcher `[>`
|
|
|
+
|
|
|
+Le lanceur de missiles est sans doute l\'arme la plus dangereuse du jeu.
|
|
|
+
|
|
|
+Ses caractéristiques : des dégâts puissants et localisés, une fréquence
|
|
|
+réduite \... Mais surtout un autoguidage fatal. Ce système de guidage
|
|
|
+permet au missile de modifier sa trajectoire lors de son vol et de viser
|
|
|
+directement le cockpit de l\'ennemi le plus proche.
|
|
|
+
|
|
|
+Si le Protoseeker arrose l\'ennemi d\'un tir nourri, le missile
|
|
|
+contourne les défenses et frappe directement au coeur de sa cible.
|
|
|
+
|
|
|
+Soyez donc vigilant si vous venez à affronter ce genre d\'arme : la
|
|
|
+modification de trajectoire le rend très difficle à éviter. Néanmoins,
|
|
|
+si vous êtes assez attentif, vous pourrez découvrir une faille dans
|
|
|
+l\'algorithme de guidage qui vous permettra d\'échapper à l\'impact.
|
|
|
+:::
|
|
|
+
|
|
|
+::: {.col-xl-4 .col-lg-6 .col-md-12}
|
|
|
+##### Brexit launcher `[{`
|
|
|
+
|
|
|
+Nommé d\'après l\'événement homonyme (il semblerait que je manquai
|
|
|
+d\'inspiration à ce moment là), le **Brexit** est une arme basée sur la
|
|
|
+division.
|
|
|
+
|
|
|
+De puissance comparable au **Gun**, le **Brexit** tire simultanément
|
|
|
+deux tirs en diagonale.
|
|
|
+
|
|
|
+Peut être utilisé en arme d\'appoint pour couvrir de nouveaux angles
|
|
|
+d\'attaques; ou bien pour faire des dégâts en évitant une attaque
|
|
|
+frontale, ce qui s\'avère utile lors de l\'attaque d\'un vaisseau
|
|
|
+lourdement armé.
|
|
|
+:::
|
|
|
+
|
|
|
+::: {.col-xl-4 .col-lg-6 .col-md-12}
|
|
|
+##### Hecto combustion `[~`
|
|
|
+
|
|
|
+L\'hecto combustion est une arme assez spéciale. Cette arme tire un `H`
|
|
|
+très lent. Son atout vient du fait qu\'il n\'explose pas à l\'impact. Il
|
|
|
+fait des dégâts et continue sa route.
|
|
|
+
|
|
|
+Ainsi, il peut être utilisé pour perforer des blindages épais. Mais sa
|
|
|
+lenteur le rend assez difficile à maîtriser.
|
|
|
+:::
|
|
|
+
|
|
|
+::: {.col-xl-4 .col-lg-6 .col-md-12}
|
|
|
+##### Sniper rifle `[=`
|
|
|
+
|
|
|
+Le Sniper tire un projectile en ligne droite, très puissant et
|
|
|
+accélérant.
|
|
|
+
|
|
|
+Il fait davantage de dégât avec la distance. À utiliser pour attaquer
|
|
|
+l\'ennemi dès son apparition.
|
|
|
+:::
|
|
|
+
|
|
|
+::: {.col-xl-4 .col-lg-12 .col-md-12}
|
|
|
+##### Le bouclier de combat `()`
|
|
|
+
|
|
|
+Le bouclier n\'est pas une arme, mais un dispositif de défense.
|
|
|
+
|
|
|
+Si le vaisseau possède au moins un bouclier, il apparaît bleuté et
|
|
|
+entouré d\'un champ protecteur. Ce champ de force absorbe les dégâts
|
|
|
+sans endommager la structure.
|
|
|
+
|
|
|
+À force d\'encaisser les dégâts, le bouclier se vide. Une fois vide,
|
|
|
+l\'enveloppe disparaît : le vaisseau n\'est plus protégé.
|
|
|
+
|
|
|
+Si le vaisseau n\'a pas encaissé de dégât pendant un certain laps de
|
|
|
+temps, le bouclier recommence à se régénérer.
|
|
|
+
|
|
|
+Le nombre de générateurs augmente la capacité du bouclier, c\'est à dire
|
|
|
+le nombre de dégâts qu\'il peut encaisser avant de disparaître, ainsi
|
|
|
+que la vitesse de rechargement.
|
|
|
+:::
|
|
|
+:::
|
|
|
+
|
|
|
+##### Tableau récapitulatif
|
|
|
+
|
|
|
+Voici le résumé de tous les équipements fonctionnels disponibles pour
|
|
|
+construire votre vaisseau.
|
|
|
+
|
|
|
+::: {.table-responsive}
|
|
|
+ Nom Symbole Projectile Catégorie CPU
|
|
|
+ ------------------ --------- ------------ ----------- -----
|
|
|
+ Cockpit `m` Structure 1
|
|
|
+ Bloc ASCII Structure 1
|
|
|
+ Gun `[-` `+` Arme 20
|
|
|
+ Cutter `[|` `|` Arme 22
|
|
|
+ Disper `[<` `*` Arme 24
|
|
|
+ Protoseeker `[O` `O` Arme 22
|
|
|
+ Missile launcher `[>` `->` Arme 70
|
|
|
+ Brexit launcher `[{` `X` Arme 27
|
|
|
+ Hecto combustion `[~` `H` Arme 56
|
|
|
+ Sniper rifle `[=` `=` Arme 50
|
|
|
+ Bouclier `()` Défense 30
|
|
|
+:::
|
|
|
+
|
|
|
+### Technologies
|
|
|
+
|
|
|
+Ce jeu a été codé en **C++** avec l\'IDE **Code::Blocks**. Je me suis
|
|
|
+aidé pour cela de la biblothèque SDL.
|
|
|
+
|
|
|
+::: {.row}
|
|
|
+::: {.col-lg-12 .col-xl-6}
|
|
|
+#### SDL 1.2
|
|
|
+
|
|
|
+SDL signifie **S**imple **D**irectMedia **L**ayer. Cette bibliothèque
|
|
|
+permet d\'ajouter des fonctions élémentaires pour intéragir avec
|
|
|
+l\'utilisateur.
|
|
|
+
|
|
|
+Véritable boîte à outils, j\'ai utilisé pour ce programme le module
|
|
|
+graphique pour afficher une fenêtre, et le module de gestion
|
|
|
+d\'événements pour récupérer les entrées utilisateur (clavier, souris).
|
|
|
+
|
|
|
+La SDL est une bibliothèque bas niveau. C\'est à dire qu\'elle est très
|
|
|
+primitive, il faut beaucoup de code pour arriver à un rendu correct.
|
|
|
+Cela demande au programmeur beaucoup de travail, et beaucoup
|
|
|
+d\'organisation.
|
|
|
+
|
|
|
+Lien vers [le site officiel de SDL 1.2](https://www.libsdl.org/).
|
|
|
+:::
|
|
|
+
|
|
|
+::: {.col-lg-12 .col-xl-6}
|
|
|
+#### SDL GFX
|
|
|
+
|
|
|
+SDL GFX rajoute quelques fonctions graphiques à la SDL. Je l\'ai
|
|
|
+utilisée principalement ici pour sa fonction qui permet d\'afficher des
|
|
|
+caractères. Sans cette fonction, difficile d\'afficher ces vaisseaux
|
|
|
+faits de caractères ASCII \...
|
|
|
+
|
|
|
+Et oui, SDL ne fait pas ça \... quand je vous disais que SDL est une
|
|
|
+bibliothèque bas niveau et ne faisait pas grand choses, je ne
|
|
|
+plaisantais pas.
|
|
|
+:::
|
|
|
+:::
|
|
|
+
|
|
|
+### Téléchargements
|
|
|
+
|
|
|
+::: {.alert .alert-info}
|
|
|
+{.float-left}
|
|
|
+
|
|
|
+Mon site web est encore en **développement**. Cette section sera
|
|
|
+implémentée dans une future version.
|
|
|
+
|
|
|
+Vous pourrez télécharger les différents exécutables du jeu, que vous
|
|
|
+ayez un ordinateur sous Linux ou sous Windows.
|
|
|
+
|
|
|
+Repassez plus tard \...
|
|
|
+:::
|
|
|
+:::
|