Documentation basique

This commit is contained in:
Leopold Clement 2021-07-17 19:30:16 +02:00
parent 470eb1b678
commit d352555b58
18 changed files with 563 additions and 30 deletions

3
.gitignore vendored
View file

@ -1,3 +1,6 @@
Debug/*
debug
Debug/
out/*
site/*

View file

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

View file

@ -1,26 +1,61 @@
@startuml Architecture projet
@startuml Architecture_projet
package "HAL" {
interface "CAN Joystick" as CAN
interface "Ecran" as LCD
interface "Ethernet" as ether
interface "GPIO" as gpio
interface "rng" as rng
}
Queue "Queue_J\nchoc joueur" as Queue_J
Queue "Queue_E\nchoc ennemie" as Queue_E
Queue "Queue_F\nfin du jeu" as Queue_F
Queue "Queue_N\nnouveau projectile" as Queue_N
component "Table_ennemis" as table
component "joueur" as J
package "Varriables partagées" {
component "Table_ennemis" as table <<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,
@ -30,14 +65,14 @@ et l'affichage du joueur
component t_ennemie[
Tread : Ennemies
===
T = 20 ms
T = 200 ms
---
gère les ennemies
]
component t_proj[
Tread : projectile
===
T = 20 ms
T = 10 ms
---
gère les projectiles
gère les colisions
@ -54,12 +89,13 @@ Queue_F --> [t_gm]
[t_j1] --> Queue_N : nouveau tire des ennemie
Queue_N --> [t_proj]
[t_j1] --( LCD
[t_ennemie] --( LCD
[t_proj] --( LCD
[t_gm] --( LCD
[t_j1] ..> emc_lcd : use
[t_ennemie] ..> emc_lcd : use
[t_proj] ..> emc_lcd : use
[t_gm] ..> emc_lcd : use
[t_gm] --( ether
emc_lcd .> mut_lcd : use
emc_lcd --( LCD
[t_gm]..>[t_j1] : suspend
[t_gm]..>[t_ennemie] : suspend
@ -69,4 +105,23 @@ Queue_N --> [t_proj]
[t_ennemie] ..> table : ecris
[t_proj] ..> J : lis
[t_proj] ..> table : lis
t_gm ..> rempli : use
rempli ..> table : ecris
rempli ..> proba : use
t_ennemie ..> proba : use
t_j1 ..> charge : lis/ecrit
t_chargeur ..> charge : lis/ecrit
t_j1 ..> update_led : use
t_chargeur ..> update_led : use
t_j1 --( gpio
update_led --( gpio
t_HUD ..> emc_lcd : use
proba --( rng
@enduml

View file

@ -46,7 +46,7 @@
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#define FACTEUR_ECRAN 1;
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/

View file

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

View file

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

36
docs/archi.md Normal file
View file

@ -0,0 +1,36 @@
# Architecture du programme
Le programe comporte plusieurs composants. Il y a :
- des [threads](thread.md)
- des queues, pour comuniquer entre les threads,
- des varriables partagées (type black board),
- un mutex, pour gérer l'acces à l'écran
- des [classes](class.md)
- des pérriférique:
- L'[écran](lcd.md)
- Le [générateur de nombre aléatoire](rng.md)
- Les [leds](led.md)
- Le [joystick](joystick.md)
## Diagramme des composants :
Les composants intéragicent de la manière suivante :
![Schéma des composants](Architecture_projet.svg)
## Principales variables :
Les principales variables sont :
- ```joueur``` qui représente l'entier joueur et contient toutes les informations nécéssaires,
- ```Table_ennemis``` qui contient tous les monstres ainsi que leurs informations.

23
docs/class.md Normal file
View file

@ -0,0 +1,23 @@
# Classe
Les classes utilisées sont les suivantes :
![Diagramme de classes](class.svg)
## Classe de representation
Pour representer les élements dans le jeu, on utilise les classes :
- ```Joueur``` qui n'est instancier qu'une seule fois, et qui represente le joueur,
- ```Monster``` qui represente les monstres,
- ```Missile``` qui represente les projectiles.
Des instances de la classe ```Missile``` sont memebres des deux autres classes car elles representent les projeciles de basse.
De plus, les threads ```Joueur_1``` et ```Block_Enemie``` envoie des objet ```Missile``` dans la ```queue_N``` vers le thread ```Projectile``` pour lui signaler les nouveaux missiles à simuler.
## Classe de messagerie
Les classes utiles pour les messages sont ```struct Collision``` qui peremt de transmetre toutes les informations relatives à un choc avec un monstre en même temps, et la class ```enum End_Type``` qui décrit le type de fin de vague que l'on rencontre (défaite des monstre ou du joueur).

89
docs/class.svg Normal file
View file

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

5
docs/extra.css Normal file
View file

@ -0,0 +1,5 @@
:root {
--md-primary-fg-color: #00778B;
--md-primary-fg-color--light: #ECB7B7;
--md-primary-fg-color--dark: #90030C;
}

View file

@ -1,19 +1,13 @@
# Welcome to MkDocs
# Space Invader
For full documentation visit [mkdocs.org](https://www.mkdocs.org).
Projet du second semetre de :
:toc:
* [Léopold Clément](mail:leopold.clement@ens-paris-saclay.fr)
## Commands
* [Thomas Omarini](mail:thomas.omarini@ens-paris-saclay.fr)
* `mkdocs new [dir-name]` - Create a new project.
* `mkdocs serve` - Start the live-reloading docs server.
* `mkdocs build` - Build the documentation site.
* `mkdocs -h` - Print help message and exit.
Si vous avez des difficultés avec le jeu, un tutoriel est disponible [ici](tuto.md).
## Project layout
Sinon, tous les détails techniques sont expliquer [ici](archi.md).
mkdocs.yml # The configuration file.
docs/
index.md # The documentation homepage.
... # Other markdown pages, images and other files.
Si vous arrivé jusqu'à la vague 15, prévenez nous.

3
docs/joystick.md Normal file
View file

@ -0,0 +1,3 @@
# Joystick
On réaliste un seuillage autour de la valeur centrale. Le joystick n'est pas vraiment annalogique, il n'y a que 8 directions possibles.

11
docs/lcd.md Normal file
View file

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

10
docs/led.md Normal file
View file

@ -0,0 +1,10 @@
# LED et GPIO
## Ecriture sur les LEDs
Pour facilité l'utilisation des LEDs, on utilise une liste d'objet ```struct led```, ainsi ```Leds[n] = {{LEDXX_GPIO_Port, LEDXX_Pin}}```.
On peut ainsi utilisé la ligne ```HAL_GPIO_WritePin(Leds[idx].port, Leds[idx].pin, !(charge-1<idx));``` ce qui simplifit l'itération sur toutes les leds.
## Lecture sur les boutons
On lis aussi l'état des bouton ```BP1``` et ```BP2``` via les GPIO.

17
docs/rng.md Normal file
View file

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

46
docs/thread.md Normal file
View file

@ -0,0 +1,46 @@
# Les threads
## Description des threads :
### ```GameMaster```
Ce thread permet de gérer la fin des niveaux, càd que faire lorsque il n'y a plus de mostres ou plus de vie pour le joueur. Le thread est bloqué tant qu'il ne ressoit pas de message par ```queue_F```.
Ce thread est le plus important, car sans ses acions, le jeu ne peut pas avancer, il a donc la plus grande priorité
### ```Joueur_1```
Ce tread gère les déplacements et l'affichage du joueur ainsi que ses tirs.
Ce thread est important à la fluidité du jeu, il à donc la deuxième plus grande priorité
### ```Block_Enemie```
Ce thread gère le block d'ennemis, leurs vies, et leurs tirs. Pour chaque pas de temps, chaque monstre à une probabilité de tirer de $\frac{\text{numéro de la vague}}{15}$. Ainsi, à chaque vague le jeu deviens plus dur.
Ce thread a une priorité normale.
### ```Projectile```
Ce thread gère les missiles. Il recois les demandes les nouveaux missiles par la ```queue_N```, et si il n'y a pas trop de missiles déjà en jeu (moins de $200$), il le rajoute et commence à le simuler. C'est ce thread qui gère toutes les collisions. En cas de collisions détecter, il tue le missile incriminé et envoie un messega via la ```queue_J``` quand le choc est avec le joueur, et la ```queue_E``` lorsque le choc implique un monstre.
Ce thread a une priorité normale.
### ```HUD```
Ce thread gère l'affichage de la bar d'info en haut de l'écran, il ne fait que lire des varriables partagé.
Ce thread a une priorité basse.
### ```chargeur```
Ce thread sert a incrémenter régulierement le compteur representant la charge du tir secondaire.
Ce thread a une priorité basse.
## Communication entre les threads :
### ```Queue_F```
On envoie un objet ```enum End_Type```, cela permet de débloqué le thread ```GameMaster```.
### ```Queue_N```
On envoie un objet ```struct Missile```, cela permet de demander la création d'un nouveau missile.
### ```Queue_J```
On envoie un ```int8_t``` qui represente les dégats a appliquer au joueur (on peut imaginer des dégats négatif pour des soins).
### ```Queue_E```
On envoie un objet ```struct collision``` qui comporte le numéro du monstre et les dégats à lui appliqué.

18
docs/tuto.md Normal file
View file

@ -0,0 +1,18 @@
# Tutoriel
## Controls
Le vaiseau se déplace avec le joystick. Pour utilisé le tir principale, il faut presser le bouton ```BP1``` (en bas). On dispose d'une seconde attaque, lancant une multitude de missile avec le bouton ```BP2```(en haut).
L'attaque secondaire à besoin de se recharger pendant quelque seconde, le tau de charge est modélisé par les leds à droite de la carte.
## Mécanique
Le but est de détruire tous les vaisseaux ennemis. Une fois tous les vaisseaux détruit, une nouvelle vague apparait. Chaque vague est plus dur que la pressedante (les ennemis tir plus de projectils).
Vous ne pouvez prendre que 5 dégats avant la fin de la partie.
## Fin
Le jeu prend fin lorsque vous n'avez plus de vie.
## Conseils
Le tir secondair est très puissant, il ne faut pas hésité à l'utiliser. De plus, il faut se consentrer sur l'évitement des projectils ennemis.

View file

@ -1,2 +1,27 @@
site_name: Space Invaders
site_url: https://example.com/
theme: material
nav :
- 'Home' : 'index.md'
- 'Tutoriel' : 'tuto.md'
- 'Architecture du code' : 'archi.md'
- 'Thread' : 'thread.md'
- 'Classe' : 'class.md'
- 'Perriphériques' :
- 'Ecran' : 'lcd.md'
- 'Aléatoire' : 'rng.md'
- 'Leds' : 'led.md'
- 'Joystick' : 'joystick.md'
markdown_extensions:
- pymdownx.arithmatex:
generic: true
extra_javascript:
- javascripts/config.js
- https://polyfill.io/v3/polyfill.min.js?features=es6
- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
extra_css:
- extra.css