diff --git a/.gitignore b/.gitignore index bf75d00..0cefc57 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ Debug/* debug Debug/ + +out/* +site/* \ No newline at end of file diff --git a/Biblio/UML/class.puml b/Biblio/UML/class.puml index c09f470..31f0ce8 100644 --- a/Biblio/UML/class.puml +++ b/Biblio/UML/class.puml @@ -1,4 +1,4 @@ -@startuml +@startuml class class Joueur { + int32_t x + int32_t y diff --git a/Biblio/UML/threads.puml b/Biblio/UML/threads.puml index 6f91701..cd0ed00 100644 --- a/Biblio/UML/threads.puml +++ b/Biblio/UML/threads.puml @@ -1,26 +1,61 @@ -@startuml Architecture projet +@startuml Architecture_projet +package "HAL" { interface "CAN Joystick" as CAN interface "Ecran" as LCD -interface "Ethernet" as ether +interface "GPIO" as gpio +interface "rng" as rng +} Queue "Queue_J\nchoc joueur" as Queue_J Queue "Queue_E\nchoc ennemie" as Queue_E Queue "Queue_F\nfin du jeu" as Queue_F Queue "Queue_N\nnouveau projectile" as Queue_N -component "Table_ennemis" as table -component "joueur" as J + +package "Varriables partagées" { +component "Table_ennemis" as table <> +component "joueur" as J <> +component "Charge" as charge <> +component "LCD" as mut_lcd <> +} + +package "Fonctions globales"{ +component "Probabilité" as proba <> +component "Encapsulation LCD" as emc_lcd <> +component "Remplissage ennemis" as rempli <> +component "Mise à jour des leds" as update_led <> +} component t_gm[ Thread : game_master === -T = 20 ms +Bloqué en attente de messages --- gère l'apparition des porjectiles, gère les autres Thread, fait l'affichage des scores ] + +component t_HUD[ +Thread : HUD +=== +T = 100 ms +--- +Affiche : +- La vie, +- Le numéro de la vague, +- Le nombre de monstre tué. +] + +component t_chargeur[ +Thread : Chargeur +=== +T = 5/8 s +--- +Incremente la charge +] + component t_j1[ Tread : joueur_1 === -T = 20 ms +T = 5 ms --- gère le joystick, la vie du joueur, @@ -30,14 +65,14 @@ et l'affichage du joueur component t_ennemie[ Tread : Ennemies === -T = 20 ms +T = 200 ms --- gère les ennemies ] component t_proj[ Tread : projectile === -T = 20 ms +T = 10 ms --- gère les projectiles gère les colisions @@ -54,12 +89,13 @@ Queue_F --> [t_gm] [t_j1] --> Queue_N : nouveau tire des ennemie Queue_N --> [t_proj] -[t_j1] --( LCD -[t_ennemie] --( LCD -[t_proj] --( LCD -[t_gm] --( LCD +[t_j1] ..> emc_lcd : use +[t_ennemie] ..> emc_lcd : use +[t_proj] ..> emc_lcd : use +[t_gm] ..> emc_lcd : use -[t_gm] --( ether +emc_lcd .> mut_lcd : use +emc_lcd --( LCD [t_gm]..>[t_j1] : suspend [t_gm]..>[t_ennemie] : suspend @@ -69,4 +105,23 @@ Queue_N --> [t_proj] [t_ennemie] ..> table : ecris [t_proj] ..> J : lis [t_proj] ..> table : lis + +t_gm ..> rempli : use +rempli ..> table : ecris +rempli ..> proba : use + +t_ennemie ..> proba : use + +t_j1 ..> charge : lis/ecrit +t_chargeur ..> charge : lis/ecrit + +t_j1 ..> update_led : use +t_chargeur ..> update_led : use + +t_j1 --( gpio +update_led --( gpio + +t_HUD ..> emc_lcd : use + +proba --( rng @enduml diff --git a/Core/Src/main.c b/Core/Src/main.c index 5ae67ec..c518fee 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -46,7 +46,7 @@ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ -#define FACTEUR_ECRAN 1; + /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ diff --git a/Space_Invader.code-workspace b/Space_Invader.code-workspace index 715dc53..dc445a9 100644 --- a/Space_Invader.code-workspace +++ b/Space_Invader.code-workspace @@ -6,8 +6,8 @@ ], "settings": { "stm32-for-vscode.openOCDPath": "/home/leopold/.config/Code/User/globalStorage/bmd.stm32-for-vscode/@xpack-dev-tools/openocd/0.11.0-1.1/.content/bin/openocd", - "stm32-for-vscode.makePath": "/usr/bin/make", - "stm32-for-vscode.armToolchainPath": "/home/leopold/.config/Code/User/globalStorage/bmd.stm32-for-vscode/@xpack-dev-tools/arm-none-eabi-gcc/10.2.1-1.1.2/.content/bin", + "stm32-for-vscode.makePath": false, + "stm32-for-vscode.armToolchainPath": false, "cortex-debug.armToolchainPath": "/home/leopold/.config/Code/User/globalStorage/bmd.stm32-for-vscode/@xpack-dev-tools/arm-none-eabi-gcc/10.2.1-1.1.2/.content/bin", "cortex-debug.openocdPath": "/home/leopold/.config/Code/User/globalStorage/bmd.stm32-for-vscode/@xpack-dev-tools/openocd/0.11.0-1.1/.content/bin/openocd" } diff --git a/docs/Architecture_projet.svg b/docs/Architecture_projet.svg new file mode 100644 index 0000000..19c54f1 --- /dev/null +++ b/docs/Architecture_projet.svg @@ -0,0 +1,198 @@ +HALVarriables partagéesFonctions globalesCAN JoystickEcranGPIOrng«black board»Table_ennemis«black board»joueur«black board»Charge«Mutex»LCD«functions»Probabilité«functions»Encapsulation LCD«function»Remplissage ennemis«function»Mise à jour des ledsQueue_Jchoc joueurQueue_Echoc ennemieQueue_Ffin du jeuQueue_Nnouveau projectileThread : game_masterBloqué en attente de messagesgère l'apparition des porjectiles,gère les autres Thread,fait l'affichage des scoresThread : HUDT = 100 msAffiche :- La vie,- Le numéro de la vague,- Le nombre de monstre tué.Thread : ChargeurT = 5/8 sIncremente la chargeTread : joueur_1T = 5 msgère le joystick,la vie du joueur,la position du joueur 1,et l'affichage du joueurTread : EnnemiesT = 200 msgère les ennemiesTread : projectileT = 10 msgère les projectilesgère les colisionslit la valeurtouchétouchéplus de vieplus d'ennemienouveau tire du joueurnouveau tire des ennemieuseuseuseuseusesuspendsuspendsuspendecrisecrislislisuseecrisuseuselis/ecritlis/ecrituseuseuse \ No newline at end of file diff --git a/docs/archi.md b/docs/archi.md new file mode 100644 index 0000000..2d23efa --- /dev/null +++ b/docs/archi.md @@ -0,0 +1,36 @@ +# Architecture du programme + +Le programe comporte plusieurs composants. Il y a : + +- des [threads](thread.md) + + - des queues, pour comuniquer entre les threads, + + - des varriables partagées (type black board), + + - un mutex, pour gérer l'acces à l'écran + +- des [classes](class.md) + +- des pérriférique: + + - L'[écran](lcd.md) + + - Le [générateur de nombre aléatoire](rng.md) + + - Les [leds](led.md) + + - Le [joystick](joystick.md) + +## Diagramme des composants : + +Les composants intéragicent de la manière suivante : +![Schéma des composants](Architecture_projet.svg) + +## Principales variables : + +Les principales variables sont : + +- ```joueur``` qui représente l'entier joueur et contient toutes les informations nécéssaires, +- ```Table_ennemis``` qui contient tous les monstres ainsi que leurs informations. + diff --git a/docs/class.md b/docs/class.md new file mode 100644 index 0000000..45bc590 --- /dev/null +++ b/docs/class.md @@ -0,0 +1,23 @@ +# Classe + +Les classes utilisées sont les suivantes : + +![Diagramme de classes](class.svg) + +## Classe de representation + +Pour representer les élements dans le jeu, on utilise les classes : + +- ```Joueur``` qui n'est instancier qu'une seule fois, et qui represente le joueur, + +- ```Monster``` qui represente les monstres, + +- ```Missile``` qui represente les projectiles. + +Des instances de la classe ```Missile``` sont memebres des deux autres classes car elles representent les projeciles de basse. + +De plus, les threads ```Joueur_1``` et ```Block_Enemie``` envoie des objet ```Missile``` dans la ```queue_N``` vers le thread ```Projectile``` pour lui signaler les nouveaux missiles à simuler. + +## Classe de messagerie + +Les classes utiles pour les messages sont ```struct Collision``` qui peremt de transmetre toutes les informations relatives à un choc avec un monstre en même temps, et la class ```enum End_Type``` qui décrit le type de fin de vague que l'on rencontre (défaite des monstre ou du joueur). \ No newline at end of file diff --git a/docs/class.svg b/docs/class.svg new file mode 100644 index 0000000..a9b2433 --- /dev/null +++ b/docs/class.svg @@ -0,0 +1,89 @@ +Joueurint32_t xint32_t yint8_t dxint8_t dyint8_t healthMissile missilemodelise le joueurMissileint16_t xint16_t yint8_t dxint8_t dyCamps_missile equipeuint8_t damageuint8_t validemodelise les missiles.Monsterint32_t xint32_t yint16_t healthMissile missilemodelise les monstres.Collisionuint8_t idx1uint8_t idx2uint8_t damagedécrit les colision entre missile et monstre.Camps_missileMISSILE_AMIMISSILE_ENNEMIdécrit le camps du missile.End_typeEND_TABLEAU_VIDEEND_MORT_JOUEURdécrit le type de fin de la partie.Sens_ennemieDROITEGAUCHEdécrit le sens de déplacement actuel des ennemis.décrit le missile de base du joueur.décrit le missile de base des monstres.décrit le missile de base des monstres. \ No newline at end of file diff --git a/docs/extra.css b/docs/extra.css new file mode 100644 index 0000000..2f50f4d --- /dev/null +++ b/docs/extra.css @@ -0,0 +1,5 @@ +:root { + --md-primary-fg-color: #00778B; + --md-primary-fg-color--light: #ECB7B7; + --md-primary-fg-color--dark: #90030C; + } \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index b439e78..4d66940 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,19 +1,13 @@ -# Welcome to MkDocs +# Space Invader -For full documentation visit [mkdocs.org](https://www.mkdocs.org). +Projet du second semetre de : -:toc: +* [Léopold Clément](mail:leopold.clement@ens-paris-saclay.fr) -## Commands +* [Thomas Omarini](mail:thomas.omarini@ens-paris-saclay.fr) -* `mkdocs new [dir-name]` - Create a new project. -* `mkdocs serve` - Start the live-reloading docs server. -* `mkdocs build` - Build the documentation site. -* `mkdocs -h` - Print help message and exit. +Si vous avez des difficultés avec le jeu, un tutoriel est disponible [ici](tuto.md). -## Project layout +Sinon, tous les détails techniques sont expliquer [ici](archi.md). - mkdocs.yml # The configuration file. - docs/ - index.md # The documentation homepage. - ... # Other markdown pages, images and other files. +Si vous arrivé jusqu'à la vague 15, prévenez nous. diff --git a/docs/joystick.md b/docs/joystick.md new file mode 100644 index 0000000..ca4c733 --- /dev/null +++ b/docs/joystick.md @@ -0,0 +1,3 @@ +# Joystick + +On réaliste un seuillage autour de la valeur centrale. Le joystick n'est pas vraiment annalogique, il n'y a que 8 directions possibles. \ No newline at end of file diff --git a/docs/lcd.md b/docs/lcd.md new file mode 100644 index 0000000..284f603 --- /dev/null +++ b/docs/lcd.md @@ -0,0 +1,11 @@ +# L'écran + +## Organisation de l'écran +Les dix pixel en haut de l'écran sont reservés pour l'affichage des informations. + +Les monstres sont rangés sur trois rangs + +## Mutex +Pour ne pas aoir de problème d'interruption entre les threads pendant la manipulation de la mémoire de l'écran, on utilise un mutex ainsi que une série de fonction permetant de faire automatiquement l'attente et le relachement du mutex. + +## Bitmap diff --git a/docs/led.md b/docs/led.md new file mode 100644 index 0000000..2456e3b --- /dev/null +++ b/docs/led.md @@ -0,0 +1,10 @@ +# LED et GPIO + +## Ecriture sur les LEDs + +Pour facilité l'utilisation des LEDs, on utilise une liste d'objet ```struct led```, ainsi ```Leds[n] = {{LEDXX_GPIO_Port, LEDXX_Pin}}```. + +On peut ainsi utilisé la ligne ```HAL_GPIO_WritePin(Leds[idx].port, Leds[idx].pin, !(charge-1