Merge branch 'doc'

master
Leopold Clement 3 years ago
commit bc4cd8d0b5

@ -0,0 +1,16 @@
name: ci
on:
push:
branches:
- master
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: 3.x
- run: pip install mkdocs-material
- run: mkdocs gh-deploy --force

2
.gitignore vendored

@ -3,4 +3,4 @@ debug
Debug/
site/*
out/*
out/*

@ -1,4 +1,4 @@
@startuml
@startuml class
class Joueur {
+ int32_t x
+ int32_t y

@ -1,24 +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
package "Varriables partagées" {
component "Table_ennemis" as table <<black board>>
component "joueur" as J <<black board>>
component "Charge" as charge <<black board>>
component "LCD" as mut_lcd <<Mutex>>
}
package "Fonctions globales"{
component "Probabilité" as proba <<functions>>
component "Encapsulation LCD" as emc_lcd <<functions>>
component "Remplissage ennemis" as rempli <<function>>
component "Mise à jour des leds" as update_led <<function>>
}
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,
@ -28,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
@ -52,15 +89,39 @@ 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
[t_gm]..>[t_proj] : suspend
[t_j1] ..> J : ecris
[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

@ -0,0 +1,115 @@
#ifndef INC_ENNEMI_B_H_
#define INC_ENNEMI_B_H_
#include "stdint.h"
uint8_t ennemi_b[] = {
0x42, 0x4d, 0x52, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x38, 0x00,
0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0f, 0x00,
0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x03, 0x00,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x23, 0x2e,
0x00, 0x00, 0x23, 0x2e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x45, 0x28, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x03, 0x18,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
};
#endif /* INC_ENNEMI_B_H_ */

@ -0,0 +1,115 @@
#ifndef INC_ENNEMI_R_H_
#define INC_ENNEMI_R_H_
#include "stdint.h"
uint8_t ennemi_r[] = {
0x42, 0x4d, 0x52, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x38, 0x00,
0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0f, 0x00,
0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x03, 0x00,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x23, 0x2e,
0x00, 0x00, 0x23, 0x2e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x28, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x18,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
};
#endif /* INC_ENNEMI_R_H_ */

@ -0,0 +1,115 @@
#ifndef INC_ENNEMI_V_H_
#define INC_ENNEMI_V_H_
#include "stdint.h"
uint8_t ennemi_v[] = {
0x42, 0x4d, 0x52, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x38, 0x00,
0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0f, 0x00,
0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x03, 0x00,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x23, 0x2e,
0x00, 0x00, 0x23, 0x2e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07,
0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00,
0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07,
0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07,
0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00,
0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07,
0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07,
0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07,
0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
};
#endif /* INC_ENNEMI_V_H_ */

@ -0,0 +1,117 @@
#ifndef INC_VAISSEAU_H_
#define INC_VAISSEAU_H_
#include "stdint.h"
uint8_t bmp_joueur[] = {
0x42, 0x4d, 0x66, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x38, 0x00,
0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00,
0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x03, 0x00,
0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x23, 0x2e,
0x00, 0x00, 0x23, 0x2e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00,
0xe3, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe3, 0x00, 0x04, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa6, 0x01, 0x10, 0x04,
0xd7, 0x05, 0x59, 0xae, 0x5c, 0xe7, 0xde, 0xf7,
0xdf, 0xff, 0xdf, 0xff, 0xde, 0xf7, 0x5c, 0xe7,
0xd7, 0xad, 0x38, 0x06, 0x38, 0x06, 0x6d, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x4d, 0x03, 0xda, 0x06, 0xdf, 0xaf,
0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf7, 0xff, 0xaf, 0x5d, 0x07,
0x6d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0x02, 0x3c, 0x07, 0xff, 0xaf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf,
0x7d, 0x07, 0x8e, 0x03, 0x00, 0x00, 0x66, 0x01,
0xb6, 0x05, 0xff, 0xaf, 0xff, 0xff, 0xf5, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xaf, 0x79, 0x06, 0x04, 0x01, 0xcb, 0x02,
0x3c, 0x07, 0xff, 0xf7, 0xff, 0xff, 0xe0, 0xff,
0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfc, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff,
0xff, 0xf7, 0x99, 0x06, 0x04, 0x01, 0x45, 0x01,
0x59, 0xae, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff,
0xff, 0xff, 0xe2, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf7, 0xad, 0x00, 0x00, 0x00, 0x00,
0x5c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff,
0xff, 0xff, 0x5c, 0xe7, 0x00, 0x00, 0x00, 0x00,
0xde, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff,
0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xde, 0xf7, 0x00, 0x00, 0x00, 0x00,
0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x92, 0x94, 0x92, 0x94, 0x9d, 0xef, 0xff, 0xff,
0xf7, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff,
0xff, 0xff, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00,
0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff,
0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff,
0x92, 0x94, 0xb2, 0x94, 0xde, 0xf7, 0xff, 0xff,
0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00,
0xde, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff,
0xff, 0xff, 0xf5, 0xff, 0xdf, 0xff, 0xff, 0xff,
0x92, 0x94, 0x92, 0x94, 0xde, 0xf7, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xfd, 0xff,
0xff, 0xff, 0xde, 0xf7, 0x00, 0x00, 0x00, 0x00,
0x5c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff,
0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff,
0x92, 0x94, 0x92, 0x94, 0xff, 0xff, 0xff, 0xff,
0xe3, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0xff, 0xff,
0xff, 0xff, 0x5c, 0xe7, 0x00, 0x00, 0x00, 0x00,
0x75, 0xad, 0xff, 0xff, 0xfc, 0xff, 0xe0, 0xff,
0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff,
0x92, 0x94, 0x92, 0x94, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff,
0xff, 0xff, 0x75, 0xad, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xe0, 0xff, 0xfd, 0xff, 0xdf, 0xff,
0x00, 0xf8, 0xe3, 0xf8, 0xdf, 0xff, 0xff, 0xff,
0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x75, 0xad, 0xdf, 0xff, 0xff, 0xff,
0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xde, 0xff,
0x00, 0xf8, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff,
0xf9, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xdf, 0xff,
0x75, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x75, 0xad, 0xdf, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x75, 0xad,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0xad,
0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x9e, 0xf7, 0x75, 0xad, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x75, 0xad, 0x5c, 0xe7, 0xde, 0xf7,
0xdf, 0xff, 0xdf, 0xff, 0xde, 0xf7, 0x5c, 0xe7,
0x75, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
#endif /* INC_VAISSEAU_H_ */

@ -33,6 +33,10 @@
#include "stm32746g_discovery_ts.h"
#include "stdio.h"
#include "semphr.h"
#include "ennemi_v.h"
#include "ennemi_r.h"
#include "ennemi_b.h"
#include "vaisseau.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@ -42,7 +46,7 @@
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#define FACTEUR_ECRAN 1;
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
@ -77,6 +81,7 @@ osThreadId Joueur_1Handle;
osThreadId Block_EnemieHandle;
osThreadId ProjectileHandle;
osThreadId HUDHandle;
osThreadId chargeurHandle;
osMessageQId Queue_FHandle;
osMessageQId Queue_NHandle;
osMessageQId Queue_JHandle;
@ -102,14 +107,16 @@ static void MX_DMA2D_Init(void);
static void MX_CRC_Init(void);
static void MX_RNG_Init(void);
static void MX_ADC1_Init(void);
void f_GameMaster(void const *argument);
void f_Joueur_1(void const *argument);
void f_block_enemie(void const *argument);
void f_projectile(void const *argument);
void f_HUD(void const *argument);
void f_GameMaster(void const * argument);
void f_Joueur_1(void const * argument);
void f_block_enemie(void const * argument);
void f_projectile(void const * argument);
void f_HUD(void const * argument);
void f_chargeur(void const * argument);
/* USER CODE BEGIN PFP */
uint8_t proba_bernoulli(uint32_t numerateur, uint32_t denominateur);
uint8_t proba_tirrage(uint8_t nombre_valeur);
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
@ -166,9 +173,9 @@ struct Monster
int32_t x;
int32_t y;
int16_t health;
// uint8_t pbmp; // TODO c'est quoi ca ?
// uint8_t type; // TODO d'autre ennemies ?
struct Missile missile;
uint8_t* pbmp;
};
struct Collision
@ -178,9 +185,25 @@ struct Collision
uint8_t damage;
};
struct Led
{
GPIO_TypeDef* port;
uint16_t pin;
};
struct Led Leds[] = {
{LED18_GPIO_Port, LED18_Pin},
{LED17_GPIO_Port, LED17_Pin},
{LED16_GPIO_Port, LED16_Pin},
{LED15_GPIO_Port, LED15_Pin},
{LED14_GPIO_Port, LED14_Pin},
{LED13_GPIO_Port, LED13_Pin},
{LED12_GPIO_Port, LED12_Pin},
{LED11_GPIO_Port, LED11_Pin}};
// Définition des paramètres du joueurs
struct Joueur joueur = {200, 200, 1, 1, 3, {0, 0, 0, -1, MISSILE_AMI, 1, 1}};
struct Joueur joueur = {200, 200, 1, 1, 5, {0, 0, 0, -1, MISSILE_AMI, 1, 1}};
uint8_t LED = 1;
@ -188,6 +211,8 @@ uint32_t LCD_COLOR_BACKGROUND = LCD_COLOR_BLACK;
// Number of waves of enemies before the game is won.
uint8_t wave = 0;
uint8_t kill = 0;
uint8_t charge = 0;
// Tableau des monstres (8 par ligne, sur 3 ligne)
struct Monster Table_ennemis[8][3];
@ -314,11 +339,15 @@ int main(void)
osThreadDef(HUD, f_HUD, osPriorityBelowNormal, 0, 1024);
HUDHandle = osThreadCreate(osThread(HUD), NULL);
/* definition and creation of chargeur */
osThreadDef(chargeur, f_chargeur, osPriorityBelowNormal, 0, 128);
chargeurHandle = osThreadCreate(osThread(chargeur), NULL);
/* USER CODE BEGIN RTOS_THREADS */
vQueueAddToRegistry(Queue_NHandle, "Queue Missile");
vQueueAddToRegistry(Queue_JHandle, "Queue Missile");
vQueueAddToRegistry(Queue_EHandle, "Queue Missile");
vQueueAddToRegistry(Queue_FHandle, "Queue Missile");
vQueueAddToRegistry(Queue_JHandle, "Queue Joueur");
vQueueAddToRegistry(Queue_EHandle, "Queue Ennemie");
vQueueAddToRegistry(Queue_FHandle, "Queue Fin");
/* USER CODE END RTOS_THREADS */
/* Start scheduler */
@ -404,7 +433,8 @@ void SystemClock_Config(void)
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
@ -414,7 +444,7 @@ void SystemClock_Config(void)
{
Error_Handler();
}
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC | RCC_PERIPHCLK_CLK48;
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC|RCC_PERIPHCLK_CLK48;
PeriphClkInitStruct.PLLSAI.PLLSAIN = 384;
PeriphClkInitStruct.PLLSAI.PLLSAIR = 5;
PeriphClkInitStruct.PLLSAI.PLLSAIQ = 2;
@ -475,6 +505,7 @@ static void MX_ADC1_Init(void)
/* USER CODE BEGIN ADC1_Init 2 */
/* USER CODE END ADC1_Init 2 */
}
/**
@ -524,6 +555,7 @@ static void MX_ADC3_Init(void)
/* USER CODE BEGIN ADC3_Init 2 */
/* USER CODE END ADC3_Init 2 */
}
/**
@ -554,6 +586,7 @@ static void MX_CRC_Init(void)
/* USER CODE BEGIN CRC_Init 2 */
/* USER CODE END CRC_Init 2 */
}
/**
@ -591,6 +624,7 @@ static void MX_DAC_Init(void)
/* USER CODE BEGIN DAC_Init 2 */
/* USER CODE END DAC_Init 2 */
}
/**
@ -627,6 +661,7 @@ static void MX_DMA2D_Init(void)
/* USER CODE BEGIN DMA2D_Init 2 */
/* USER CODE END DMA2D_Init 2 */
}
/**
@ -688,6 +723,7 @@ static void MX_LTDC_Init(void)
/* USER CODE BEGIN LTDC_Init 2 */
/* USER CODE END LTDC_Init 2 */
}
/**
@ -713,6 +749,7 @@ static void MX_RNG_Init(void)
/* USER CODE BEGIN RNG_Init 2 */
/* USER CODE END RNG_Init 2 */
}
/**
@ -759,6 +796,7 @@ static void MX_TIM1_Init(void)
/* USER CODE BEGIN TIM1_Init 2 */
/* USER CODE END TIM1_Init 2 */
}
/**
@ -803,6 +841,7 @@ static void MX_TIM2_Init(void)
/* USER CODE BEGIN TIM2_Init 2 */
/* USER CODE END TIM2_Init 2 */
}
/**
@ -868,6 +907,7 @@ static void MX_TIM3_Init(void)
/* USER CODE END TIM3_Init 2 */
HAL_TIM_MspPostInit(&htim3);
}
/**
@ -912,6 +952,7 @@ static void MX_TIM5_Init(void)
/* USER CODE BEGIN TIM5_Init 2 */
/* USER CODE END TIM5_Init 2 */
}
/**
@ -990,6 +1031,7 @@ static void MX_TIM8_Init(void)
/* USER CODE END TIM8_Init 2 */
HAL_TIM_MspPostInit(&htim8);
}
/* FMC initialization function */
@ -1031,7 +1073,7 @@ static void MX_FMC_Init(void)
if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
{
Error_Handler();
Error_Handler( );
}
/* USER CODE BEGIN FMC_Init 2 */
@ -1062,7 +1104,7 @@ static void MX_GPIO_Init(void)
__HAL_RCC_GPIOH_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOE, LED14_Pin | LED15_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOE, LED14_Pin|LED15_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(OTG_FS_PowerSwitchOn_GPIO_Port, OTG_FS_PowerSwitchOn_Pin, GPIO_PIN_SET);
@ -1080,7 +1122,8 @@ static void MX_GPIO_Init(void)
HAL_GPIO_WritePin(LCD_DISP_GPIO_Port, LCD_DISP_Pin, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOH, LED13_Pin | LED17_Pin | LED11_Pin | LED12_Pin | LED2_Pin | LED18_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOH, LED13_Pin|LED17_Pin|LED11_Pin|LED12_Pin
|LED2_Pin|LED18_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(EXT_RST_GPIO_Port, EXT_RST_Pin, GPIO_PIN_RESET);
@ -1092,7 +1135,7 @@ static void MX_GPIO_Init(void)
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pins : ARDUINO_SCL_D15_Pin ARDUINO_SDA_D14_Pin */
GPIO_InitStruct.Pin = ARDUINO_SCL_D15_Pin | ARDUINO_SDA_D14_Pin;
GPIO_InitStruct.Pin = ARDUINO_SCL_D15_Pin|ARDUINO_SDA_D14_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
@ -1101,7 +1144,8 @@ static void MX_GPIO_Init(void)
/*Configure GPIO pins : ULPI_D7_Pin ULPI_D6_Pin ULPI_D5_Pin ULPI_D2_Pin
ULPI_D1_Pin ULPI_D4_Pin */
GPIO_InitStruct.Pin = ULPI_D7_Pin | ULPI_D6_Pin | ULPI_D5_Pin | ULPI_D2_Pin | ULPI_D1_Pin | ULPI_D4_Pin;
GPIO_InitStruct.Pin = ULPI_D7_Pin|ULPI_D6_Pin|ULPI_D5_Pin|ULPI_D2_Pin
|ULPI_D1_Pin|ULPI_D4_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
@ -1109,13 +1153,13 @@ static void MX_GPIO_Init(void)
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pins : BP2_Pin BP1_Pin */
GPIO_InitStruct.Pin = BP2_Pin | BP1_Pin;
GPIO_InitStruct.Pin = BP2_Pin|BP1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pins : LED14_Pin LED15_Pin */
GPIO_InitStruct.Pin = LED14_Pin | LED15_Pin;
GPIO_InitStruct.Pin = LED14_Pin|LED15_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
@ -1142,14 +1186,14 @@ static void MX_GPIO_Init(void)
HAL_GPIO_Init(Audio_INT_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pins : OTG_FS_PowerSwitchOn_Pin LED16_Pin */
GPIO_InitStruct.Pin = OTG_FS_PowerSwitchOn_Pin | LED16_Pin;
GPIO_InitStruct.Pin = OTG_FS_PowerSwitchOn_Pin|LED16_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pins : LED3_Pin LCD_DISP_Pin */
GPIO_InitStruct.Pin = LED3_Pin | LCD_DISP_Pin;
GPIO_InitStruct.Pin = LED3_Pin|LCD_DISP_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
@ -1175,7 +1219,7 @@ static void MX_GPIO_Init(void)
HAL_GPIO_Init(OTG_FS_OverCurrent_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pins : TP3_Pin NC2_Pin */
GPIO_InitStruct.Pin = TP3_Pin | NC2_Pin;
GPIO_InitStruct.Pin = TP3_Pin|NC2_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
@ -1190,7 +1234,8 @@ static void MX_GPIO_Init(void)
/*Configure GPIO pins : LED13_Pin LED17_Pin LED11_Pin LED12_Pin
LED2_Pin LED18_Pin */
GPIO_InitStruct.Pin = LED13_Pin | LED17_Pin | LED11_Pin | LED12_Pin | LED2_Pin | LED18_Pin;
GPIO_InitStruct.Pin = LED13_Pin|LED17_Pin|LED11_Pin|LED12_Pin
|LED2_Pin|LED18_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
@ -1219,7 +1264,7 @@ static void MX_GPIO_Init(void)
HAL_GPIO_Init(LCD_INT_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pins : PC7 PC6 */
GPIO_InitStruct.Pin = GPIO_PIN_7 | GPIO_PIN_6;
GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
@ -1235,7 +1280,7 @@ static void MX_GPIO_Init(void)
HAL_GPIO_Init(ULPI_NXT_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pins : BP_JOYSTICK_Pin RMII_RXER_Pin */
GPIO_InitStruct.Pin = BP_JOYSTICK_Pin | RMII_RXER_Pin;
GPIO_InitStruct.Pin = BP_JOYSTICK_Pin|RMII_RXER_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
@ -1249,7 +1294,7 @@ static void MX_GPIO_Init(void)
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
/*Configure GPIO pins : ULPI_STP_Pin ULPI_DIR_Pin */
GPIO_InitStruct.Pin = ULPI_STP_Pin | ULPI_DIR_Pin;
GPIO_InitStruct.Pin = ULPI_STP_Pin|ULPI_DIR_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
@ -1264,7 +1309,7 @@ static void MX_GPIO_Init(void)
HAL_GPIO_Init(EXT_RST_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pins : LCD_SCL_Pin LCD_SDA_Pin */
GPIO_InitStruct.Pin = LCD_SCL_Pin | LCD_SDA_Pin;
GPIO_InitStruct.Pin = LCD_SCL_Pin|LCD_SDA_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
@ -1272,7 +1317,7 @@ static void MX_GPIO_Init(void)
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
/*Configure GPIO pins : ULPI_CLK_Pin ULPI_D0_Pin */
GPIO_InitStruct.Pin = ULPI_CLK_Pin | ULPI_D0_Pin;
GPIO_InitStruct.Pin = ULPI_CLK_Pin|ULPI_D0_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
@ -1280,12 +1325,13 @@ static void MX_GPIO_Init(void)
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pins : PB14 PB15 */
GPIO_InitStruct.Pin = GPIO_PIN_14 | GPIO_PIN_15;
GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
/* USER CODE BEGIN 4 */
@ -1324,10 +1370,19 @@ void repopulate_ennemie_list(uint8_t wave)
Table_ennemis[idx1][idx2].missile.valide = 1;
if (proba_bernoulli(1, 3))
Table_ennemis[idx1][idx2].health = 0;
uint8_t idx_texture = proba_tirrage(3);
if (idx_texture == 0) Table_ennemis[idx1][idx2].pbmp = ennemi_b;
else if (idx_texture == 1) Table_ennemis[idx1][idx2].pbmp = ennemi_v;
else Table_ennemis[idx1][idx2].pbmp = ennemi_r;
}
}
}
void update_leds(){
for (int idx = 0; idx<=8; idx++){
HAL_GPIO_WritePin(Leds[idx].port, Leds[idx].pin, !(charge-1<idx));
}
}
/*
* @brief Encapsulation du tracer d'un rectangle
* @param pos_x
@ -1373,6 +1428,13 @@ void lcd_plot_text_line(uint16_t line, uint8_t *text, uint32_t color)
xSemaphoreGive(MutexLCDHandle);
}
void lcd_plot_bitmap(uint16_t pos_x, uint16_t pos_y,uint8_t *pbmp){
while (xSemaphoreTake(MutexLCDHandle, (TickType_t)10) != pdPASS)
;
BSP_LCD_DrawBitmap(pos_x, pos_y, pbmp);
xSemaphoreGive(MutexLCDHandle);
}
uint8_t proba_bernoulli(uint32_t numerateur, uint32_t denominateur)
{
uint32_t nombre_aleatoire;
@ -1388,6 +1450,14 @@ uint8_t proba_bernoulli(uint32_t numerateur, uint32_t denominateur)
return 1;
}
uint8_t proba_tirrage(uint8_t nombre_valeur)
{uint32_t nombre_aleatoire;
while (HAL_RNG_GenerateRandomNumber(&hrng, &nombre_aleatoire) != HAL_OK)
;
uint32_t limite = UINT32_MAX/nombre_valeur;
return (uint8_t)(nombre_aleatoire/limite);
}
uint8_t colision_missile(uint16_t m_pos_x, uint16_t m_pos_y, uint16_t o_pos_x, uint16_t o_pos_y, uint16_t o_taille_x, uint16_t o_taille_y)
{
return ((m_pos_x > o_pos_x) & (m_pos_x < o_pos_x + o_taille_x) & (m_pos_y > o_pos_y) & (m_pos_y < o_pos_y + o_taille_y));
@ -1401,7 +1471,7 @@ uint8_t colision_missile(uint16_t m_pos_x, uint16_t m_pos_y, uint16_t o_pos_x, u
* @retval None
*/
/* USER CODE END Header_f_GameMaster */
void f_GameMaster(void const *argument)
void f_GameMaster(void const * argument)
{
/* init code for LWIP */
MX_LWIP_Init();
@ -1444,7 +1514,7 @@ void f_GameMaster(void const *argument)
* @retval None
*/
/* USER CODE END Header_f_Joueur_1 */
void f_Joueur_1(void const *argument)
void f_Joueur_1(void const * argument)
{
/* USER CODE BEGIN f_Joueur_1 */
TickType_t xLastWakeTime;
@ -1455,7 +1525,8 @@ void f_Joueur_1(void const *argument)
struct Missile missile;
uint8_t bouton_relache = 1;
uint8_t bp_1_relache = 1;
uint8_t bp_2_relache = 1;
ADC_ChannelConfTypeDef sConfig3 = {0};
sConfig3.Rank = ADC_REGULAR_RANK_1;
@ -1508,7 +1579,8 @@ void f_Joueur_1(void const *argument)
if ((joueur.x > joueur.dx) && (joystick_v > centre_joystick + seuil_joystick))
joueur.x -= joueur.dx;
lcd_plot_rect(joueur.x, joueur.y, joueur_width, joueur_height, Couleur_joueur);
lcd_plot_bitmap(joueur.x, joueur.y, bmp_joueur);
//BSP_LCD_DrawBitmap(joueur.x, joueur.y, &vaisseau);
if (xQueueReceive(Queue_JHandle, &missile, 0) == pdPASS)
joueur.health = joueur.health - missile.damage;
@ -1516,18 +1588,36 @@ void f_Joueur_1(void const *argument)
if (joueur.health <= 0)
xQueueSend(Queue_FHandle, &end, 0);
if ((!HAL_GPIO_ReadPin(BP1_GPIO_Port, BP1_Pin)) && bouton_relache)
if ((!HAL_GPIO_ReadPin(BP1_GPIO_Port, BP1_Pin)) && bp_1_relache)
{
bouton_relache = 0;
bp_1_relache = 0;
missile = joueur.missile;
missile.x = joueur.x + joueur_width / 2;
missile.y = joueur.y;
xQueueSend(Queue_NHandle, &missile, 0);
HAL_GPIO_TogglePin(LED11_GPIO_Port, LED11_Pin);
}
if (HAL_GPIO_ReadPin(BP1_GPIO_Port, BP1_Pin))
bouton_relache = 1;
bp_1_relache = 1;
if ((!HAL_GPIO_ReadPin(BP2_GPIO_Port, BP2_Pin)) && bp_2_relache && (charge == 8))
{
bp_2_relache = 0;
missile = joueur.missile;
missile.x = joueur.x + joueur_width / 2;
missile.y = joueur.y;
for (int idx_tirs = -3; idx_tirs <= 3; idx_tirs++)
{
missile.dy = -3;
missile.dx = idx_tirs;
xQueueSend(Queue_NHandle, &missile, 0);
}
charge = 0;
update_leds();
}
if (HAL_GPIO_ReadPin(BP2_GPIO_Port, BP2_Pin))
bp_2_relache = 1;
vTaskDelayUntil(&xLastWakeTime, xPeriodeTache);
}
@ -1541,7 +1631,7 @@ void f_Joueur_1(void const *argument)
* @retval None
*/
/* USER CODE END Header_f_block_enemie */
void f_block_enemie(void const *argument)
void f_block_enemie(void const * argument)
{
/* USER CODE BEGIN f_block_enemie */
@ -1563,6 +1653,8 @@ void f_block_enemie(void const *argument)
while (xQueueReceive(Queue_EHandle, &collision, 0) == pdPASS)
{
Table_ennemis[collision.idx1][collision.idx2].health -= collision.damage;
if (Table_ennemis[collision.idx1][collision.idx2].health <= 0)
kill++;
}
for (int idx1 = 0; idx1 < 8; idx1++)
@ -1611,7 +1703,7 @@ void f_block_enemie(void const *argument)
if (Table_ennemis[idx1][idx2].health > 0)
{
nombre_monstre++;
lcd_plot_rect(Table_ennemis[idx1][idx2].x, Table_ennemis[idx1][idx2].y, monstre_width, monstre_height, Couleur_monstre);
lcd_plot_bitmap(Table_ennemis[idx1][idx2].x, Table_ennemis[idx1][idx2].y, Table_ennemis[idx1][idx2].pbmp);
}
}
}
@ -1627,7 +1719,7 @@ void f_block_enemie(void const *argument)
{
if (Table_ennemis[idx1][idx2].health > 0)
{
if (proba_bernoulli(wave, 32))
if (proba_bernoulli(wave, 16))
{
missile.x = Table_ennemis[idx1][idx2].x + monstre_width / 2;
missile.y = Table_ennemis[idx1][idx2].y + monstre_height;
@ -1648,13 +1740,13 @@ void f_block_enemie(void const *argument)
* @retval None
*/
/* USER CODE END Header_f_projectile */
void f_projectile(void const *argument)
void f_projectile(void const * argument)
{
/* USER CODE BEGIN f_projectile */
TickType_t xLastWakeTime;
xLastWakeTime = xTaskGetTickCount();
const TickType_t xPeriodeTache = 10 / portTICK_PERIOD_MS; // Toutes les 200 ms
const int TAILLE_LISTE_MISSILE = 100;
const int TAILLE_LISTE_MISSILE = 250;
/* Infinite loop */
struct Missile liste_missile[TAILLE_LISTE_MISSILE];
struct Missile missile = {70, 70, 0, 3, MISSILE_ENNEMI, 1, 0};
@ -1735,25 +1827,50 @@ void f_projectile(void const *argument)
* @retval None
*/
/* USER CODE END Header_f_HUD */
void f_HUD(void const *argument)
void f_HUD(void const * argument)
{
/* USER CODE BEGIN f_HUD */
TickType_t xLastWakeTime;
xLastWakeTime = xTaskGetTickCount();
const TickType_t xPeriodeTache = 100 / portTICK_PERIOD_MS; // Toutes les 200 ms
uint8_t line_hud[50] = "";
const uint8_t base[50] = "vie : %2u - vague : %2u";
uint8_t line_hud[100] = "";
const uint8_t base[100] = "vie : %2u - vague : %2u - kill : %2u";
/* Infinite loop */
for (;;)
{
sprintf(line_hud, base, (uint)joueur.health, (uint)wave);
sprintf(line_hud, base, (uint)joueur.health, (uint)wave, (uint)kill);
lcd_plot_text_line(0, line_hud, Couleur_missile);
vTaskDelayUntil(&xLastWakeTime, xPeriodeTache);
}
/* USER CODE END f_HUD */
}
/* USER CODE BEGIN Header_f_chargeur */
/**
* @brief Function implementing the chargeur thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_f_chargeur */
void f_chargeur(void const * argument)
{
/* USER CODE BEGIN f_chargeur */
TickType_t xLastWakeTime;
xLastWakeTime = xTaskGetTickCount();
const TickType_t xPeriodeTache = 5000/ 8 / portTICK_PERIOD_MS; // Toutes les 200 ms
/* Infinite loop */
for(;;)
{
if (charge < 8)
charge++;
update_leds();
vTaskDelayUntil(&xLastWakeTime, xPeriodeTache);
}
/* USER CODE END f_chargeur */
}
/**
* @brief Period elapsed callback in non blocking mode
* @note This function is called when TIM6 interrupt took place, inside
* HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
@ -1766,8 +1883,7 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
/* USER CODE BEGIN Callback 0 */
/* USER CODE END Callback 0 */
if (htim->Instance == TIM6)
{
if (htim->Instance == TIM6) {
HAL_IncTick();
}
/* USER CODE BEGIN Callback 1 */
@ -1790,7 +1906,7 @@ void Error_Handler(void)
/* USER CODE END Error_Handler_Debug */
}
#ifdef USE_FULL_ASSERT
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.

@ -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"
}

@ -17,7 +17,7 @@ FREERTOS.INCLUDE_vTaskDelayUntil=1
FREERTOS.IPParameters=Tasks01,configUSE_APPLICATION_TASK_TAG,configUSE_RECURSIVE_MUTEXES,configUSE_COUNTING_SEMAPHORES,configUSE_IDLE_HOOK,configUSE_MALLOC_FAILED_HOOK,configCHECK_FOR_STACK_OVERFLOW,configTOTAL_HEAP_SIZE,FootprintOK,Mutexes01,INCLUDE_vTaskDelayUntil,configENABLE_FPU,Queues01,configRECORD_STACK_HIGH_ADDRESS,configGENERATE_RUN_TIME_STATS
FREERTOS.Mutexes01=MutexLCD,Dynamic,NULL
FREERTOS.Queues01=Queue_F,8,enum End_type,0,Dynamic,NULL,NULL;Queue_N,8,struct Missile,0,Dynamic,NULL,NULL;Queue_J,8,uint8_t,0,Dynamic,NULL,NULL;Queue_E,8,struct Collision,0,Dynamic,NULL,NULL
FREERTOS.Tasks01=GameMaster,2,1024,f_GameMaster,Default,NULL,Dynamic,NULL,NULL;Joueur_1,1,1024,f_Joueur_1,Default,NULL,Dynamic,NULL,NULL;Block_Enemie,-2,1024,f_block_enemie,Default,NULL,Dynamic,NULL,NULL;Projectile,0,1024,f_projectile,Default,NULL,Dynamic,Dynamic,NULL;HUD,-1,1024,f_HUD,Default,NULL,Dynamic,NULL,NULL
FREERTOS.Tasks01=GameMaster,2,1024,f_GameMaster,Default,NULL,Dynamic,NULL,NULL;Joueur_1,1,1024,f_Joueur_1,Default,NULL,Dynamic,NULL,NULL;Block_Enemie,-2,1024,f_block_enemie,Default,NULL,Dynamic,NULL,NULL;Projectile,0,1024,f_projectile,Default,NULL,Dynamic,Dynamic,NULL;HUD,-1,1024,f_HUD,Default,NULL,Dynamic,NULL,NULL;chargeur,-1,128,f_chargeur,Default,NULL,Dynamic,NULL,NULL
FREERTOS.configCHECK_FOR_STACK_OVERFLOW=2
FREERTOS.configENABLE_FPU=1
FREERTOS.configGENERATE_RUN_TIME_STATS=0

@ -0,0 +1,198 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1610px" preserveAspectRatio="none" style="width:1718px;height:1610px;background:#FFFFFF;" version="1.1" viewBox="0 0 1718 1610" width="1718px" zoomAndPan="magnify"><defs><filter height="300%" id="f1niwivitcd56f" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--MD5=[b2138d38fd2f889926cdbabc36041698]
cluster HAL--><polygon fill="#FFFFFF" filter="url(#f1niwivitcd56f)" points="1189,1494,1226,1494,1233,1516.2969,1588,1516.2969,1588,1603,1189,1603,1189,1494" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="1189" x2="1233" y1="1516.2969" y2="1516.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="31" x="1193" y="1508.9951">HAL</text><!--MD5=[380d61963ebf06f3ced09062d8a05ccb]
cluster Varriables partagées--><polygon fill="#FFFFFF" filter="url(#f1niwivitcd56f)" points="166,1347,337,1347,344,1369.2969,826,1369.2969,826,1461,166,1461,166,1347" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="166" x2="344" y1="1369.2969" y2="1369.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="165" x="170" y="1361.9951">Varriables partagées</text><!--MD5=[50cca2a3b84d9b1fe6f89042962ebcf8]
cluster Fonctions globales--><polygon fill="#FFFFFF" filter="url(#f1niwivitcd56f)" points="874,1170,1028,1170,1035,1192.2969,1514,1192.2969,1514,1461,874,1461,874,1170" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="874" x2="1035" y1="1192.2969" y2="1192.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="148" x="878" y="1184.9951">Fonctions globales</text><!--MD5=[c54ac06344dfd5517d2cc56073f5db34]
entity CAN--><ellipse cx="1522" cy="1558" fill="#FEFECE" filter="url(#f1niwivitcd56f)" rx="8" ry="8" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="84" x="1480" y="1587.9951">CAN Joystick</text><!--MD5=[4fa49025eed565a6a4073ac6911b5f04]
entity LCD--><ellipse cx="1232" cy="1558" fill="#FEFECE" filter="url(#f1niwivitcd56f)" rx="8" ry="8" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="39" x="1212.5" y="1587.9951">Ecran</text><!--MD5=[99c1162a6f735b554db9dee5a8ed199a]
entity gpio--><ellipse cx="1410" cy="1558" fill="#FEFECE" filter="url(#f1niwivitcd56f)" rx="8" ry="8" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="34" x="1393" y="1587.9951">GPIO</text><!--MD5=[bd7ae48ec573126b2ac1213e9fafb3f5]
entity rng--><ellipse cx="1321" cy="1558" fill="#FEFECE" filter="url(#f1niwivitcd56f)" rx="8" ry="8" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="23" x="1309.5" y="1587.9951">rng</text><!--MD5=[1a9b3ce6b05045b91178d8f4231a8390]
entity table--><rect fill="#FEFECE" filter="url(#f1niwivitcd56f)" height="62.5938" style="stroke:#A80036;stroke-width:1.5;" width="145" x="528.5" y="1382"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="653.5" y="1387"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="651.5" y="1389"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="651.5" y="1393"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="98" x="547" y="1414.9951">«black board»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="105" x="543.5" y="1431.292">Table_ennemis</text><!--MD5=[0cfebb0c7f68f9aba321a3cfa8dd0164]
entity J--><rect fill="#FEFECE" filter="url(#f1niwivitcd56f)" height="62.5938" style="stroke:#A80036;stroke-width:1.5;" width="138" x="182" y="1382"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="300" y="1387"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="298" y="1389"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="298" y="1393"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="98" x="197" y="1414.9951">«black board»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="224" y="1431.292">joueur</text><!--MD5=[844e4d4c1f34f3126e6454dd26b63a04]
entity charge--><rect fill="#FEFECE" filter="url(#f1niwivitcd56f)" height="62.5938" style="stroke:#A80036;stroke-width:1.5;" width="138" x="355" y="1382"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="473" y="1387"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="471" y="1389"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="471" y="1393"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="98" x="370" y="1414.9951">«black board»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="50" x="394" y="1431.292">Charge</text><!--MD5=[0d13666f178f0365f3b9d8418fd1c1e3]
entity mut_lcd--><rect fill="#FEFECE" filter="url(#f1niwivitcd56f)" height="62.5938" style="stroke:#A80036;stroke-width:1.5;" width="101" x="708.5" y="1382"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="789.5" y="1387"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="787.5" y="1389"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="787.5" y="1393"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="61" x="723.5" y="1414.9951">«Mutex»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="28" x="740" y="1431.292">LCD</text><!--MD5=[7ceaf318b1a361197a469b171044c497]
entity proba--><rect fill="#FEFECE" filter="url(#f1niwivitcd56f)" height="62.5938" style="stroke:#A80036;stroke-width:1.5;" width="121" x="1129.5" y="1382"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="1230.5" y="1387"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="1228.5" y="1389"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="1228.5" y="1393"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="81" x="1144.5" y="1414.9951">«functions»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="72" x="1149" y="1431.292">Probabilité</text><!--MD5=[79235b00d271d8f8350f4c3ac7965f1c]
entity emc_lcd--><rect fill="#FEFECE" filter="url(#f1niwivitcd56f)" height="62.5938" style="stroke:#A80036;stroke-width:1.5;" width="169" x="889.5" y="1205"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="1038.5" y="1210"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="1036.5" y="1212"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="1036.5" y="1216"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="81" x="928.5" y="1237.9951">«functions»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="129" x="904.5" y="1254.292">Encapsulation LCD</text><!--MD5=[0d1205af3c125c8ca40672e585d67207]
entity rempli--><rect fill="#FEFECE" filter="url(#f1niwivitcd56f)" height="62.5938" style="stroke:#A80036;stroke-width:1.5;" width="193" x="1093.5" y="1205"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="1266.5" y="1210"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="1264.5" y="1212"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="1264.5" y="1216"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="74" x="1148" y="1237.9951">«function»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="153" x="1108.5" y="1254.292">Remplissage ennemis</text><!--MD5=[b977c112c37eb2e9f751dce6a622d122]
entity update_led--><rect fill="#FEFECE" filter="url(#f1niwivitcd56f)" height="62.5938" style="stroke:#A80036;stroke-width:1.5;" width="177" x="1321.5" y="1205"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="1478.5" y="1210"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="1476.5" y="1212"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="1476.5" y="1216"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="74" x="1368" y="1237.9951">«function»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="137" x="1336.5" y="1254.292">Mise à jour des leds</text><!--MD5=[2860dc91bb3c278e7433bdb17bd46cba]
entity Queue_J--><path d="M11,6 L103,6 C108,6 108,27.2969 108,27.2969 C108,27.2969 108,48.5938 103,48.5938 L11,48.5938 C6,48.5938 6,27.2969 6,27.2969 C6,27.2969 6,6 11,6 " fill="#FEFECE" filter="url(#f1niwivitcd56f)" style="stroke:#A80036;stroke-width:1.5;"/><path d="M103,6 C98,6 98,27.2969 98,27.2969 C98,48.5938 103,48.5938 103,48.5938 " fill="none" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="57" x="11" y="23.9951">Queue_J</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="82" x="11" y="40.292">choc joueur</text><!--MD5=[b66064b6d8238a603620e26a5f27d32b]
entity Queue_E--><path d="M437.5,1013.5 L546.5,1013.5 C551.5,1013.5 551.5,1034.7969 551.5,1034.7969 C551.5,1034.7969 551.5,1056.0938 546.5,1056.0938 L437.5,1056.0938 C432.5,1056.0938 432.5,1034.7969 432.5,1034.7969 C432.5,1034.7969 432.5,1013.5 437.5,1013.5 " fill="#FEFECE" filter="url(#f1niwivitcd56f)" style="stroke:#A80036;stroke-width:1.5;"/><path d="M546.5,1013.5 C541.5,1013.5 541.5,1034.7969 541.5,1034.7969 C541.5,1056.0938 546.5,1056.0938 546.5,1056.0938 " fill="none" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="437.5" y="1031.4951">Queue_E</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="99" x="437.5" y="1047.792">choc ennemie</text><!--MD5=[452b68ee712584d4647e69e1f093561c]
entity Queue_F--><path d="M398.5,331 L471.5,331 C476.5,331 476.5,352.2969 476.5,352.2969 C476.5,352.2969 476.5,373.5938 471.5,373.5938 L398.5,373.5938 C393.5,373.5938 393.5,352.2969 393.5,352.2969 C393.5,352.2969 393.5,331 398.5,331 " fill="#FEFECE" filter="url(#f1niwivitcd56f)" style="stroke:#A80036;stroke-width:1.5;"/><path d="M471.5,331 C466.5,331 466.5,352.2969 466.5,352.2969 C466.5,373.5938 471.5,373.5938 471.5,373.5938 " fill="none" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="62" x="398.5" y="348.9951">Queue_F</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="398.5" y="365.292">fin du jeu</text><!--MD5=[24c6dc35e45d11f37adbbd51190fb295]
entity Queue_N--><path d="M461.5,655 L598.5,655 C603.5,655 603.5,676.2969 603.5,676.2969 C603.5,676.2969 603.5,697.5938 598.5,697.5938 L461.5,697.5938 C456.5,697.5938 456.5,676.2969 456.5,676.2969 C456.5,676.2969 456.5,655 461.5,655 " fill="#FEFECE" filter="url(#f1niwivitcd56f)" style="stroke:#A80036;stroke-width:1.5;"/><path d="M598.5,655 C593.5,655 593.5,676.2969 593.5,676.2969 C593.5,697.5938 598.5,697.5938 598.5,697.5938 " fill="none" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="64" x="461.5" y="672.9951">Queue_N</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="127" x="461.5" y="689.292">nouveau projectile</text><!--MD5=[9541ec6124d24944d9f7f0794caf90a4]
entity t_gm--><rect fill="#FEFECE" filter="url(#f1niwivitcd56f)" height="127.4844" style="stroke:#A80036;stroke-width:1.5;" width="263" x="631.5" y="451"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="874.5" y="456"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="872.5" y="458"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="872.5" y="462"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="156" x="646.5" y="483.9951">Thread : game_master</text><line style="stroke:#A80036;stroke-width:1.0;" x1="632.5" x2="893.5" y1="487.2969" y2="487.2969"/><line style="stroke:#A80036;stroke-width:1.0;" x1="632.5" x2="893.5" y1="489.2969" y2="489.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="223" x="646.5" y="504.292">Bloqué en attente de messages</text><line style="stroke:#A80036;stroke-width:1.0;" x1="632.5" x2="893.5" y1="511.5938" y2="511.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="219" x="646.5" y="528.5889">gère l'apparition des porjectiles,</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="161" x="646.5" y="544.8857">gère les autres Thread,</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="173" x="646.5" y="561.1826">fait l'affichage des scores</text><!--MD5=[756fc03f1621076aaaa13cbe1a77e66e]
entity t_HUD--><rect fill="#FEFECE" filter="url(#f1niwivitcd56f)" height="143.7813" style="stroke:#A80036;stroke-width:1.5;" width="238" x="1116" y="963"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="1334" y="968"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="1332" y="970"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="1332" y="974"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="93" x="1131" y="995.9951">Thread : HUD</text><line style="stroke:#A80036;stroke-width:1.0;" x1="1117" x2="1353" y1="999.2969" y2="999.2969"/><line style="stroke:#A80036;stroke-width:1.0;" x1="1117" x2="1353" y1="1001.2969" y2="1001.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="81" x="1131" y="1016.292">T = 100 ms</text><line style="stroke:#A80036;stroke-width:1.0;" x1="1117" x2="1353" y1="1023.5938" y2="1023.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="55" x="1131" y="1040.5889">Affiche :</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="51" x="1131" y="1056.8857">- La vie,</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="170" x="1131" y="1073.1826">- Le numéro de la vague,</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="198" x="1131" y="1089.4795">- Le nombre de monstre tué.</text><!--MD5=[bbde742469f79c0a56ba4a67e4990c02]
entity t_chargeur--><rect fill="#FEFECE" filter="url(#f1niwivitcd56f)" height="94.8906" style="stroke:#A80036;stroke-width:1.5;" width="186" x="587" y="987.5"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="753" y="992.5"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="751" y="994.5"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="751" y="998.5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126" x="602" y="1020.4951">Thread : Chargeur</text><line style="stroke:#A80036;stroke-width:1.0;" x1="588" x2="772" y1="1023.7969" y2="1023.7969"/><line style="stroke:#A80036;stroke-width:1.0;" x1="588" x2="772" y1="1025.7969" y2="1025.7969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="64" x="602" y="1040.792">T = 5/8 s</text><line style="stroke:#A80036;stroke-width:1.0;" x1="588" x2="772" y1="1048.0938" y2="1048.0938"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="146" x="602" y="1065.0889">Incremente la charge</text><!--MD5=[acc3dc1ffb908345156624a4da65ff98]
entity t_j1--><rect fill="#FEFECE" filter="url(#f1niwivitcd56f)" height="143.7813" style="stroke:#A80036;stroke-width:1.5;" width="197" x="547.5" y="110"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="724.5" y="115"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="722.5" y="117"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="722.5" y="121"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="113" x="562.5" y="142.9951">Tread : joueur_1</text><line style="stroke:#A80036;stroke-width:1.0;" x1="548.5" x2="743.5" y1="146.2969" y2="146.2969"/><line style="stroke:#A80036;stroke-width:1.0;" x1="548.5" x2="743.5" y1="148.2969" y2="148.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="562.5" y="163.292">T = 5 ms</text><line style="stroke:#A80036;stroke-width:1.0;" x1="548.5" x2="743.5" y1="170.5938" y2="170.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="107" x="562.5" y="187.5889">gère le joystick,</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="108" x="562.5" y="203.8857">la vie du joueur,</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="157" x="562.5" y="220.1826">la position du joueur 1,</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="156" x="562.5" y="236.4795">et l'affichage du joueur</text><!--MD5=[62df73be7b2a179ccf4a8ae9cdbeb620]
entity t_ennemie--><rect fill="#FEFECE" filter="url(#f1niwivitcd56f)" height="94.8906" style="stroke:#A80036;stroke-width:1.5;" width="169" x="602.5" y="1189"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="751.5" y="1194"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="749.5" y="1196"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="749.5" y="1200"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="122" x="617.5" y="1221.9951">Tread : Ennemies</text><line style="stroke:#A80036;stroke-width:1.0;" x1="603.5" x2="770.5" y1="1225.2969" y2="1225.2969"/><line style="stroke:#A80036;stroke-width:1.0;" x1="603.5" x2="770.5" y1="1227.2969" y2="1227.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="81" x="617.5" y="1242.292">T = 200 ms</text><line style="stroke:#A80036;stroke-width:1.0;" x1="603.5" x2="770.5" y1="1249.5938" y2="1249.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="129" x="617.5" y="1266.5889">gère les ennemies</text><!--MD5=[544d2830dc448f0bb49970fedf76460b]
entity t_proj--><rect fill="#FEFECE" filter="url(#f1niwivitcd56f)" height="111.1875" style="stroke:#A80036;stroke-width:1.5;" width="171" x="406.5" y="775"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="557.5" y="780"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="555.5" y="782"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="555.5" y="786"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="116" x="421.5" y="807.9951">Tread : projectile</text><line style="stroke:#A80036;stroke-width:1.0;" x1="407.5" x2="576.5" y1="811.2969" y2="811.2969"/><line style="stroke:#A80036;stroke-width:1.0;" x1="407.5" x2="576.5" y1="813.2969" y2="813.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="72" x="421.5" y="828.292">T = 10 ms</text><line style="stroke:#A80036;stroke-width:1.0;" x1="407.5" x2="576.5" y1="835.5938" y2="835.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="131" x="421.5" y="852.5889">gère les projectiles</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="120" x="421.5" y="868.8857">gère les colisions</text><!--MD5=[4566f7c90fc7d40128a534bc733957c4]
link t_j1 to CAN--><path d="M744.71,182.94 C907.86,185.38 1242.45,201.18 1511,284 C1572.83,303.07 1640,286.79 1640,351.5 C1640,351.5 1640,351.5 1640,1414.5 C1640,1476.48 1572.96,1525.98 1539.95,1546.61 " fill="none" id="t_j1-to-CAN" style="stroke:#A80036;stroke-width:1.0;"/><path d="M1538.2688,1557.496 A9,9 0 0 0 1529.5202 1543.0198" style="stroke:#A80036;stroke-width:1.5;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="69" x="1641" y="835.0669">lit la valeur</text><!--MD5=[145f872e4232b79fc53d20d7471ee528]
link t_proj to Queue_E--><path d="M492,886.03 C492,925.68 492,977.56 492,1008.18 " fill="none" id="t_proj-to-Queue_E" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="492,1013.28,496,1004.28,492,1008.28,488,1004.28,492,1013.28" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="44" x="493" y="929.0669">touché</text><!--MD5=[3fc62d9f5d25a1938f56e39d302f579d]
link t_proj to Queue_J--><path d="M406.2,820.89 C310.95,809.44 165.86,785.76 130,745 C37.52,639.88 50.98,170.37 55.8,54.44 " fill="none" id="t_proj-to-Queue_J" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="56.02,49.19,51.6383,58.0105,55.8059,54.1854,59.631,58.353,56.02,49.19" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="44" x="59" y="417.0669">touché</text><!--MD5=[37e88d3088571bad0ff0500dcfc6c8b9]
link Queue_E to t_ennemie--><path d="M512.13,1056.6 C541.51,1086.65 597.04,1143.46 637.67,1185.03 " fill="none" id="Queue_E-to-t_ennemie" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="641.3,1188.75,637.8575,1179.5224,637.8004,1185.1789,632.1438,1185.1218,641.3,1188.75" style="stroke:#A80036;stroke-width:1.0;"/><!--MD5=[d768f2c87dbe9ed4b3e12ba366ba0f07]
link Queue_J to t_j1--><path d="M108.24,41.77 C204.82,66.77 415.47,121.31 542.58,154.22 " fill="none" id="Queue_J-to-t_j1" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="547.44,155.48,539.7168,149.3683,542.5969,154.2371,537.7282,157.1172,547.44,155.48" style="stroke:#A80036;stroke-width:1.0;"/><!--MD5=[63418c0d14b85510d4db28945ef11ee0]
link t_j1 to Queue_F--><path d="M547.24,204.89 C504.74,219.73 459.14,244.18 434,284 C426.32,296.16 426.24,312.17 428.23,325.55 " fill="none" id="t_j1-to-Queue_F" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="429.11,330.72,431.5357,321.1745,428.2672,325.7915,423.6501,322.5231,429.11,330.72" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="68" x="435" y="297.0669">plus de vie</text><!--MD5=[d3b41d5c960760d31a8e6d2054d6c1d6]
link t_ennemie to Queue_F--><path d="M638.83,1188.71 C625.06,1178.01 609.32,1168.03 593,1162 C574.01,1154.99 425.58,1168.04 411,1154 C187.45,938.78 371.93,490.41 422.9,378.98 " fill="none" id="t_ennemie-to-Queue_F" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="425.08,374.24,417.6896,380.7502,422.9938,378.784,424.96,384.0881,425.08,374.24" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="97" x="315" y="741.0669">plus d'ennemie</text><!--MD5=[a83bbca1d75f2bd39d4c34ad54ba3913]
link Queue_F to t_gm--><path d="M476.7,357.2 C542.03,363.69 664.7,378.88 700,404 C715.11,414.75 727.11,430.35 736.41,446.41 " fill="none" id="Queue_F-to-t_gm" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="738.96,450.95,738.0477,441.1435,736.5148,446.5887,731.0696,445.0558,738.96,450.95" style="stroke:#A80036;stroke-width:1.0;"/><!--MD5=[04079861af4c57138da428edb0d50b64]
link t_gm to Queue_N--><path d="M631.27,576.05 C615.03,585.76 599.18,596.46 585,608 C570.13,620.11 556.49,636.79 546.51,650.55 " fill="none" id="t_gm-to-Queue_N" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="543.53,654.71,552.0177,649.7142,546.4375,650.6423,545.5094,645.0621,543.53,654.71" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="144" x="586" y="621.0669">nouveau tire du joueur</text><!--MD5=[ba6c9e56622063232619a88eab2d6b76]
link t_j1 to Queue_N--><path d="M611.9,254.01 C592.95,296.55 570.71,352.26 558,404 C536.3,492.36 531.4,600.9 530.31,649.65 " fill="none" id="t_j1-to-Queue_N" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="530.2,654.73,534.3792,645.8118,530.3,649.731,526.3808,645.6518,530.2,654.73" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="167" x="559" y="417.0669">nouveau tire des ennemie</text><!--MD5=[92546dfced51ba7d2a94112243967cb4]
link Queue_N to t_proj--><path d="M524.8,698.32 C520.18,716.76 513.22,744.62 506.89,769.92 " fill="none" id="Queue_N-to-t_proj" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="505.64,774.95,511.7034,767.1889,506.8527,770.0993,503.9423,765.2486,505.64,774.95" style="stroke:#A80036;stroke-width:1.0;"/><!--MD5=[4ba196a3d16e75ebe13aa6fd0757216d]
link t_j1 to emc_lcd--><path d="M744.54,194.6 C895.06,215.1 1165,264.05 1165,351.5 C1165,351.5 1165,351.5 1165,737.5 C1165,804.22 1164.82,822.95 1143,886 C1130.11,923.25 1117.01,927.94 1099,963 C1093.15,974.38 1022.51,1129.12 990.08,1200.22 " fill="none" id="t_j1-to-emc_lcd" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="988,1204.78,995.3657,1198.2419,990.069,1200.2282,988.0828,1194.9315,988,1204.78" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="1166" y="681.0669">use</text><!--MD5=[93977f77a825d7e9f7d06639d52ac989]
link t_ennemie to emc_lcd--><path d="M771.56,1236.5 C806.86,1236.5 847.92,1236.5 883.8,1236.5 " fill="none" id="t_ennemie-to-emc_lcd" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="889.06,1236.5,880.06,1232.5,884.06,1236.5,880.06,1240.5,889.06,1236.5" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="819" y="1229.5669">use</text><!--MD5=[45578707b6683518be5b85ee32e2b9bf]
link t_proj to emc_lcd--><path d="M577.66,855.11 C641.34,875.82 727.63,910.87 790,963 C871.15,1030.83 931.22,1143.23 958.22,1200.14 " fill="none" id="t_proj-to-emc_lcd" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="960.41,1204.81,960.2016,1194.9633,958.2831,1200.2849,952.9615,1198.3664,960.41,1204.81" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="906" y="1039.5669">use</text><!--MD5=[7456b3aed8b446603555d7e0f9151b7a]
link t_gm to emc_lcd--><path d="M894.55,556.72 C945.59,581.61 992,619.6 992,675.5 C992,675.5 992,675.5 992,1036 C992,1093.41 984.51,1159.74 979.2,1199.61 " fill="none" id="t_gm-to-emc_lcd" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="978.5,1204.82,983.6718,1196.4383,979.1711,1199.8652,975.7442,1195.3646,978.5,1204.82" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="993" y="835.0669">use</text><!--MD5=[81a38e4d79a04c4765419f70c9f89bf1]
link emc_lcd to mut_lcd--><path d="M889.39,1263.1 C860.6,1275.01 829.93,1291.61 807,1314 C789.36,1331.22 777.28,1356.26 769.65,1376.77 " fill="none" id="emc_lcd-to-mut_lcd" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="767.9,1381.62,774.7227,1374.5172,769.6007,1376.9181,767.1997,1371.7961,767.9,1381.62" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="808" y="1327.0669">use</text><!--MD5=[f3192e23f6b6ea7e3cddb66c3a44ac1b]
link emc_lcd to LCD--><path d="M987.39,1268.17 C1008.88,1315.07 1054.56,1405.81 1112,1469 C1142.99,1503.09 1189.03,1532.39 1214.12,1547.03 " fill="none" id="emc_lcd-to-LCD" style="stroke:#A80036;stroke-width:1.0;"/><path d="M1224.4559,1543.192 A9,9 0 0 0 1216.0432 1557.866" style="stroke:#A80036;stroke-width:1.5;fill:none;"/><!--MD5=[5b510cc36fef449fefd102eec5939f42]
link t_gm to t_j1--><path d="M748.5,450.84 C744.51,435.41 739.92,419.01 735,404 C718.94,354.99 697.41,301.29 679.55,259.1 " fill="none" id="t_gm-to-t_j1" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="677.5,254.27,677.3318,264.1174,679.4524,258.8731,684.6967,260.9936,677.5,254.27" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="54" x="726" y="357.0669">suspend</text><!--MD5=[5508e672fdcfb87573203e5e1b3ce91a]
link t_gm to t_ennemie--><path d="M788.37,578.08 C840.43,710.82 950.29,1015.94 899,1107 C872.66,1153.77 821.67,1185.47 776.29,1205.68 " fill="none" id="t_gm-to-t_ennemie" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="771.64,1207.72,781.4887,1207.7773,776.2208,1205.7159,778.2821,1200.448,771.64,1207.72" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="54" x="891" y="835.0669">suspend</text><!--MD5=[abf0e0d4d11132f33d6cf00392d30e8b]
link t_gm to t_proj--><path d="M754.01,578.18 C749.87,594.26 743.82,610.96 735,625 C696.64,686.09 634.02,738.14 581.96,774.45 " fill="none" id="t_gm-to-t_proj" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="577.6,777.47,587.2709,775.6061,581.7022,774.6113,582.697,769.0426,577.6,777.47" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="54" x="714" y="681.0669">suspend</text><!--MD5=[946d33ff46947bb8c51034d1cae9879c]
link t_j1 to J--><path d="M547.15,193.05 C456.1,205.24 319.13,231.13 211,284 C134.92,321.19 104.04,329.93 63,404 C17.1,486.84 37,520.79 37,615.5 C37,615.5 37,615.5 37,1237.5 C37,1311.76 115.17,1360.18 177.02,1386.87 " fill="none" id="t_j1-to-J" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="181.82,1388.91,175.1044,1381.7058,177.2191,1386.9525,171.9724,1389.0672,181.82,1388.91" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="30" x="38" y="741.0669">ecris</text><!--MD5=[3191d9b1d452ad3043f63b91a0cecbdb]
link t_ennemie to table--><path d="M663.95,1284.4 C649.61,1313.59 631.46,1350.53 618.33,1377.23 " fill="none" id="t_ennemie-to-table" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="616.11,1381.76,623.6644,1375.4409,618.3117,1377.2708,616.4817,1371.9182,616.11,1381.76" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="30" x="651" y="1327.0669">ecris</text><!--MD5=[f08fd9cf91e954e90073180a4921d1bd]
link t_proj to J--><path d="M440.88,886.06 C433.06,895.67 425.45,905.86 419,916 C406.72,935.31 406.23,941.65 398,963 C339.52,1114.6 283.61,1300.44 261.24,1376.98 " fill="none" id="t_proj-to-J" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="259.82,1381.86,266.18,1374.34,261.22,1377.06,258.5,1372.1,259.82,1381.86" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="13" x="338" y="1150.0669">lis</text><!--MD5=[293d72948d285c8e99a9299f2c13c748]
link t_proj to table--><path d="M451.23,886.16 C436.8,908.74 422.34,935.93 415,963 C398.25,1024.77 406.38,1043.58 415,1107 C425.99,1187.88 421.77,1214.15 464,1284 C477.1,1305.68 524.75,1348.36 560.19,1378.58 " fill="none" id="t_proj-to-table" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="564.01,1381.83,559.7441,1372.9529,560.2007,1378.5913,554.5623,1379.0479,564.01,1381.83" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="13" x="422" y="1150.0669">lis</text><!--MD5=[d66047aacef3cb2a95d8d42b86c60923]
link t_gm to rempli--><path d="M894.79,557.14 C929.67,570.85 966.38,587.86 998,608 C1094.65,669.56 1326.77,857.71 1372,963 C1397.26,1021.8 1401.44,1050.17 1372,1107 C1364.77,1120.95 1293.45,1168.93 1242.27,1202.14 " fill="none" id="t_gm-to-rempli" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="1238,1204.9,1247.7276,1203.3594,1242.1952,1202.1796,1243.375,1196.6471,1238,1204.9" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="1320" y="835.0669">use</text><!--MD5=[d0be5ad3330e403936c1a81c799219b6]
link rempli to table--><path d="M1118.02,1268.04 C1104.16,1273.58 1089.7,1279.14 1076,1284 C1008.16,1308.06 992.01,1319.21 921,1331 C895.77,1335.19 714.93,1330 691,1339 C669.07,1347.25 648.51,1363.15 632.59,1378.05 " fill="none" id="rempli-to-table" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="628.65,1381.81,637.9252,1378.4978,632.27,1378.361,632.4068,1372.7058,628.65,1381.81" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="30" x="992" y="1327.0669">ecris</text><!--MD5=[b5aae1ec9aacd4863ed3aea5ff6d246c]
link rempli to proba--><path d="M1190,1268.38 C1190,1298.62 1190,1344.67 1190,1376.54 " fill="none" id="rempli-to-proba" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="1190,1381.93,1194,1372.93,1190,1376.93,1186,1372.93,1190,1381.93" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="1191" y="1327.0669">use</text><!--MD5=[6246f36b3839376fbd73b8bc160d84b7]
link t_ennemie to proba--><path d="M771.5,1279.75 C808,1297.03 851.54,1316.35 892,1331 C970.36,1359.38 1063.38,1383.33 1124.4,1397.78 " fill="none" id="t_ennemie-to-proba" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="1129.47,1398.97,1121.6215,1393.0201,1124.6022,1397.828,1119.7943,1400.8086,1129.47,1398.97" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="893" y="1327.0669">use</text><!--MD5=[adc317ba3657a43c71747efc3eb24a48]
link t_j1 to charge--><path d="M547.25,198.17 C410.2,222.07 179,273.87 179,351.5 C179,351.5 179,351.5 179,617.5 C179,711.9 166,735.1 166,829.5 C166,829.5 166,829.5 166,1146.5 C166,1177.67 313.83,1314.07 385.69,1378.52 " fill="none" id="t_j1-to-charge" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="389.47,1381.91,385.4391,1372.9238,385.7472,1378.5723,380.0987,1378.8804,389.47,1381.91" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="45" x="173" y="741.0669">lis/ecrit</text><!--MD5=[5125ac1455f3ac8fbb725ec0ba70d193]
link t_chargeur to charge--><path d="M616.57,1082.56 C589.85,1104.48 559.93,1132.3 538,1162 C487.13,1230.89 451.61,1326.09 434.89,1377.01 " fill="none" id="t_chargeur-to-charge" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="433.33,1381.79,439.9114,1374.463,434.8725,1377.0339,432.3017,1371.995,433.33,1381.79" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="45" x="539" y="1241.0669">lis/ecrit</text><!--MD5=[2c0b859c09233666d13c9d1e9102898c]
link t_j1 to update_led--><path d="M744.64,182.58 C964.2,184.3 1474,204.16 1474,351.5 C1474,351.5 1474,351.5 1474,677.5 C1474,875.88 1433.58,1111.37 1416.98,1199.69 " fill="none" id="t_j1-to-update_led" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="1416.02,1204.79,1421.6215,1196.6892,1416.9483,1199.8769,1413.7606,1195.2038,1416.02,1204.79" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="1475" y="681.0669">use</text><!--MD5=[e629d0f8b39bd234f1689df73c77ed07]
link t_chargeur to update_led--><path d="M748.14,1082.62 C764.52,1092.02 782.39,1100.88 800,1107 C946.58,1157.97 991.48,1139.62 1146,1154 C1181,1157.26 1270.72,1150.66 1304,1162 C1328.83,1170.46 1353.13,1186.57 1372.19,1201.55 " fill="none" id="t_chargeur-to-update_led" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="1376.42,1204.93,1371.8676,1196.1964,1372.5073,1201.817,1366.8867,1202.4567,1376.42,1204.93" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="1147" y="1150.0669">use</text><!--MD5=[bb569e0092165c675d89de77b4ef6b61]
link t_j1 to gpio--><path d="M744.75,188.93 C932.32,201.23 1332.85,232.71 1461,284 C1507.75,302.71 1552,301.14 1552,351.5 C1552,351.5 1552,351.5 1552,1414.5 C1552,1444.03 1538.01,1451.81 1514,1469 C1491.81,1484.88 1476.84,1469.63 1455,1486 C1436.8,1499.64 1424.08,1522.99 1416.92,1539.17 " fill="none" id="t_j1-to-gpio" style="stroke:#A80036;stroke-width:1.0;"/><path d="M1422.0007,1548.9994 A9,9 0 0 0 1406.3859 1542.4973" style="stroke:#A80036;stroke-width:1.5;fill:none;"/><!--MD5=[0abb3585fd9d2e10f4d20bb73aacf44f]
link update_led to gpio--><path d="M1410,1268.14 C1410,1333.77 1410,1486.25 1410,1538.81 " fill="none" id="update_led-to-gpio" style="stroke:#A80036;stroke-width:1.0;"/><path d="M1418.4572,1545.8618 A9,9 0 0 0 1401.5428 1545.8618" style="stroke:#A80036;stroke-width:1.5;fill:none;"/><!--MD5=[79aab9e1324045bb650ade94b2b7c328]
link t_HUD to emc_lcd--><path d="M1215.54,1107.14 C1207.19,1125.21 1195.44,1142.69 1179,1154 C1160.09,1167.01 1097.56,1154.11 1076,1162 C1052.18,1170.72 1028.97,1186.67 1010.72,1201.49 " fill="none" id="t_HUD-to-emc_lcd" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="1006.67,1204.83,1016.1564,1202.1828,1010.5251,1201.646,1011.062,1196.0146,1006.67,1204.83" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="1197" y="1150.0669">use</text><!--MD5=[86447da9017ed33d3a418336ea202ed5]
link proba to rng--><path d="M1232.76,1445.05 C1247.71,1456.88 1264,1471.14 1277,1486 C1291.59,1502.67 1304.43,1524.72 1312.42,1539.8 " fill="none" id="proba-to-rng" style="stroke:#A80036;stroke-width:1.0;"/><path d="M1323.2565,1542.3778 A9,9 0 0 0 1308.2107 1550.106" style="stroke:#A80036;stroke-width:1.5;fill:none;"/><!--MD5=[d2eccdec102014a3301bb2b387040ec9]
@startuml Architecture_projet
package "HAL" {
interface "CAN Joystick" as CAN
interface "Ecran" as LCD
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
package "Varriables partagées" {
component "Table_ennemis" as table <<black board>>
component "joueur" as J <<black board>>
component "Charge" as charge <<black board>>
component "LCD" as mut_lcd <<Mutex>>
}
package "Fonctions globales"{
component "Probabilité" as proba <<functions>>
component "Encapsulation LCD" as emc_lcd <<functions>>
component "Remplissage ennemis" as rempli <<function>>
component "Mise à jour des leds" as update_led <<function>>
}
component t_gm[
Thread : game_master
===
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 = 5 ms
- - -
gère le joystick,
la vie du joueur,
la position du joueur 1,
et l'affichage du joueur
]
component t_ennemie[
Tread : Ennemies
===
T = 200 ms
- - -
gère les ennemies
]
component t_proj[
Tread : projectile
===
T = 10 ms
- - -
gère les projectiles
gère les colisions
]
[t_j1] - -( CAN : lit la valeur
[t_proj] - -> Queue_E : touché
[t_proj] - -> Queue_J : touché
Queue_E - -> [t_ennemie]
Queue_J - -> [t_j1]
[t_j1] - -> Queue_F : plus de vie
[t_ennemie] - -> Queue_F : plus d'ennemie
Queue_F - -> [t_gm]
[t_gm] - -> Queue_N : nouveau tire du joueur
[t_j1] - -> Queue_N : nouveau tire des ennemie
Queue_N - -> [t_proj]
[t_j1] ..> emc_lcd : use
[t_ennemie] ..> emc_lcd : use
[t_proj] ..> emc_lcd : use
[t_gm] ..> emc_lcd : use
emc_lcd .> mut_lcd : use
emc_lcd - -( LCD
[t_gm]..>[t_j1] : suspend
[t_gm]..>[t_ennemie] : suspend
[t_gm]..>[t_proj] : suspend
[t_j1] ..> J : ecris
[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
PlantUML version 1.2021.7(Sun May 23 14:40:07 CEST 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: fr
Country: FR
--></g></svg>

After

Width:  |  Height:  |  Size: 43 KiB

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="549px" preserveAspectRatio="none" style="width:1106px;height:549px;background:#FFFFFF;" version="1.1" viewBox="0 0 1106 549" width="1106px" zoomAndPan="magnify"><defs><filter height="300%" id="f1j38mcczfhxq8" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--MD5=[f35b8d93951ba498799a84be5600c0ca]
class Joueur--><rect codeLine="1" fill="#FEFECE" filter="url(#f1j38mcczfhxq8)" height="137.6328" id="Joueur" style="stroke:#A80036;stroke-width:1.5;" width="118" x="556.5" y="7"/><ellipse cx="592.2" cy="23" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M595.1688,28.6406 Q594.5906,28.9375 593.95,29.0781 Q593.3094,29.2344 592.6063,29.2344 Q590.1063,29.2344 588.7781,27.5938 Q587.4656,25.9375 587.4656,22.8125 Q587.4656,19.6875 588.7781,18.0313 Q590.1063,16.375 592.6063,16.375 Q593.3094,16.375 593.95,16.5313 Q594.6063,16.6875 595.1688,16.9844 L595.1688,19.7031 Q594.5438,19.125 593.95,18.8594 Q593.3563,18.5781 592.7313,18.5781 Q591.3875,18.5781 590.7,19.6563 Q590.0125,20.7188 590.0125,22.8125 Q590.0125,24.9063 590.7,25.9844 Q591.3875,27.0469 592.7313,27.0469 Q593.3563,27.0469 593.95,26.7813 Q594.5438,26.5 595.1688,25.9219 L595.1688,28.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="40" x="610.8" y="27.1543">Joueur</text><line style="stroke:#A80036;stroke-width:1.5;" x1="557.5" x2="673.5" y1="39" y2="39"/><ellipse cx="567.5" cy="50" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="48" x="576.5" y="53.2104">int32_t x</text><ellipse cx="567.5" cy="62.8047" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="48" x="576.5" y="66.0151">int32_t y</text><ellipse cx="567.5" cy="75.6094" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="48" x="576.5" y="78.8198">int8_t dx</text><ellipse cx="567.5" cy="88.4141" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="48" x="576.5" y="91.6245">int8_t dy</text><ellipse cx="567.5" cy="101.2188" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="70" x="576.5" y="104.4292">int8_t health</text><ellipse cx="567.5" cy="114.0234" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="84" x="576.5" y="117.2339">Missile missile</text><line style="stroke:#A80036;stroke-width:1.0;" x1="557.5" x2="673.5" y1="123.8281" y2="123.8281"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="106" x="562.5" y="138.0386">modelise le joueur</text><!--MD5=[08e6eb70297d7f82cbb2c0ecd9e67c76]
class Missile--><rect codeLine="12" fill="#FEFECE" filter="url(#f1j38mcczfhxq8)" height="150.4375" id="Missile" style="stroke:#A80036;stroke-width:1.5;" width="155" x="670" y="222"/><ellipse cx="722.75" cy="238" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M725.7188,243.6406 Q725.1406,243.9375 724.5,244.0781 Q723.8594,244.2344 723.1563,244.2344 Q720.6563,244.2344 719.3281,242.5938 Q718.0156,240.9375 718.0156,237.8125 Q718.0156,234.6875 719.3281,233.0313 Q720.6563,231.375 723.1563,231.375 Q723.8594,231.375 724.5,231.5313 Q725.1563,231.6875 725.7188,231.9844 L725.7188,234.7031 Q725.0938,234.125 724.5,233.8594 Q723.9063,233.5781 723.2813,233.5781 Q721.9375,233.5781 721.25,234.6563 Q720.5625,235.7188 720.5625,237.8125 Q720.5625,239.9063 721.25,240.9844 Q721.9375,242.0469 723.2813,242.0469 Q723.9063,242.0469 724.5,241.7813 Q725.0938,241.5 725.7188,240.9219 L725.7188,243.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="41" x="743.25" y="242.1543">Missile</text><line style="stroke:#A80036;stroke-width:1.5;" x1="671" x2="824" y1="254" y2="254"/><ellipse cx="681" cy="265" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="48" x="690" y="268.2104">int16_t x</text><ellipse cx="681" cy="277.8047" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="48" x="690" y="281.0151">int16_t y</text><ellipse cx="681" cy="290.6094" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="48" x="690" y="293.8198">int8_t dx</text><ellipse cx="681" cy="303.4141" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="48" x="690" y="306.6245">int8_t dy</text><ellipse cx="681" cy="316.2188" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="129" x="690" y="319.4292">Camps_missile equipe</text><ellipse cx="681" cy="329.0234" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="88" x="690" y="332.2339">uint8_t damage</text><ellipse cx="681" cy="341.8281" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="75" x="690" y="345.0386">uint8_t valide</text><line style="stroke:#A80036;stroke-width:1.0;" x1="671" x2="824" y1="351.6328" y2="351.6328"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="129" x="676" y="365.8433">modelise les missiles.</text><!--MD5=[d2c4278637bdc93ab6ebd71329cfa63c]
class Monster--><rect codeLine="24" fill="#FEFECE" filter="url(#f1j38mcczfhxq8)" height="112.0234" id="Monster" style="stroke:#A80036;stroke-width:1.5;" width="148" x="805.5" y="20"/><ellipse cx="849.75" cy="36" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M852.7188,41.6406 Q852.1406,41.9375 851.5,42.0781 Q850.8594,42.2344 850.1563,42.2344 Q847.6563,42.2344 846.3281,40.5938 Q845.0156,38.9375 845.0156,35.8125 Q845.0156,32.6875 846.3281,31.0313 Q847.6563,29.375 850.1563,29.375 Q850.8594,29.375 851.5,29.5313 Q852.1563,29.6875 852.7188,29.9844 L852.7188,32.7031 Q852.0938,32.125 851.5,31.8594 Q850.9063,31.5781 850.2813,31.5781 Q848.9375,31.5781 848.25,32.6563 Q847.5625,33.7188 847.5625,35.8125 Q847.5625,37.9063 848.25,38.9844 Q848.9375,40.0469 850.2813,40.0469 Q850.9063,40.0469 851.5,39.7813 Q852.0938,39.5 852.7188,38.9219 L852.7188,41.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="51" x="870.25" y="40.1543">Monster</text><line style="stroke:#A80036;stroke-width:1.5;" x1="806.5" x2="952.5" y1="52" y2="52"/><ellipse cx="816.5" cy="63" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="48" x="825.5" y="66.2104">int32_t x</text><ellipse cx="816.5" cy="75.8047" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="48" x="825.5" y="79.0151">int32_t y</text><ellipse cx="816.5" cy="88.6094" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="77" x="825.5" y="91.8198">int16_t health</text><ellipse cx="816.5" cy="101.4141" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;fill:none;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="84" x="825.5" y="104.6245">Missile missile</text><line style="stroke:#A80036;stroke-width:1.0;" x1="806.5" x2="952.5" y1="111.2188" y2="111.2188"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="136" x="811.5" y="125.4292">modelise les monstres.</text><!--MD5=[41178c8a85c8951a5fc67ad610e8f0cf]
class Collision--><rect codeLine="33" fill="#FEFECE" filter="url(#f1j38mcczfhxq8)" height="99.2188" id="Collision" style="stroke:#A80036;stroke-width:1.5;" width="262" x="28.5" y="26.5"/><ellipse cx="129.75" cy="42.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M132.7188,48.1406 Q132.1406,48.4375 131.5,48.5781 Q130.8594,48.7344 130.1563,48.7344 Q127.6563,48.7344 126.3281,47.0938 Q125.0156,45.4375 125.0156,42.3125 Q125.0156,39.1875 126.3281,37.5313 Q127.6563,35.875 130.1563,35.875 Q130.8594,35.875 131.5,36.0313 Q132.1563,36.1875 132.7188,36.4844 L132.7188,39.2031 Q132.0938,38.625 131.5,38.3594 Q130.9063,38.0781 130.2813,38.0781 Q128.9375,38.0781 128.25,39.1563 Q127.5625,40.2188 127.5625,42.3125 Q127.5625,44.4063 128.25,45.4844 Q128.9375,46.5469 130.2813,46.5469 Q130.9063,46.5469 131.5,46.2813 Q132.0938,46 132.7188,45.4219 L132.7188,48.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="51" x="150.25" y="46.6543">Collision</text><line style="stroke:#A80036;stroke-width:1.5;" x1="29.5" x2="289.5" y1="58.5" y2="58.5"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="65" x="34.5" y="72.7104">uint8_t idx1</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="65" x="34.5" y="85.5151">uint8_t idx2</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="88" x="34.5" y="98.3198">uint8_t damage</text><line style="stroke:#A80036;stroke-width:1.0;" x1="29.5" x2="289.5" y1="104.9141" y2="104.9141"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="250" x="34.5" y="119.1245">décrit les colision entre missile et monstre.</text><!--MD5=[d71233bb92ed4f19a8ed5030eb1ddf0f]
class Camps_missile--><rect codeLine="41" fill="#FEFECE" filter="url(#f1j38mcczfhxq8)" height="86.4141" id="Camps_missile" style="stroke:#A80036;stroke-width:1.5;" width="167" x="664" y="449"/><ellipse cx="699.25" cy="465" fill="#EB937F" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M703.3594,471 L695.6406,471 L695.6406,458.6094 L703.3594,458.6094 L703.3594,460.7656 L698.0938,460.7656 L698.0938,463.4375 L702.8594,463.4375 L702.8594,465.5938 L698.0938,465.5938 L698.0938,468.8438 L703.3594,468.8438 L703.3594,471 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="90" x="717.75" y="469.1543">Camps_missile</text><line style="stroke:#A80036;stroke-width:1.5;" x1="665" x2="830" y1="481" y2="481"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="69" x="670" y="495.2104">MISSILE_AMI</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="92" x="670" y="508.0151">MISSILE_ENNEMI</text><line style="stroke:#A80036;stroke-width:1.0;" x1="665" x2="830" y1="514.6094" y2="514.6094"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="155" x="670" y="528.8198">décrit le camps du missile.</text><!--MD5=[f6789e155cb18b37a1aa58e36deffb2b]
class End_type--><rect codeLine="48" fill="#FEFECE" filter="url(#f1j38mcczfhxq8)" height="86.4141" id="End_type" style="stroke:#A80036;stroke-width:1.5;" width="195" x="326" y="33"/><ellipse cx="390.75" cy="49" fill="#EB937F" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M394.8594,55 L387.1406,55 L387.1406,42.6094 L394.8594,42.6094 L394.8594,44.7656 L389.5938,44.7656 L389.5938,47.4375 L394.3594,47.4375 L394.3594,49.5938 L389.5938,49.5938 L389.5938,52.8438 L394.8594,52.8438 L394.8594,55 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="57" x="411.25" y="53.1543">End_type</text><line style="stroke:#A80036;stroke-width:1.5;" x1="327" x2="520" y1="65" y2="65"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="110" x="332" y="79.2104">END_TABLEAU_VIDE</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="109" x="332" y="92.0151">END_MORT_JOUEUR</text><line style="stroke:#A80036;stroke-width:1.0;" x1="327" x2="520" y1="98.6094" y2="98.6094"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="183" x="332" y="112.8198">décrit le type de fin de la partie.</text><!--MD5=[af793d46a15a2d07d16f100b44a69fb5]
class Sens_ennemie--><rect codeLine="55" fill="#FEFECE" filter="url(#f1j38mcczfhxq8)" height="86.4141" id="Sens_ennemie" style="stroke:#A80036;stroke-width:1.5;" width="305" x="7" y="254"/><ellipse cx="109.75" cy="270" fill="#EB937F" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M113.8594,276 L106.1406,276 L106.1406,263.6094 L113.8594,263.6094 L113.8594,265.7656 L108.5938,265.7656 L108.5938,268.4375 L113.3594,268.4375 L113.3594,270.5938 L108.5938,270.5938 L108.5938,273.8438 L113.8594,273.8438 L113.8594,276 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="91" x="130.25" y="274.1543">Sens_ennemie</text><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="311" y1="286" y2="286"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="41" x="13" y="300.2104">DROITE</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="47" x="13" y="313.0151">GAUCHE</text><line style="stroke:#A80036;stroke-width:1.0;" x1="8" x2="311" y1="319.6094" y2="319.6094"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="293" x="13" y="333.8198">décrit le sens de déplacement actuel des ennemis.</text><!--MD5=[0e4ce9d744c94cce74613a0becc3b150]
reverse link Joueur to Missile--><path codeLine="62" d="M603.73,158.46 C604.77,170.11 607.41,181.65 612.5,192 C625.04,217.49 647.16,238.48 669.91,254.77 " fill="none" id="Joueur-backto-Missile" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="603.19,145.3,599.4373,151.4577,603.678,157.2901,607.4307,151.1324,603.19,145.3" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="222" x="613.5" y="188.0669">décrit le missile de base du joueur.</text><!--MD5=[c95a0a309839ea8468465291be85ab5c]
reverse link Monster to Missile--><path codeLine="64" d="M861.54,144.86 C855.94,160.87 848.97,177.49 840.5,192 C834.58,202.15 827.56,212.18 820.08,221.78 " fill="none" id="Monster-backto-Missile" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="865.73,132.2,860.0471,136.639,861.959,143.5921,867.6419,139.153,865.73,132.2" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="250" x="848.5" y="188.0669">décrit le missile de base des monstres.</text><!--MD5=[04a30467d4c91209488a7dcb2c8ad034]
reverse link Missile to Camps_missile--><path codeLine="65" d="M747.5,385.35 C747.5,407.47 747.5,430.24 747.5,448.95 " fill="none" id="Missile-backto-Camps_missile" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="747.5,372.07,743.5,378.07,747.5,384.07,751.5,378.07,747.5,372.07" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="250" x="748.5" y="415.0669">décrit le missile de base des monstres.</text><!--MD5=[e1d035e3673a4865ed0b565819527054]
link Collision to End_type--><!--MD5=[40a52f1c7779689dc21c4896fcb686fc]
link Collision to Sens_ennemie--><!--MD5=[9333454b24ece9ac4e094dfcf6c2b8af]
@startuml class
class Joueur {
+ int32_t x
+ int32_t y
+ int8_t dx
+ int8_t dy
+ int8_t health
+ Missile missile
- - -
modelise le joueur
}
class Missile{
+ int16_t x
+ int16_t y
+ int8_t dx
+ int8_t dy
+ Camps_missile equipe
+ uint8_t damage
+ uint8_t valide
- - -
modelise les missiles.
}
class Monster{
+ int32_t x
+ int32_t y
+ int16_t health
+ Missile missile
- - -
modelise les monstres.
}
class Collision{
uint8_t idx1
uint8_t idx2
uint8_t damage
- - -
décrit les colision entre missile et monstre.
}
enum Camps_missile{
MISSILE_AMI
MISSILE_ENNEMI
- - -
décrit le camps du missile.
}
enum End_type{
END_TABLEAU_VIDE
END_MORT_JOUEUR
- - -
décrit le type de fin de la partie.
}
enum Sens_ennemie{
DROITE
GAUCHE
- - -
décrit le sens de déplacement actuel des ennemis.
}
Joueur *- - Missile : décrit le missile de base du joueur.
Monster *- - Missile : décrit le missile de base des monstres.
Missile *- - Camps_missile : décrit le missile de base des monstres.
@enduml
PlantUML version 1.2021.7(Sun May 23 14:40:07 CEST 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: fr
Country: FR
--></g></svg>

After

Width:  |  Height:  |  Size: 18 KiB

@ -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

@ -0,0 +1,17 @@
# Génerateur de nombre aléatoire
## Utilisation du pérriphérique :
On utilise le code suivant, car il n'y a pas toujours de nouveau nombre aléatoire disponible dans le buffer.
``` C
uint32_t nombre_aleatoire;
while (HAL_RNG_GenerateRandomNumber(&hrng, &nombre_aleatoire) != HAL_OK)
;
```
## Fonctions utilitaires
On définit deux fonctions pour la suite :
- ```uint8_t proba_bernoulli(uint32_t numerateur, uint32_t denominateur)``` qui revoit ```1``` avec une probabilité de $\frac{\text{numerateur}}{\text{denominateur}}$, ```0``` sinon,
- ```uint8_t proba_tirrage(uint8_t nombre_valeur)``` qui renvoit une nombre entre $1$ et $\text{nombre_valeur}$ avec une probabilité uniforme, utile pour tirer un objet au hasard dans un liste.
Loading…
Cancel
Save