
Programme qui marche 100%
Dependencies: mbed BSP_DISCO_F746NG
Revision 4:58c50d72b423, committed 2020-11-18
- Comitter:
- blbl
- Date:
- Wed Nov 18 11:08:50 2020 +0000
- Parent:
- 3:54a96adea9cd
- Commit message:
- version finale;
Changed in this revision
prog_util/fonctions.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/prog_util/fonctions.cpp Wed Nov 18 10:51:15 2020 +0000 +++ b/prog_util/fonctions.cpp Wed Nov 18 11:08:50 2020 +0000 @@ -1,351 +1,333 @@ -#include "header.h" - -TS_StateTypeDef TS_State; - -void init_cellules(GRILLE G){ - int demarrer=0; - int x; - int y; - int l; - int h; - while(demarrer==0){ - Affichagepxl2_debut(G); - BSP_TS_GetState(&TS_State); - if(TS_State.touchDetected==1){ - BSP_TS_GetState(&TS_State); - if (TS_State.touchX[0]>Gauche_bouton_demarrer && TS_State.touchY[0]<Bas_bouton_demarrer){ - demarrer=1; - } - else{ - BSP_TS_GetState(&TS_State); - x = TS_State.touchX[0], - BSP_TS_GetState(&TS_State); - y = TS_State.touchY[0]; - l = (x-1)/2 ; - h = (y-1)/2 ; - G[l][h]=1; - Affichagepxl2_debut(G); - } - } - G[11][11]=1; - G[11][13]=1; - G[14][11]=1; - G[15][12]=1; - G[15][13]=1; - G[15][14]=1; - G[12][14]=1; - G[13][14]=1; - G[14][14]=1; - - G[31][31]=1; - G[31][32]=1; - G[32][31]=1; - G[32][32]=1; - - G[65][45]=1; - G[65][46]=1; - G[65][47]=1; - } -} - - - - - -void Changementetat(GRILLE G, GRILLE Gsomme) //réactualise les états des cases dans G en fonction des cases adjacentes dans Gsomme -{ - int l; - int h; - for (l=0; l<LONGUEUR+1; l++) - { - for (h=0; h<HAUTEUR+1; h++) - { - if (G[l][h]==1) - { - if (Gsomme[l][h]<=CVA_VIVANT && Gsomme[l][h]>=CVA_MORT) //condition pour la survie d'une case - { - G[l][h]=1; - } - else //meurt d'isolement ou d'étouffement - { - G[l][h]=0; - } - } - else if (G[l][h]==0) - { - if (Gsomme[l][h]==CVA_VIVANT) //passage a l'état vivant si la case est morte - { - G[l][h]=1; - } - else - { - G[l][h]=0; - } - } - } - } -} - -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 -{ - int l; //longueur sur G - int h; //hauteur sur H - for (l=0; l<LONGUEUR+1; l++) - { - for (h=0; h<HAUTEUR+1; h++) - { - int x=(2*l)+1; //position sur l'écran x,y - int y=(2*h)+1; - if (G[l][h]==1){ - BSP_LCD_DrawPixel(x,y,couleurvivante); - BSP_LCD_DrawPixel(x+1,y,couleurvivante); - BSP_LCD_DrawPixel(x,y+1,couleurvivante); - BSP_LCD_DrawPixel(x+1,y+1,couleurvivante); - } - else if (G[l][h]==0){ - BSP_LCD_DrawPixel(x,y,couleurmorte); - BSP_LCD_DrawPixel(x+1,y,couleurmorte); - BSP_LCD_DrawPixel(x,y+1,couleurmorte); - BSP_LCD_DrawPixel(x+1,y+1,couleurmorte); - } - } - } - BSP_LCD_SetTextColor(couleur_stop); - BSP_LCD_FillRect(Gauche_bouton_demarrer,0,Droit_bouton_continuer,Bas_bouton_demarrer); - BSP_LCD_SetTextColor(LCD_COLOR_WHITE); - BSP_LCD_DisplayStringAt(0,0, (uint8_t *)"STOP", RIGHT_MODE); -} - -void Affichagepxl2_debut(GRILLE G) -{ - int l; //longueur sur G - int h; //hauteur sur H - for (l=0; l<LONGUEUR+1; l++) - { - for (h=0; h<HAUTEUR+1; h++) - { - int x=(2*l)+1; //position sur l'écran x,y - int y=(2*h)+1; - if (G[l][h]==1){ - BSP_LCD_DrawPixel(x,y,couleurvivante); - BSP_LCD_DrawPixel(x+1,y,couleurvivante); - BSP_LCD_DrawPixel(x,y+1,couleurvivante); - BSP_LCD_DrawPixel(x+1,y+1,couleurvivante); - } - else if (G[l][h]==0){ - BSP_LCD_DrawPixel(x,y,couleurmorte); - BSP_LCD_DrawPixel(x+1,y,couleurmorte); - BSP_LCD_DrawPixel(x,y+1,couleurmorte); - BSP_LCD_DrawPixel(x+1,y+1,couleurmorte); - } - } - } - BSP_LCD_SetTextColor(couleur_demarrer); - BSP_LCD_FillRect(Gauche_bouton_demarrer,0,Droit_bouton_continuer,Bas_bouton_demarrer); - BSP_LCD_SetTextColor(LCD_COLOR_WHITE); - BSP_LCD_DisplayStringAt(0,0, (uint8_t *)"START", RIGHT_MODE); -} - - - - - - -void Tabsomme(GRILLE G, GRILLE Gsomme) //réalisation du tableau des sommes a partir du tableau des états -{ - int l; - int h; - for (l=0; l<LONGUEUR+1; l++) - { - for (h=0; h<HAUTEUR+1; h++) - { - if (l<LONGUEUR+1 && l>0 && h<HAUTEUR+1 && h>0) - { - Gsomme[l][h]=SommeADJcorps(G,l,h); - } - else if (((l==0)&&(h==HAUTEUR||h==0))||((l==LONGUEUR)&&(h==HAUTEUR||h==0))) - { - Gsomme[l][h]=SommeADJcoins(G,l,h); - } - else if ((l==0 && (h!=0 && h!=HAUTEUR))||(l==LONGUEUR && (h!=0 && h!=HAUTEUR))) - { - Gsomme[l][h]=SommeADJcoteslat(G,l,h); - } - else if ((h==0 && (l!=0 && l!=LONGUEUR))||(h==HAUTEUR && (l!=0 && l!=LONGUEUR))) - { - Gsomme[l][h]=SommeADJcoteslon(G,l,h); - } - - - } - } -} - - -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) -{ - int s=0; - s+=(G[i+1][h] + G[i-1][h]); - s+=(G[i-1][h-1] + G[i][h-1] + G[i+1][h-1]); - s+=(G[i-1][h+1] + G[i][h+1] + G[i+1][h+1]); - return s; -} - -int SommeADJcoteslat(GRILLE G,int i, int h) // sous-fonction de Tabsomme qui gère les cotés latéraux du tableau -{ - if (i==0) - { - int s=0; - s+=(G[i][h+1] + G[i][h-1]); - s+=(G[i+1][h+1] + G[i+1][h-1] + G[i+1][h]); - s+=(G[LONGUEUR][h+1] + G[LONGUEUR][h-1] + G[LONGUEUR][h]); - return s; - } - if (i==LONGUEUR) - { - int s=0; - s+=(G[i][h+1] + G[i][h-1]); - s+=(G[i-1][h+1] + G[i-1][h-1] + G[i-1][h]); - s+=(G[0][h+1] + G[0][h-1] + G[0][h]); - return s; - } - return 0; -} - -int SommeADJcoteslon(GRILLE G,int i, int h)// sous-fonction de Tabsomme qui gère les cotés en longueur du tableau -{ - if (h==0) - { - int s=0; - s+=(G[i+1][h] + G[i-1][h]); - s+=(G[i-1][h+1] + G[i][h+1] + G[i+1][h+1]); - s+=(G[i-1][HAUTEUR] + G[i][HAUTEUR] + G[i+1][HAUTEUR]); - return s; - } - if (h==HAUTEUR) - { - int s=0; - s+=(G[i+1][h] + G[i-1][h]); - s+=(G[i-1][h+1] + G[i][h+1] + G[i+1][h+1]); - s+=(G[i-1][0] + G[i][HAUTEUR] + G[i+1][HAUTEUR]); - return s; - } - return 0; -} - - -int SommeADJcoins(GRILLE G, int i, int h) // sous-fonction de Tabsomme qui gère les coins du tableaux -{ - int s=0; - if (i==0) - { - if (h==0) //coin sup gauche - { - s+=(G[LONGUEUR][HAUTEUR]); - s+=(G[1][0] + G[1][1] + G[0][1]); - s+=(G[LONGUEUR][0] + G[LONGUEUR][1]); - s+=(G[0][HAUTEUR] + G[1][HAUTEUR]); - return s; - } - else if (h==HAUTEUR) //coin inf gauche - { - s+=(G[LONGUEUR][0]); - s+=(G[0][HAUTEUR - 1] + G[1][HAUTEUR - 1] + G[1][HAUTEUR]); - s+=(G[LONGUEUR][HAUTEUR -1] + G[LONGUEUR][HAUTEUR]); - s+=(G[0][0] + G[1][0]); - return s; - } - } - else if (i==LONGUEUR) - { - if (h==0) //coin sup droit - { - s+=(G[0][HAUTEUR]); - s+=(G[LONGUEUR - 1][0] + G[LONGUEUR - 1][0] + G[LONGUEUR - 1][1]); - s+=(G[LONGUEUR][HAUTEUR] + G[LONGUEUR-1][HAUTEUR]); - s+=(G[0][0] + G[0][1]); - return s; - } - else if (h==HAUTEUR) //coin inf droit - { - s+=(G[0][0]); - s+=(G[LONGUEUR - 1][HAUTEUR] + G[LONGUEUR - 1][HAUTEUR - 1] + G[LONGUEUR][HAUTEUR - 1]); - s+=(G[LONGUEUR][0] + G[LONGUEUR - 1][0]); - s+=(G[0][HAUTEUR] + G[0][HAUTEUR - 1]); - return s; - } - } - return 0; -} - - - -void partie(GRILLE G,GRILLE Gsomme){ - BSP_LCD_Clear(LCD_COLOR_BLACK); - BSP_LCD_SetBackColor(LCD_COLOR_BLACK); - Affichagepxl2(G); - HAL_Delay(TEMPS_TOUR); - int stop=0; - while(stop==0){ - HAL_Delay(TEMPS_TOUR); - Tabsomme(G,Gsomme); - Changementetat(G,Gsomme); - Affichagepxl2(G); - BSP_TS_GetState(&TS_State); - if(TS_State.touchDetected != 0){ - BSP_TS_GetState(&TS_State); - if (TS_State.touchX[0]>Gauche_bouton_demarrer && TS_State.touchY[0]<Bas_bouton_demarrer){ - stop=1; - } - } - } -} - - - - -int fin_de_partie(GRILLE G,GRILLE Gsomme){ - int rejouer=0; - int continuer=0; - BSP_LCD_SetTextColor(couleur_stop); - BSP_LCD_FillRect(Gauche_bouton_demarrer,0,Droit_bouton_continuer,Bas_bouton_demarrer); - BSP_LCD_SetTextColor(LCD_COLOR_WHITE); - BSP_LCD_DisplayStringAt(0,0, (uint8_t *)"NEW TRY", RIGHT_MODE); - BSP_LCD_SetTextColor(couleur_demarrer); - BSP_LCD_FillRect(0,0,Droit_bouton_continuer,Bas_bouton_demarrer); - BSP_LCD_SetTextColor(LCD_COLOR_WHITE); - BSP_LCD_DisplayStringAt(0,0, (uint8_t *)"CONTINUE", LEFT_MODE); - HAL_Delay(1000); - while(1){ - BSP_TS_GetState(&TS_State); - if(TS_State.touchDetected==1){ - BSP_TS_GetState(&TS_State); - if (TS_State.touchX[0]<Droit_bouton_continuer && TS_State.touchY[0]<Bas_bouton_demarrer){ - continuer=1; - } - else if (TS_State.touchX[0]>Gauche_bouton_demarrer && TS_State.touchY[0]<Bas_bouton_demarrer){ - rejouer=1; - } - - } - if (continuer==1){ - partie(G,Gsomme); - fin_de_partie(G,Gsomme); - } - if (rejouer ==1){ - break; - } - } - return rejouer; -} - - - - - - - - - - +#include "header.h" + +TS_StateTypeDef TS_State; + +void init_cellules(GRILLE G){ + int demarrer=0; + int x; + int y; + int l; + int h; + while(demarrer==0){ + Affichagepxl2_debut(G); + BSP_TS_GetState(&TS_State); + if(TS_State.touchDetected==1){ + BSP_TS_GetState(&TS_State); + if (TS_State.touchX[0]>Gauche_bouton_demarrer && TS_State.touchY[0]<Bas_bouton_demarrer){ + demarrer=1; + } + else{ + BSP_TS_GetState(&TS_State); + x = TS_State.touchX[0], + BSP_TS_GetState(&TS_State); + y = TS_State.touchY[0]; + l = (x-1)/2 ; + h = (y-1)/2 ; + G[l][h]=1; + Affichagepxl2_debut(G); + } + } + } +} + + + + + +void Changementetat(GRILLE G, GRILLE Gsomme) //réactualise les états des cases dans G en fonction des cases adjacentes dans Gsomme +{ + int l; + int h; + for (l=0; l<LONGUEUR+1; l++) + { + for (h=0; h<HAUTEUR+1; h++) + { + if (G[l][h]==1) + { + if (Gsomme[l][h]<=CVA_VIVANT && Gsomme[l][h]>=CVA_MORT) //condition pour la survie d'une case + { + G[l][h]=1; + } + else //meurt d'isolement ou d'étouffement + { + G[l][h]=0; + } + } + else if (G[l][h]==0) + { + if (Gsomme[l][h]==CVA_VIVANT) //passage a l'état vivant si la case est morte + { + G[l][h]=1; + } + else + { + G[l][h]=0; + } + } + } + } +} + +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 +{ + int l; //longueur sur G + int h; //hauteur sur H + for (l=0; l<LONGUEUR+1; l++) + { + for (h=0; h<HAUTEUR+1; h++) + { + int x=(2*l)+1; //position sur l'écran x,y + int y=(2*h)+1; + if (G[l][h]==1){ + BSP_LCD_DrawPixel(x,y,couleurvivante); + BSP_LCD_DrawPixel(x+1,y,couleurvivante); + BSP_LCD_DrawPixel(x,y+1,couleurvivante); + BSP_LCD_DrawPixel(x+1,y+1,couleurvivante); + } + else if (G[l][h]==0){ + BSP_LCD_DrawPixel(x,y,couleurmorte); + BSP_LCD_DrawPixel(x+1,y,couleurmorte); + BSP_LCD_DrawPixel(x,y+1,couleurmorte); + BSP_LCD_DrawPixel(x+1,y+1,couleurmorte); + } + } + } + BSP_LCD_SetTextColor(couleur_stop); + BSP_LCD_FillRect(Gauche_bouton_demarrer,0,Droit_bouton_continuer,Bas_bouton_demarrer); + BSP_LCD_SetTextColor(LCD_COLOR_WHITE); + BSP_LCD_DisplayStringAt(0,0, (uint8_t *)"STOP", RIGHT_MODE); +} + +void Affichagepxl2_debut(GRILLE G) +{ + int l; //longueur sur G + int h; //hauteur sur H + for (l=0; l<LONGUEUR+1; l++) + { + for (h=0; h<HAUTEUR+1; h++) + { + int x=(2*l)+1; //position sur l'écran x,y + int y=(2*h)+1; + if (G[l][h]==1){ + BSP_LCD_DrawPixel(x,y,couleurvivante); + BSP_LCD_DrawPixel(x+1,y,couleurvivante); + BSP_LCD_DrawPixel(x,y+1,couleurvivante); + BSP_LCD_DrawPixel(x+1,y+1,couleurvivante); + } + else if (G[l][h]==0){ + BSP_LCD_DrawPixel(x,y,couleurmorte); + BSP_LCD_DrawPixel(x+1,y,couleurmorte); + BSP_LCD_DrawPixel(x,y+1,couleurmorte); + BSP_LCD_DrawPixel(x+1,y+1,couleurmorte); + } + } + } + BSP_LCD_SetTextColor(couleur_demarrer); + BSP_LCD_FillRect(Gauche_bouton_demarrer,0,Droit_bouton_continuer,Bas_bouton_demarrer); + BSP_LCD_SetTextColor(LCD_COLOR_WHITE); + BSP_LCD_DisplayStringAt(0,0, (uint8_t *)"START", RIGHT_MODE); +} + + + + + +void Tabsomme(GRILLE G, GRILLE Gsomme) //réalisation du tableau des sommes a partir du tableau des états +{ + int l; + int h; + for (l=0; l<LONGUEUR+1; l++) + { + for (h=0; h<HAUTEUR+1; h++) + { + if (l<LONGUEUR+1 && l>0 && h<HAUTEUR+1 && h>0) + { + Gsomme[l][h]=SommeADJcorps(G,l,h); + } + else if (((l==0)&&(h==HAUTEUR||h==0))||((l==LONGUEUR)&&(h==HAUTEUR||h==0))) + { + Gsomme[l][h]=SommeADJcoins(G,l,h); + } + else if ((l==0 && (h!=0 && h!=HAUTEUR))||(l==LONGUEUR && (h!=0 && h!=HAUTEUR))) + { + Gsomme[l][h]=SommeADJcoteslat(G,l,h); + } + else if ((h==0 && (l!=0 && l!=LONGUEUR))||(h==HAUTEUR && (l!=0 && l!=LONGUEUR))) + { + Gsomme[l][h]=SommeADJcoteslon(G,l,h); + } + + + } + } +} + + +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) +{ + int s=0; + s+=(G[i+1][h] + G[i-1][h]); + s+=(G[i-1][h-1] + G[i][h-1] + G[i+1][h-1]); + s+=(G[i-1][h+1] + G[i][h+1] + G[i+1][h+1]); + return s; +} + +int SommeADJcoteslat(GRILLE G,int i, int h) // sous-fonction de Tabsomme qui gère les cotés latéraux du tableau +{ + if (i==0) + { + int s=0; + s+=(G[i][h+1] + G[i][h-1]); + s+=(G[i+1][h+1] + G[i+1][h-1] + G[i+1][h]); + s+=(G[LONGUEUR][h+1] + G[LONGUEUR][h-1] + G[LONGUEUR][h]); + return s; + } + if (i==LONGUEUR) + { + int s=0; + s+=(G[i][h+1] + G[i][h-1]); + s+=(G[i-1][h+1] + G[i-1][h-1] + G[i-1][h]); + s+=(G[0][h+1] + G[0][h-1] + G[0][h]); + return s; + } + return 0; +} + +int SommeADJcoteslon(GRILLE G,int i, int h)// sous-fonction de Tabsomme qui gère les cotés en longueur du tableau +{ + if (h==0) + { + int s=0; + s+=(G[i+1][h] + G[i-1][h]); + s+=(G[i-1][h+1] + G[i][h+1] + G[i+1][h+1]); + s+=(G[i-1][HAUTEUR] + G[i][HAUTEUR] + G[i+1][HAUTEUR]); + return s; + } + if (h==HAUTEUR) + { + int s=0; + s+=(G[i+1][h] + G[i-1][h]); + s+=(G[i-1][h+1] + G[i][h+1] + G[i+1][h+1]); + s+=(G[i-1][0] + G[i][HAUTEUR] + G[i+1][HAUTEUR]); + return s; + } + return 0; +} + + +int SommeADJcoins(GRILLE G, int i, int h) // sous-fonction de Tabsomme qui gère les coins du tableaux +{ + int s=0; + if (i==0) + { + if (h==0) //coin sup gauche + { + s+=(G[LONGUEUR][HAUTEUR]); + s+=(G[1][0] + G[1][1] + G[0][1]); + s+=(G[LONGUEUR][0] + G[LONGUEUR][1]); + s+=(G[0][HAUTEUR] + G[1][HAUTEUR]); + return s; + } + else if (h==HAUTEUR) //coin inf gauche + { + s+=(G[LONGUEUR][0]); + s+=(G[0][HAUTEUR - 1] + G[1][HAUTEUR - 1] + G[1][HAUTEUR]); + s+=(G[LONGUEUR][HAUTEUR -1] + G[LONGUEUR][HAUTEUR]); + s+=(G[0][0] + G[1][0]); + return s; + } + } + else if (i==LONGUEUR) + { + if (h==0) //coin sup droit + { + s+=(G[0][HAUTEUR]); + s+=(G[LONGUEUR - 1][0] + G[LONGUEUR - 1][0] + G[LONGUEUR - 1][1]); + s+=(G[LONGUEUR][HAUTEUR] + G[LONGUEUR-1][HAUTEUR]); + s+=(G[0][0] + G[0][1]); + return s; + } + else if (h==HAUTEUR) //coin inf droit + { + s+=(G[0][0]); + s+=(G[LONGUEUR - 1][HAUTEUR] + G[LONGUEUR - 1][HAUTEUR - 1] + G[LONGUEUR][HAUTEUR - 1]); + s+=(G[LONGUEUR][0] + G[LONGUEUR - 1][0]); + s+=(G[0][HAUTEUR] + G[0][HAUTEUR - 1]); + return s; + } + } + return 0; +} + + + +void partie(GRILLE G,GRILLE Gsomme){ + BSP_LCD_Clear(LCD_COLOR_BLACK); + BSP_LCD_SetBackColor(LCD_COLOR_BLACK); + Affichagepxl2(G); + HAL_Delay(TEMPS_TOUR); + int stop=0; + while(stop==0){ + HAL_Delay(TEMPS_TOUR); + Tabsomme(G,Gsomme); + Changementetat(G,Gsomme); + Affichagepxl2(G); + BSP_TS_GetState(&TS_State); + if(TS_State.touchDetected != 0){ + BSP_TS_GetState(&TS_State); + if (TS_State.touchX[0]>Gauche_bouton_demarrer && TS_State.touchY[0]<Bas_bouton_demarrer){ + stop=1; + } + } + } +} + + + + +int fin_de_partie(GRILLE G,GRILLE Gsomme){ + int rejouer=0; + int continuer=0; + BSP_LCD_SetTextColor(couleur_stop); + BSP_LCD_FillRect(Gauche_bouton_demarrer,0,Droit_bouton_continuer,Bas_bouton_demarrer); + BSP_LCD_SetTextColor(LCD_COLOR_WHITE); + BSP_LCD_DisplayStringAt(0,0, (uint8_t *)"NEW TRY", RIGHT_MODE); + BSP_LCD_SetTextColor(couleur_demarrer); + BSP_LCD_FillRect(0,0,Droit_bouton_continuer,Bas_bouton_demarrer); + BSP_LCD_SetTextColor(LCD_COLOR_WHITE); + BSP_LCD_DisplayStringAt(0,0, (uint8_t *)"CONTINUE", LEFT_MODE); + HAL_Delay(1000); + while(1){ + BSP_TS_GetState(&TS_State); + if(TS_State.touchDetected==1){ + BSP_TS_GetState(&TS_State); + if (TS_State.touchX[0]<Droit_bouton_continuer && TS_State.touchY[0]<Bas_bouton_demarrer){ + continuer=1; + } + else if (TS_State.touchX[0]>Gauche_bouton_demarrer && TS_State.touchY[0]<Bas_bouton_demarrer){ + rejouer=1; + } + + } + if (continuer==1){ + partie(G,Gsomme); + fin_de_partie(G,Gsomme); + } + if (rejouer ==1){ + break; + } + } + return rejouer; +} + + + + + + + + + + +