Pong by Letartre

Dependencies:   BSP_DISCO_F746NG

Committer:
quentlet
Date:
Tue Jun 22 12:26:47 2021 +0000
Revision:
4:4b949c71091e
Parent:
3:9f66aabe7b3b
Pong

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bcostm 0:9933f7db9a9b 1 #include "mbed.h"
Jerome Coutant 3:9f66aabe7b3b 2 #include "stm32746g_discovery_lcd.h"
Jerome Coutant 3:9f66aabe7b3b 3 #include "stm32746g_discovery_ts.h"
quentlet 4:4b949c71091e 4 #include "stdlib.h"
bcostm 0:9933f7db9a9b 5
quentlet 4:4b949c71091e 6
quentlet 4:4b949c71091e 7 void Terrain(int xg, int yg, int xd, int yd, int x1, int y1);
quentlet 4:4b949c71091e 8
quentlet 4:4b949c71091e 9
quentlet 4:4b949c71091e 10 int main() {
quentlet 4:4b949c71091e 11
quentlet 4:4b949c71091e 12 //Manette gauche
quentlet 4:4b949c71091e 13 DigitalIn d0(D0);
quentlet 4:4b949c71091e 14 DigitalIn d2(D2);
quentlet 4:4b949c71091e 15 //Manette Droite
quentlet 4:4b949c71091e 16 DigitalIn d5(D5);
quentlet 4:4b949c71091e 17 DigitalIn d7(D7);
quentlet 4:4b949c71091e 18
bcostm 0:9933f7db9a9b 19 TS_StateTypeDef TS_State;
bcostm 0:9933f7db9a9b 20 uint8_t status;
quentlet 4:4b949c71091e 21 int TouchScreen=1;
quentlet 4:4b949c71091e 22 int x1=240, y1=136, depx=2, depy=2;
quentlet 4:4b949c71091e 23 int xg=0, yg=96, xd=474, yd=96;
quentlet 4:4b949c71091e 24 int direcx=1, direcy=1;
bcostm 0:9933f7db9a9b 25
quentlet 4:4b949c71091e 26 srand(time(NULL));
Jerome Coutant 3:9f66aabe7b3b 27 BSP_LCD_Init();
Jerome Coutant 3:9f66aabe7b3b 28 BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
Jerome Coutant 3:9f66aabe7b3b 29 BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
quentlet 4:4b949c71091e 30
Jerome Coutant 3:9f66aabe7b3b 31 status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
quentlet 4:4b949c71091e 32
quentlet 4:4b949c71091e 33 BSP_LCD_Clear(LCD_COLOR_WHITE);
quentlet 4:4b949c71091e 34 BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
quentlet 4:4b949c71091e 35 BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
quentlet 4:4b949c71091e 36 BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"PONG!!", CENTER_MODE);
quentlet 4:4b949c71091e 37 HAL_Delay(2000);
quentlet 4:4b949c71091e 38
quentlet 4:4b949c71091e 39 BSP_LCD_Clear(LCD_COLOR_BLACK);
quentlet 4:4b949c71091e 40 BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
Jerome Coutant 3:9f66aabe7b3b 41 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
quentlet 4:4b949c71091e 42 BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"Start ?", CENTER_MODE);
quentlet 4:4b949c71091e 43 HAL_Delay(500);
quentlet 4:4b949c71091e 44
quentlet 4:4b949c71091e 45 //Attente avant de toucher l'écran
quentlet 4:4b949c71091e 46 while(TouchScreen){
Jerome Coutant 3:9f66aabe7b3b 47 BSP_TS_GetState(&TS_State);
bcostm 0:9933f7db9a9b 48 if (TS_State.touchDetected) {
quentlet 4:4b949c71091e 49 TouchScreen = 0;
bcostm 0:9933f7db9a9b 50 }
bcostm 0:9933f7db9a9b 51 }
quentlet 4:4b949c71091e 52 TouchScreen=1;
quentlet 4:4b949c71091e 53
quentlet 4:4b949c71091e 54 //départ alétoire de la balle
quentlet 4:4b949c71091e 55 direcx = rand() % (50+1);
quentlet 4:4b949c71091e 56 if (direcx ==0%2) {depx=-depx;}
quentlet 4:4b949c71091e 57 direcy = rand() % (50+1);
quentlet 4:4b949c71091e 58 if (direcy ==0%2) {depy=-depy;}
quentlet 4:4b949c71091e 59
quentlet 4:4b949c71091e 60 Terrain(xg, yg, xd, yd, x1, y1);
quentlet 4:4b949c71091e 61 HAL_Delay(500);
quentlet 4:4b949c71091e 62
quentlet 4:4b949c71091e 63 while(1){
quentlet 4:4b949c71091e 64
quentlet 4:4b949c71091e 65 //Déplacement haut de la raquette gauche
quentlet 4:4b949c71091e 66 if(d0==1 && yg>=15) yg-=5;
quentlet 4:4b949c71091e 67 //Déplacement bas de la raquette gauche
quentlet 4:4b949c71091e 68 else if(d2==1 && yg<=200) yg+=5;
quentlet 4:4b949c71091e 69
quentlet 4:4b949c71091e 70 //Déplacement haut de la raquette droite
quentlet 4:4b949c71091e 71 if(d7==1 && yd>=15) yd-=5;
quentlet 4:4b949c71091e 72 //Déplacement bas de la raquette droite
quentlet 4:4b949c71091e 73 else if(d5==1 && yd<=200) yd+=5;
quentlet 4:4b949c71091e 74
quentlet 4:4b949c71091e 75 //Limite basse
quentlet 4:4b949c71091e 76 if(y1>=264) {
quentlet 4:4b949c71091e 77 depy=-depy;
quentlet 4:4b949c71091e 78 }
quentlet 4:4b949c71091e 79
quentlet 4:4b949c71091e 80 //Limite haute
quentlet 4:4b949c71091e 81 else if(y1<=6) {
quentlet 4:4b949c71091e 82 depy=-depy;
quentlet 4:4b949c71091e 83 }
quentlet 4:4b949c71091e 84
quentlet 4:4b949c71091e 85 //Limite droite
quentlet 4:4b949c71091e 86 else if(x1>=470) {
quentlet 4:4b949c71091e 87 //Si on touche la raquette
quentlet 4:4b949c71091e 88 if (BSP_LCD_ReadPixel(x1+7, y1)==0xFFFFFFFF) {
quentlet 4:4b949c71091e 89 //Accélération de la balle
quentlet 4:4b949c71091e 90 if (depx>0 && depx<5) depx+=1;
quentlet 4:4b949c71091e 91 else if (depx<0 && depx>-5) depx-=1;
quentlet 4:4b949c71091e 92 depx=-depx;
quentlet 4:4b949c71091e 93 }
quentlet 4:4b949c71091e 94 //Si on touche le bord
quentlet 4:4b949c71091e 95 else if (BSP_LCD_ReadPixel(x1+7, y1)==0xFF000000){
quentlet 4:4b949c71091e 96 BSP_LCD_Clear(LCD_COLOR_WHITE);
quentlet 4:4b949c71091e 97 BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
quentlet 4:4b949c71091e 98 BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
quentlet 4:4b949c71091e 99 BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"Rejouer ?", CENTER_MODE);
quentlet 4:4b949c71091e 100 HAL_Delay(1000);
quentlet 4:4b949c71091e 101
quentlet 4:4b949c71091e 102 while(TouchScreen){
quentlet 4:4b949c71091e 103 BSP_TS_GetState(&TS_State);
quentlet 4:4b949c71091e 104 if (TS_State.touchDetected) {
quentlet 4:4b949c71091e 105 TouchScreen = 0;
quentlet 4:4b949c71091e 106 }
quentlet 4:4b949c71091e 107 }
quentlet 4:4b949c71091e 108 TouchScreen=1;
quentlet 4:4b949c71091e 109
quentlet 4:4b949c71091e 110 //Ré-initialisation
quentlet 4:4b949c71091e 111 x1=240;
quentlet 4:4b949c71091e 112 y1=136;
quentlet 4:4b949c71091e 113 xg=0;
quentlet 4:4b949c71091e 114 yg=96;
quentlet 4:4b949c71091e 115 xd=474;
quentlet 4:4b949c71091e 116 yd=96;
quentlet 4:4b949c71091e 117 depx=2;
quentlet 4:4b949c71091e 118 depy=2;
quentlet 4:4b949c71091e 119
quentlet 4:4b949c71091e 120 //Départ aléatoire
quentlet 4:4b949c71091e 121 direcx = rand() % (50+1);
quentlet 4:4b949c71091e 122 if (direcx ==1%2) {depx=-depx;}
quentlet 4:4b949c71091e 123 direcy = rand() % (50+1);
quentlet 4:4b949c71091e 124 if (direcy ==1%2) {depy=-depy;}
quentlet 4:4b949c71091e 125
quentlet 4:4b949c71091e 126 BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
quentlet 4:4b949c71091e 127 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
quentlet 4:4b949c71091e 128 Terrain(xg, yg, xd, yd, x1, y1);
quentlet 4:4b949c71091e 129 HAL_Delay(500);
quentlet 4:4b949c71091e 130 }
quentlet 4:4b949c71091e 131 }
quentlet 4:4b949c71091e 132
quentlet 4:4b949c71091e 133 //Limite gauche
quentlet 4:4b949c71091e 134 else if(x1<=10) {
quentlet 4:4b949c71091e 135 //Si on touche la raquette
quentlet 4:4b949c71091e 136 if (BSP_LCD_ReadPixel(x1-7, y1)==0xFFFFFFFF) {
quentlet 4:4b949c71091e 137 //Accélération de la balle
quentlet 4:4b949c71091e 138 if (depx>0 && depx<5) depx+=1;
quentlet 4:4b949c71091e 139 else if (depx<0 && depx>-5) depx-=1;
quentlet 4:4b949c71091e 140 depx=-depx;
quentlet 4:4b949c71091e 141 }
quentlet 4:4b949c71091e 142 //Si on touche le bord
quentlet 4:4b949c71091e 143 else if (BSP_LCD_ReadPixel(x1-7, y1)==0xFF000000) {
quentlet 4:4b949c71091e 144 BSP_LCD_Clear(LCD_COLOR_WHITE);
quentlet 4:4b949c71091e 145 BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
quentlet 4:4b949c71091e 146 BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
quentlet 4:4b949c71091e 147 BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"Rejouer ?", CENTER_MODE);
quentlet 4:4b949c71091e 148 HAL_Delay(1000);
quentlet 4:4b949c71091e 149
quentlet 4:4b949c71091e 150 while(TouchScreen){
quentlet 4:4b949c71091e 151 BSP_TS_GetState(&TS_State);
quentlet 4:4b949c71091e 152 if (TS_State.touchDetected) {
quentlet 4:4b949c71091e 153 TouchScreen = 0;
quentlet 4:4b949c71091e 154 }
quentlet 4:4b949c71091e 155 }
quentlet 4:4b949c71091e 156 TouchScreen=1;
quentlet 4:4b949c71091e 157
quentlet 4:4b949c71091e 158 //Ré-initialisation
quentlet 4:4b949c71091e 159 x1=240;
quentlet 4:4b949c71091e 160 y1=136;
quentlet 4:4b949c71091e 161 xg=0;
quentlet 4:4b949c71091e 162 yg=96;
quentlet 4:4b949c71091e 163 xd=474;
quentlet 4:4b949c71091e 164 yd=96;
quentlet 4:4b949c71091e 165 depx=2;
quentlet 4:4b949c71091e 166 depy=2;
quentlet 4:4b949c71091e 167
quentlet 4:4b949c71091e 168 //Départ aléatoire
quentlet 4:4b949c71091e 169 direcx = rand() % (50+1);
quentlet 4:4b949c71091e 170 if (direcx ==1%2) {depx=-depx;}
quentlet 4:4b949c71091e 171 direcy = rand() % (50+1);
quentlet 4:4b949c71091e 172 if (direcy ==1%2) {depy=-depy;}
quentlet 4:4b949c71091e 173
quentlet 4:4b949c71091e 174 BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
quentlet 4:4b949c71091e 175 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
quentlet 4:4b949c71091e 176 Terrain(xg, yg, xd, yd, x1, y1);
quentlet 4:4b949c71091e 177 HAL_Delay(500);
quentlet 4:4b949c71091e 178 }
quentlet 4:4b949c71091e 179 }
quentlet 4:4b949c71091e 180 x1+=depx;
quentlet 4:4b949c71091e 181 y1+=depy;
quentlet 4:4b949c71091e 182 Terrain(xg, yg, xd, yd, x1, y1);
quentlet 4:4b949c71091e 183 }
bcostm 0:9933f7db9a9b 184 }
quentlet 4:4b949c71091e 185
quentlet 4:4b949c71091e 186 void Terrain(int xg, int yg, int xd, int yd, int x1, int y1) {
quentlet 4:4b949c71091e 187 //Affichage de...
quentlet 4:4b949c71091e 188 BSP_LCD_Clear(LCD_COLOR_BLACK);
quentlet 4:4b949c71091e 189 //Raquettes
quentlet 4:4b949c71091e 190 BSP_LCD_FillRect(xg, yg, 6, 80);
quentlet 4:4b949c71091e 191 BSP_LCD_FillRect(xd, yd, 6, 80);
quentlet 4:4b949c71091e 192 //Filet
quentlet 4:4b949c71091e 193 BSP_LCD_FillRect(239, 0, 3, 271);
quentlet 4:4b949c71091e 194 //Balle
quentlet 4:4b949c71091e 195 BSP_LCD_FillCircle(x1, y1, 6);
quentlet 4:4b949c71091e 196 HAL_Delay(15);
quentlet 4:4b949c71091e 197 }
quentlet 4:4b949c71091e 198