
Pong by Letartre
Dependencies: BSP_DISCO_F746NG
main.cpp@4:4b949c71091e, 2021-06-22 (annotated)
- Committer:
- quentlet
- Date:
- Tue Jun 22 12:26:47 2021 +0000
- Revision:
- 4:4b949c71091e
- Parent:
- 3:9f66aabe7b3b
Pong
Who changed what in which revision?
User | Revision | Line number | New 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 |