Programme qui marche 100%

Dependencies:   mbed BSP_DISCO_F746NG

Committer:
blbl
Date:
Wed Nov 18 11:08:50 2020 +0000
Revision:
4:58c50d72b423
Parent:
3:54a96adea9cd
version finale;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
blbl 4:58c50d72b423 1 #include "header.h"
blbl 4:58c50d72b423 2
blbl 4:58c50d72b423 3 TS_StateTypeDef TS_State;
blbl 4:58c50d72b423 4
blbl 4:58c50d72b423 5 void init_cellules(GRILLE G){
blbl 4:58c50d72b423 6 int demarrer=0;
blbl 4:58c50d72b423 7 int x;
blbl 4:58c50d72b423 8 int y;
blbl 4:58c50d72b423 9 int l;
blbl 4:58c50d72b423 10 int h;
blbl 4:58c50d72b423 11 while(demarrer==0){
blbl 4:58c50d72b423 12 Affichagepxl2_debut(G);
blbl 4:58c50d72b423 13 BSP_TS_GetState(&TS_State);
blbl 4:58c50d72b423 14 if(TS_State.touchDetected==1){
blbl 4:58c50d72b423 15 BSP_TS_GetState(&TS_State);
blbl 4:58c50d72b423 16 if (TS_State.touchX[0]>Gauche_bouton_demarrer && TS_State.touchY[0]<Bas_bouton_demarrer){
blbl 4:58c50d72b423 17 demarrer=1;
blbl 4:58c50d72b423 18 }
blbl 4:58c50d72b423 19 else{
blbl 4:58c50d72b423 20 BSP_TS_GetState(&TS_State);
blbl 4:58c50d72b423 21 x = TS_State.touchX[0],
blbl 4:58c50d72b423 22 BSP_TS_GetState(&TS_State);
blbl 4:58c50d72b423 23 y = TS_State.touchY[0];
blbl 4:58c50d72b423 24 l = (x-1)/2 ;
blbl 4:58c50d72b423 25 h = (y-1)/2 ;
blbl 4:58c50d72b423 26 G[l][h]=1;
blbl 4:58c50d72b423 27 Affichagepxl2_debut(G);
blbl 4:58c50d72b423 28 }
blbl 4:58c50d72b423 29 }
blbl 4:58c50d72b423 30 }
blbl 4:58c50d72b423 31 }
blbl 4:58c50d72b423 32
blbl 4:58c50d72b423 33
blbl 4:58c50d72b423 34
blbl 4:58c50d72b423 35
blbl 4:58c50d72b423 36
blbl 4:58c50d72b423 37 void Changementetat(GRILLE G, GRILLE Gsomme) //réactualise les états des cases dans G en fonction des cases adjacentes dans Gsomme
blbl 4:58c50d72b423 38 {
blbl 4:58c50d72b423 39 int l;
blbl 4:58c50d72b423 40 int h;
blbl 4:58c50d72b423 41 for (l=0; l<LONGUEUR+1; l++)
blbl 4:58c50d72b423 42 {
blbl 4:58c50d72b423 43 for (h=0; h<HAUTEUR+1; h++)
blbl 4:58c50d72b423 44 {
blbl 4:58c50d72b423 45 if (G[l][h]==1)
blbl 4:58c50d72b423 46 {
blbl 4:58c50d72b423 47 if (Gsomme[l][h]<=CVA_VIVANT && Gsomme[l][h]>=CVA_MORT) //condition pour la survie d'une case
blbl 4:58c50d72b423 48 {
blbl 4:58c50d72b423 49 G[l][h]=1;
blbl 4:58c50d72b423 50 }
blbl 4:58c50d72b423 51 else //meurt d'isolement ou d'étouffement
blbl 4:58c50d72b423 52 {
blbl 4:58c50d72b423 53 G[l][h]=0;
blbl 4:58c50d72b423 54 }
blbl 4:58c50d72b423 55 }
blbl 4:58c50d72b423 56 else if (G[l][h]==0)
blbl 4:58c50d72b423 57 {
blbl 4:58c50d72b423 58 if (Gsomme[l][h]==CVA_VIVANT) //passage a l'état vivant si la case est morte
blbl 4:58c50d72b423 59 {
blbl 4:58c50d72b423 60 G[l][h]=1;
blbl 4:58c50d72b423 61 }
blbl 4:58c50d72b423 62 else
blbl 4:58c50d72b423 63 {
blbl 4:58c50d72b423 64 G[l][h]=0;
blbl 4:58c50d72b423 65 }
blbl 4:58c50d72b423 66 }
blbl 4:58c50d72b423 67 }
blbl 4:58c50d72b423 68 }
blbl 4:58c50d72b423 69 }
blbl 4:58c50d72b423 70
blbl 4:58c50d72b423 71 void Affichagepxl2(GRILLE G) //surtout ne pas confondre les dimensions de l'écran avec les dimension du tableau des cases si on utilise des pixels 2x2 ou plus
blbl 4:58c50d72b423 72 {
blbl 4:58c50d72b423 73 int l; //longueur sur G
blbl 4:58c50d72b423 74 int h; //hauteur sur H
blbl 4:58c50d72b423 75 for (l=0; l<LONGUEUR+1; l++)
blbl 4:58c50d72b423 76 {
blbl 4:58c50d72b423 77 for (h=0; h<HAUTEUR+1; h++)
blbl 4:58c50d72b423 78 {
blbl 4:58c50d72b423 79 int x=(2*l)+1; //position sur l'écran x,y
blbl 4:58c50d72b423 80 int y=(2*h)+1;
blbl 4:58c50d72b423 81 if (G[l][h]==1){
blbl 4:58c50d72b423 82 BSP_LCD_DrawPixel(x,y,couleurvivante);
blbl 4:58c50d72b423 83 BSP_LCD_DrawPixel(x+1,y,couleurvivante);
blbl 4:58c50d72b423 84 BSP_LCD_DrawPixel(x,y+1,couleurvivante);
blbl 4:58c50d72b423 85 BSP_LCD_DrawPixel(x+1,y+1,couleurvivante);
blbl 4:58c50d72b423 86 }
blbl 4:58c50d72b423 87 else if (G[l][h]==0){
blbl 4:58c50d72b423 88 BSP_LCD_DrawPixel(x,y,couleurmorte);
blbl 4:58c50d72b423 89 BSP_LCD_DrawPixel(x+1,y,couleurmorte);
blbl 4:58c50d72b423 90 BSP_LCD_DrawPixel(x,y+1,couleurmorte);
blbl 4:58c50d72b423 91 BSP_LCD_DrawPixel(x+1,y+1,couleurmorte);
blbl 4:58c50d72b423 92 }
blbl 4:58c50d72b423 93 }
blbl 4:58c50d72b423 94 }
blbl 4:58c50d72b423 95 BSP_LCD_SetTextColor(couleur_stop);
blbl 4:58c50d72b423 96 BSP_LCD_FillRect(Gauche_bouton_demarrer,0,Droit_bouton_continuer,Bas_bouton_demarrer);
blbl 4:58c50d72b423 97 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
blbl 4:58c50d72b423 98 BSP_LCD_DisplayStringAt(0,0, (uint8_t *)"STOP", RIGHT_MODE);
blbl 4:58c50d72b423 99 }
blbl 4:58c50d72b423 100
blbl 4:58c50d72b423 101 void Affichagepxl2_debut(GRILLE G)
blbl 4:58c50d72b423 102 {
blbl 4:58c50d72b423 103 int l; //longueur sur G
blbl 4:58c50d72b423 104 int h; //hauteur sur H
blbl 4:58c50d72b423 105 for (l=0; l<LONGUEUR+1; l++)
blbl 4:58c50d72b423 106 {
blbl 4:58c50d72b423 107 for (h=0; h<HAUTEUR+1; h++)
blbl 4:58c50d72b423 108 {
blbl 4:58c50d72b423 109 int x=(2*l)+1; //position sur l'écran x,y
blbl 4:58c50d72b423 110 int y=(2*h)+1;
blbl 4:58c50d72b423 111 if (G[l][h]==1){
blbl 4:58c50d72b423 112 BSP_LCD_DrawPixel(x,y,couleurvivante);
blbl 4:58c50d72b423 113 BSP_LCD_DrawPixel(x+1,y,couleurvivante);
blbl 4:58c50d72b423 114 BSP_LCD_DrawPixel(x,y+1,couleurvivante);
blbl 4:58c50d72b423 115 BSP_LCD_DrawPixel(x+1,y+1,couleurvivante);
blbl 4:58c50d72b423 116 }
blbl 4:58c50d72b423 117 else if (G[l][h]==0){
blbl 4:58c50d72b423 118 BSP_LCD_DrawPixel(x,y,couleurmorte);
blbl 4:58c50d72b423 119 BSP_LCD_DrawPixel(x+1,y,couleurmorte);
blbl 4:58c50d72b423 120 BSP_LCD_DrawPixel(x,y+1,couleurmorte);
blbl 4:58c50d72b423 121 BSP_LCD_DrawPixel(x+1,y+1,couleurmorte);
blbl 4:58c50d72b423 122 }
blbl 4:58c50d72b423 123 }
blbl 4:58c50d72b423 124 }
blbl 4:58c50d72b423 125 BSP_LCD_SetTextColor(couleur_demarrer);
blbl 4:58c50d72b423 126 BSP_LCD_FillRect(Gauche_bouton_demarrer,0,Droit_bouton_continuer,Bas_bouton_demarrer);
blbl 4:58c50d72b423 127 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
blbl 4:58c50d72b423 128 BSP_LCD_DisplayStringAt(0,0, (uint8_t *)"START", RIGHT_MODE);
blbl 4:58c50d72b423 129 }
blbl 4:58c50d72b423 130
blbl 4:58c50d72b423 131
blbl 4:58c50d72b423 132
blbl 4:58c50d72b423 133
blbl 4:58c50d72b423 134
guillaume_m 2:3e54ffabcc47 135
blbl 4:58c50d72b423 136 void Tabsomme(GRILLE G, GRILLE Gsomme) //réalisation du tableau des sommes a partir du tableau des états
blbl 4:58c50d72b423 137 {
blbl 4:58c50d72b423 138 int l;
blbl 4:58c50d72b423 139 int h;
blbl 4:58c50d72b423 140 for (l=0; l<LONGUEUR+1; l++)
blbl 4:58c50d72b423 141 {
blbl 4:58c50d72b423 142 for (h=0; h<HAUTEUR+1; h++)
blbl 4:58c50d72b423 143 {
blbl 4:58c50d72b423 144 if (l<LONGUEUR+1 && l>0 && h<HAUTEUR+1 && h>0)
blbl 4:58c50d72b423 145 {
blbl 4:58c50d72b423 146 Gsomme[l][h]=SommeADJcorps(G,l,h);
blbl 4:58c50d72b423 147 }
blbl 4:58c50d72b423 148 else if (((l==0)&&(h==HAUTEUR||h==0))||((l==LONGUEUR)&&(h==HAUTEUR||h==0)))
blbl 4:58c50d72b423 149 {
blbl 4:58c50d72b423 150 Gsomme[l][h]=SommeADJcoins(G,l,h);
blbl 4:58c50d72b423 151 }
blbl 4:58c50d72b423 152 else if ((l==0 && (h!=0 && h!=HAUTEUR))||(l==LONGUEUR && (h!=0 && h!=HAUTEUR)))
blbl 4:58c50d72b423 153 {
blbl 4:58c50d72b423 154 Gsomme[l][h]=SommeADJcoteslat(G,l,h);
blbl 4:58c50d72b423 155 }
blbl 4:58c50d72b423 156 else if ((h==0 && (l!=0 && l!=LONGUEUR))||(h==HAUTEUR && (l!=0 && l!=LONGUEUR)))
blbl 4:58c50d72b423 157 {
blbl 4:58c50d72b423 158 Gsomme[l][h]=SommeADJcoteslon(G,l,h);
blbl 4:58c50d72b423 159 }
blbl 4:58c50d72b423 160
blbl 4:58c50d72b423 161
blbl 4:58c50d72b423 162 }
blbl 4:58c50d72b423 163 }
blbl 4:58c50d72b423 164 }
blbl 4:58c50d72b423 165
blbl 4:58c50d72b423 166
blbl 4:58c50d72b423 167 int SommeADJcorps(GRILLE G, int i, int h) // sous-fonction de Tabsomme qui gère les cases au centre du tableau (sans les cotés et les coins)
blbl 4:58c50d72b423 168 {
blbl 4:58c50d72b423 169 int s=0;
blbl 4:58c50d72b423 170 s+=(G[i+1][h] + G[i-1][h]);
blbl 4:58c50d72b423 171 s+=(G[i-1][h-1] + G[i][h-1] + G[i+1][h-1]);
blbl 4:58c50d72b423 172 s+=(G[i-1][h+1] + G[i][h+1] + G[i+1][h+1]);
blbl 4:58c50d72b423 173 return s;
blbl 4:58c50d72b423 174 }
blbl 4:58c50d72b423 175
blbl 4:58c50d72b423 176 int SommeADJcoteslat(GRILLE G,int i, int h) // sous-fonction de Tabsomme qui gère les cotés latéraux du tableau
blbl 4:58c50d72b423 177 {
blbl 4:58c50d72b423 178 if (i==0)
blbl 4:58c50d72b423 179 {
blbl 4:58c50d72b423 180 int s=0;
blbl 4:58c50d72b423 181 s+=(G[i][h+1] + G[i][h-1]);
blbl 4:58c50d72b423 182 s+=(G[i+1][h+1] + G[i+1][h-1] + G[i+1][h]);
blbl 4:58c50d72b423 183 s+=(G[LONGUEUR][h+1] + G[LONGUEUR][h-1] + G[LONGUEUR][h]);
blbl 4:58c50d72b423 184 return s;
blbl 4:58c50d72b423 185 }
blbl 4:58c50d72b423 186 if (i==LONGUEUR)
blbl 4:58c50d72b423 187 {
blbl 4:58c50d72b423 188 int s=0;
blbl 4:58c50d72b423 189 s+=(G[i][h+1] + G[i][h-1]);
blbl 4:58c50d72b423 190 s+=(G[i-1][h+1] + G[i-1][h-1] + G[i-1][h]);
blbl 4:58c50d72b423 191 s+=(G[0][h+1] + G[0][h-1] + G[0][h]);
blbl 4:58c50d72b423 192 return s;
blbl 4:58c50d72b423 193 }
blbl 4:58c50d72b423 194 return 0;
blbl 4:58c50d72b423 195 }
blbl 4:58c50d72b423 196
blbl 4:58c50d72b423 197 int SommeADJcoteslon(GRILLE G,int i, int h)// sous-fonction de Tabsomme qui gère les cotés en longueur du tableau
blbl 4:58c50d72b423 198 {
blbl 4:58c50d72b423 199 if (h==0)
blbl 4:58c50d72b423 200 {
blbl 4:58c50d72b423 201 int s=0;
blbl 4:58c50d72b423 202 s+=(G[i+1][h] + G[i-1][h]);
blbl 4:58c50d72b423 203 s+=(G[i-1][h+1] + G[i][h+1] + G[i+1][h+1]);
blbl 4:58c50d72b423 204 s+=(G[i-1][HAUTEUR] + G[i][HAUTEUR] + G[i+1][HAUTEUR]);
blbl 4:58c50d72b423 205 return s;
blbl 4:58c50d72b423 206 }
blbl 4:58c50d72b423 207 if (h==HAUTEUR)
blbl 4:58c50d72b423 208 {
blbl 4:58c50d72b423 209 int s=0;
blbl 4:58c50d72b423 210 s+=(G[i+1][h] + G[i-1][h]);
blbl 4:58c50d72b423 211 s+=(G[i-1][h+1] + G[i][h+1] + G[i+1][h+1]);
blbl 4:58c50d72b423 212 s+=(G[i-1][0] + G[i][HAUTEUR] + G[i+1][HAUTEUR]);
blbl 4:58c50d72b423 213 return s;
blbl 4:58c50d72b423 214 }
blbl 4:58c50d72b423 215 return 0;
blbl 4:58c50d72b423 216 }
blbl 4:58c50d72b423 217
blbl 4:58c50d72b423 218
blbl 4:58c50d72b423 219 int SommeADJcoins(GRILLE G, int i, int h) // sous-fonction de Tabsomme qui gère les coins du tableaux
blbl 4:58c50d72b423 220 {
blbl 4:58c50d72b423 221 int s=0;
blbl 4:58c50d72b423 222 if (i==0)
blbl 4:58c50d72b423 223 {
blbl 4:58c50d72b423 224 if (h==0) //coin sup gauche
blbl 4:58c50d72b423 225 {
blbl 4:58c50d72b423 226 s+=(G[LONGUEUR][HAUTEUR]);
blbl 4:58c50d72b423 227 s+=(G[1][0] + G[1][1] + G[0][1]);
blbl 4:58c50d72b423 228 s+=(G[LONGUEUR][0] + G[LONGUEUR][1]);
blbl 4:58c50d72b423 229 s+=(G[0][HAUTEUR] + G[1][HAUTEUR]);
blbl 4:58c50d72b423 230 return s;
blbl 4:58c50d72b423 231 }
blbl 4:58c50d72b423 232 else if (h==HAUTEUR) //coin inf gauche
blbl 4:58c50d72b423 233 {
blbl 4:58c50d72b423 234 s+=(G[LONGUEUR][0]);
blbl 4:58c50d72b423 235 s+=(G[0][HAUTEUR - 1] + G[1][HAUTEUR - 1] + G[1][HAUTEUR]);
blbl 4:58c50d72b423 236 s+=(G[LONGUEUR][HAUTEUR -1] + G[LONGUEUR][HAUTEUR]);
blbl 4:58c50d72b423 237 s+=(G[0][0] + G[1][0]);
blbl 4:58c50d72b423 238 return s;
blbl 4:58c50d72b423 239 }
blbl 4:58c50d72b423 240 }
blbl 4:58c50d72b423 241 else if (i==LONGUEUR)
blbl 4:58c50d72b423 242 {
blbl 4:58c50d72b423 243 if (h==0) //coin sup droit
blbl 4:58c50d72b423 244 {
blbl 4:58c50d72b423 245 s+=(G[0][HAUTEUR]);
blbl 4:58c50d72b423 246 s+=(G[LONGUEUR - 1][0] + G[LONGUEUR - 1][0] + G[LONGUEUR - 1][1]);
blbl 4:58c50d72b423 247 s+=(G[LONGUEUR][HAUTEUR] + G[LONGUEUR-1][HAUTEUR]);
blbl 4:58c50d72b423 248 s+=(G[0][0] + G[0][1]);
blbl 4:58c50d72b423 249 return s;
blbl 4:58c50d72b423 250 }
blbl 4:58c50d72b423 251 else if (h==HAUTEUR) //coin inf droit
blbl 4:58c50d72b423 252 {
blbl 4:58c50d72b423 253 s+=(G[0][0]);
blbl 4:58c50d72b423 254 s+=(G[LONGUEUR - 1][HAUTEUR] + G[LONGUEUR - 1][HAUTEUR - 1] + G[LONGUEUR][HAUTEUR - 1]);
blbl 4:58c50d72b423 255 s+=(G[LONGUEUR][0] + G[LONGUEUR - 1][0]);
blbl 4:58c50d72b423 256 s+=(G[0][HAUTEUR] + G[0][HAUTEUR - 1]);
blbl 4:58c50d72b423 257 return s;
blbl 4:58c50d72b423 258 }
blbl 4:58c50d72b423 259 }
blbl 4:58c50d72b423 260 return 0;
blbl 4:58c50d72b423 261 }
blbl 4:58c50d72b423 262
blbl 4:58c50d72b423 263
blbl 4:58c50d72b423 264
blbl 4:58c50d72b423 265 void partie(GRILLE G,GRILLE Gsomme){
blbl 4:58c50d72b423 266 BSP_LCD_Clear(LCD_COLOR_BLACK);
blbl 4:58c50d72b423 267 BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
blbl 4:58c50d72b423 268 Affichagepxl2(G);
blbl 4:58c50d72b423 269 HAL_Delay(TEMPS_TOUR);
blbl 4:58c50d72b423 270 int stop=0;
blbl 4:58c50d72b423 271 while(stop==0){
blbl 4:58c50d72b423 272 HAL_Delay(TEMPS_TOUR);
blbl 4:58c50d72b423 273 Tabsomme(G,Gsomme);
blbl 4:58c50d72b423 274 Changementetat(G,Gsomme);
blbl 4:58c50d72b423 275 Affichagepxl2(G);
blbl 4:58c50d72b423 276 BSP_TS_GetState(&TS_State);
blbl 4:58c50d72b423 277 if(TS_State.touchDetected != 0){
blbl 4:58c50d72b423 278 BSP_TS_GetState(&TS_State);
blbl 4:58c50d72b423 279 if (TS_State.touchX[0]>Gauche_bouton_demarrer && TS_State.touchY[0]<Bas_bouton_demarrer){
blbl 4:58c50d72b423 280 stop=1;
blbl 4:58c50d72b423 281 }
blbl 4:58c50d72b423 282 }
blbl 4:58c50d72b423 283 }
blbl 4:58c50d72b423 284 }
blbl 4:58c50d72b423 285
blbl 4:58c50d72b423 286
blbl 4:58c50d72b423 287
blbl 4:58c50d72b423 288
blbl 4:58c50d72b423 289 int fin_de_partie(GRILLE G,GRILLE Gsomme){
blbl 4:58c50d72b423 290 int rejouer=0;
blbl 4:58c50d72b423 291 int continuer=0;
blbl 4:58c50d72b423 292 BSP_LCD_SetTextColor(couleur_stop);
blbl 4:58c50d72b423 293 BSP_LCD_FillRect(Gauche_bouton_demarrer,0,Droit_bouton_continuer,Bas_bouton_demarrer);
blbl 4:58c50d72b423 294 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
blbl 4:58c50d72b423 295 BSP_LCD_DisplayStringAt(0,0, (uint8_t *)"NEW TRY", RIGHT_MODE);
blbl 4:58c50d72b423 296 BSP_LCD_SetTextColor(couleur_demarrer);
blbl 4:58c50d72b423 297 BSP_LCD_FillRect(0,0,Droit_bouton_continuer,Bas_bouton_demarrer);
blbl 4:58c50d72b423 298 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
blbl 4:58c50d72b423 299 BSP_LCD_DisplayStringAt(0,0, (uint8_t *)"CONTINUE", LEFT_MODE);
blbl 4:58c50d72b423 300 HAL_Delay(1000);
blbl 4:58c50d72b423 301 while(1){
blbl 4:58c50d72b423 302 BSP_TS_GetState(&TS_State);
blbl 4:58c50d72b423 303 if(TS_State.touchDetected==1){
blbl 4:58c50d72b423 304 BSP_TS_GetState(&TS_State);
blbl 4:58c50d72b423 305 if (TS_State.touchX[0]<Droit_bouton_continuer && TS_State.touchY[0]<Bas_bouton_demarrer){
blbl 4:58c50d72b423 306 continuer=1;
blbl 4:58c50d72b423 307 }
blbl 4:58c50d72b423 308 else if (TS_State.touchX[0]>Gauche_bouton_demarrer && TS_State.touchY[0]<Bas_bouton_demarrer){
blbl 4:58c50d72b423 309 rejouer=1;
blbl 4:58c50d72b423 310 }
blbl 4:58c50d72b423 311
blbl 4:58c50d72b423 312 }
blbl 4:58c50d72b423 313 if (continuer==1){
blbl 4:58c50d72b423 314 partie(G,Gsomme);
blbl 4:58c50d72b423 315 fin_de_partie(G,Gsomme);
blbl 4:58c50d72b423 316 }
blbl 4:58c50d72b423 317 if (rejouer ==1){
blbl 4:58c50d72b423 318 break;
blbl 4:58c50d72b423 319 }
blbl 4:58c50d72b423 320 }
blbl 4:58c50d72b423 321 return rejouer;
blbl 4:58c50d72b423 322 }
blbl 4:58c50d72b423 323
blbl 4:58c50d72b423 324
blbl 4:58c50d72b423 325
blbl 4:58c50d72b423 326
blbl 4:58c50d72b423 327
blbl 4:58c50d72b423 328
blbl 4:58c50d72b423 329
blbl 4:58c50d72b423 330
blbl 4:58c50d72b423 331
blbl 4:58c50d72b423 332
blbl 4:58c50d72b423 333