#### Belalem Kaïsse n°12303619

# Mini-Projet (2024)

## But du mini-projet :

> Nostalgique des **jeux rétros**, une envie de recréer un jeu dans la même style m'a passé l'esprit. Ainsi, est né mon mini-projet : un alien que l'on peut déplacer et avec lequel on peut tirer afin de faire dégâts au "boss" et **gagner** la partie.

> Pour ce faire, les touches des *flèches*, intuitivement ancré en nous comme naturel pour ce type de jeu, et qui plus est, ce type d'époque, nous permettent de déplacer l'alien dans toutes les directions ; et la touche *T*, qui permet de tirer de petits missiels vers le "boss Boo".

> Mais attention, nous aussi pouvons prendre des dégâts ; on le voit à la **barre de vie** (*PV*) affiché !

## Explication du code :

> Le code est structuré et codé de cette manière :
* Des constantes permettant de simplifier l'utilisation de celle-ci
* Des structures de base : Color (qui n'était utilisé qu'au début pour ne pas utiliser d'image, mais implémenter des couleurs aux codes), Vec (utilisé pour modéliser des positions), menuu (images correspondant au menu de départ)
* Des structures plus concrètes et complexes : Alien (notre personnage principal), Tir (les petits missiles), Mur (les obstacles rouges), Balle (les balles - comme des particules soumis à la gravité), Boss (le boss)
* Une grande structure englobant le tout : Monde

Grâce à tout cela, des fonctions sont créés et utilisé afin de modifier notre affichage. Principalement : make_XXX qui permet de simplifier la création des différentes structures dans le init, qui lui même initialise la grande structure Monde au début du programme.
Après l'initalisation, on initialise également le menu avec nos images, afin que dès que l'utilisateur lance le programme, il lui est affiché un menu de départ (start). Tout cela est affiché grâce au drawmenu(M), qui affiche de manière continue (merci le while) nos images et va tester, avec la fonction lancementjeu(bool la), si l'utilisateur a cliqué sur le bouton start. S'il a cliqué, alors la se met à **true** et donc on sort d'un if precedement codé pour rentrer dans le coeur du jeu : le update, collision, draw de notre Monde (le jeu). Le fonction update change les positions de chaque éléments de notre monde, puis notre fonction collision teste si nos éléments se touchent, si tel est le cas, alors les règles de pertent de vie ou autre se font. Ensuite, le draw(), affiche toutes se modifications à l'utilisateur. (un delay(200) a été rajoué afin de garder une vitesse correcte au code). Ces fonctions se font uniquement si la fonction joue_encore() renvoie true (en gros si les PV de chacun >0, on joue) sinon, on utilise la fonction drawfin() qui affiche en fonction des PV de chacun (0 à alien ou 0 à boss) l'image de fin (GAME OVER si on a 0 PV, YOU WIN si le Boss a 0 PV). Et à partir de cette image de fin, on peut recommencer à jouer ou non, en modifier notre précédent bool la.
>

## Evolutions :

A la première semaine, je n'ai fais qu'un simple croquis sur papier de e que je souhaitais faire.
A la deuxième semaine (dépôt 1), j'ai pu commencer à créer les différentes structures, faire le initmonde, drawmoonde (avec des couleurs d'où la structure Color), et commencer un update avec les permiers mouvements du code, tel que les murs ou le personnage.
A la troisière semaine, j'ai pu finir TOUTES les fonctions utilse et réorganiser tout ça pour créer un "menu" et des images de fin.
A la dernière smeaine, j'ai finis apr rajouter TOUTES les images dont j'avais besoin et finis de coder la particule Balle, que je n'avais pas faites, par sécurité et ne pas tout faire planter et me bloquer bêtement.

## Références :

* [Canva](https://www.canva.com/)
* [Artiste faisant du pixel art](https://www.shutterstock.com/g/Kaleb-Silva)
* [GrAPiC et les différents TPs](https://perso.liris.cnrs.fr/alexandre.meyer/grapic/html/)
* [Inspirations rétro](https://fr.wikipedia.org/wiki/Space_Invaders)
