|
@@ -1,290 +0,0 @@
|
|
|
-::: {.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 \...
|
|
|
-:::
|
|
|
-:::
|