Prise en compte des bords pour les projectiles

Problème sur les bords en horizontal positif (x je crois mais je doute de tt actuellement).
On utilise BSP_LCD_GetXSize pour les bornes donc ca m'etonne bcp...
This commit is contained in:
Thomas 2021-04-13 21:45:15 +02:00
parent 9c28bf0677
commit 9619f398a2
7 changed files with 51458 additions and 51380 deletions

View file

@ -122,7 +122,6 @@ void f_projectile(void const * argument);
/* USER CODE BEGIN PFP */ /* USER CODE BEGIN PFP */
/* USER CODE END PFP */ /* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/ /* Private user code ---------------------------------------------------------*/
@ -135,8 +134,9 @@ struct Missile
uint8_t dx; uint8_t dx;
uint8_t dy; uint8_t dy;
uint8_t equipe; uint8_t equipe;
char color; uint32_t color;
uint8_t damage; uint8_t damage;
uint8_t valide;
}; };
struct Joueur struct Joueur
@ -153,6 +153,8 @@ struct Joueur
struct Joueur joueur = {10, 10, 1, 1, 3}; struct Joueur joueur = {10, 10, 1, 1, 3};
uint32_t LCD_COLOR_BACKGROUND = LCD_COLOR_BLACK;
/* USER CODE END 0 */ /* USER CODE END 0 */
@ -171,6 +173,7 @@ int main(void)
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
/* USER CODE END 1 */ /* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/ /* MCU Configuration--------------------------------------------------------*/
@ -218,10 +221,10 @@ int main(void)
LCD_FB_START_ADDRESS + BSP_LCD_GetXSize() * BSP_LCD_GetYSize() * 4); LCD_FB_START_ADDRESS + BSP_LCD_GetXSize() * BSP_LCD_GetYSize() * 4);
BSP_LCD_DisplayOn(); BSP_LCD_DisplayOn();
BSP_LCD_SelectLayer(1); BSP_LCD_SelectLayer(1);
BSP_LCD_Clear(LCD_COLOR_LIGHTGREEN); BSP_LCD_Clear(LCD_COLOR_BLACK);
BSP_LCD_SetFont(&Font12); BSP_LCD_SetFont(&Font12);
BSP_LCD_SetTextColor(LCD_COLOR_BLUE); BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
BSP_LCD_SetBackColor(LCD_COLOR_LIGHTGREEN); BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
@ -1606,28 +1609,33 @@ void f_Joueur_1(void const * argument)
HAL_ADC_Start(&hadc1); HAL_ADC_Start(&hadc1);
// Paramètre de l'écran pour la reprouductibilité
uint32_t LCD_HEIGHT = BSP_LCD_GetXSize();
uint32_t LCD_WIDTH = BSP_LCD_GetYSize();
/* Infinite loop */ /* Infinite loop */
for (;;) for (;;)
{ {
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
BSP_LCD_SetTextColor(LCD_COLOR_BACKGROUND);
BSP_LCD_FillRect(joueur.x, joueur.y, Width, Height); BSP_LCD_FillRect(joueur.x, joueur.y, Width, Height);
// BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp) //BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp)
while (HAL_ADC_PollForConversion(&hadc3, 100) != HAL_OK); // while (HAL_ADC_PollForConversion(&hadc3, 100) != HAL_OK);
joystick_v = HAL_ADC_GetValue(&hadc3); // joystick_v = HAL_ADC_GetValue(&hadc3);
while (HAL_ADC_PollForConversion(&hadc1, 100) != HAL_OK); // while (HAL_ADC_PollForConversion(&hadc1, 100) != HAL_OK);
joystick_h = HAL_ADC_GetValue(&hadc1); // joystick_h = HAL_ADC_GetValue(&hadc1);
if ((joueur.y < 27424- Width - joueur.dy)&&(joystick_h < 1900)) joueur.y += joueur.dy; if ((joueur.y < LCD_HEIGHT- Width - joueur.dy)&&(joystick_h < 1900)) joueur.y += joueur.dy;
if ((joueur.y > Width + joueur.dy)&&(joystick_h > 2100)) joueur.y -= joueur.dy; if ((joueur.y > Width + joueur.dy)&&(joystick_h > 2100)) joueur.y -= joueur.dy;
if ((joueur.x > Height + joueur.dx)&&(joystick_v < 1900)) joueur.x += joueur.dx; if ((joueur.x > LCD_WIDTH + joueur.dx)&&(joystick_v < 1900)) joueur.x += joueur.dx;
if ((joueur.x < 480-Height - joueur.dx)&&(joystick_v > 2100)) joueur.x -= joueur.dx; if ((joueur.x < 480-Height - joueur.dx)&&(joystick_v > 2100)) joueur.x -= joueur.dx;
BSP_LCD_SetTextColor(LCD_COLOR_BLACK); BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
BSP_LCD_FillRect(joueur.x, joueur.y, Width, Height); BSP_LCD_FillRect(joueur.x, joueur.y, Width, Height);
if (xQueueReceive(Queue_JHandle, &missile, 0) == pdPASS) if (xQueueReceive(Queue_JHandle, &missile, 0) == pdPASS)
@ -1636,8 +1644,8 @@ void f_Joueur_1(void const * argument)
if (joueur.health == 0)xQueueSend(Queue_FHandle,&stop,0); if (joueur.health == 0)xQueueSend(Queue_FHandle,&stop,0);
// TODO La condition sur une entrée analogique pour envoyer un missile // TODO La condition sur une entrée analogique pour envoyer un missile
struct Missile missile = {joueur.x, joueur.y,joueur.missile.dx, joueur.missile.dy, 1, joueur.missile.color, joueur.missile.damage}; // struct Missile missile = {joueur.x, joueur.y,joueur.missile.dx, joueur.missile.dy, 1, joueur.missile.color, joueur.missile.damage};
xQueueSend(Queue_NHandle,&missile,0); // xQueueSend(Queue_NHandle,&missile,0);
vTaskDelayUntil(&xLastWakeTime, xPeriodeTache); vTaskDelayUntil(&xLastWakeTime, xPeriodeTache);
} }
/* USER CODE END f_Joueur_1 */ /* USER CODE END f_Joueur_1 */
@ -1674,29 +1682,75 @@ void f_projectile(void const * argument)
{ {
/* USER CODE BEGIN f_projectile */ /* USER CODE BEGIN f_projectile */
TickType_t xLastWakeTime; TickType_t xLastWakeTime;
const TickType_t xPeriodeTache = 10; const TickType_t xPeriodeTache = 5000;
/* Infinite loop */ /* Infinite loop */
struct Missile liste_missile[50]; struct Missile liste_missile[20];
struct Missile missile; struct Missile missile = {70, 70, 0, 1, 0, LCD_COLOR_WHITE, 1,1};
uint8_t indice = 0; uint8_t indice = 1;
liste_missile[0] = missile;
// Paramètre de l'écran pour la reprouductibilité
uint32_t LCD_HEIGHT = 200; //BSP_LCD_GetXSize();
uint32_t LCD_WIDTH = 200; //BSP_LCD_GetYSize();
for (;;) for (;;)
{ {
xQueueReceive(Queue_NHandle, &missile, 0); //xQueueReceive(Queue_NHandle, &missile, 0);
liste_missile[indice++] = missile; //liste_missile[indice++] = missile;
for (int i=0;i<= indice;i++)
for (int i=0;i< indice;i++)
{ {
liste_missile[i].x = liste_missile[i].dx + liste_missile[i].x;
liste_missile[i].y = liste_missile[i].dy + liste_missile[i].y; // Si le missile n'est pas sur un bord
if ((liste_missile[i].x == joueur.x)&&(liste_missile[i].y == joueur.y)) if (liste_missile[i].valide == 1)
{ {
xQueueSend(Queue_JHandle, &liste_missile+indice,0); // Si le missile appartient au joueur :
// TODO Une petite animation d'explosion ? if (liste_missile[i].equipe == 0)
{
if ((liste_missile[i].x > 1)&&(liste_missile[i].x < LCD_HEIGHT-1)&&(liste_missile[i].y < LCD_WIDTH-1)&&(liste_missile[i].y > 1))
{
BSP_LCD_DrawPixel(liste_missile[i].x, liste_missile[i].y, LCD_COLOR_BACKGROUND);
liste_missile[i].x = liste_missile[i].x - liste_missile[i].dx ;
liste_missile[i].y = liste_missile[i].y - liste_missile[i].dy;
BSP_LCD_DrawPixel(liste_missile[i].x, liste_missile[i].y, liste_missile[i].color);
}
//TODO test sur tous les ennemis
else
{
liste_missile[i].valide = 0;
BSP_LCD_DrawPixel(liste_missile[i].x, liste_missile[i].y, LCD_COLOR_BACKGROUND);
}
}
// Si le missile appartient aux ennemis
else if (liste_missile[i].equipe == 1)
{
if ((liste_missile[i].x == joueur.x)&&(liste_missile[i].y == joueur.y))
{
xQueueSend(Queue_JHandle, &liste_missile+indice,0);
liste_missile[i].valide = 0;
// TODO Une petite animation d'explosion ?
}
if ((liste_missile[i].x > 1)&&(liste_missile[i].x < LCD_HEIGHT-1)&&(liste_missile[i].y < LCD_WIDTH-1)&&(liste_missile[i].y > 1))
{
BSP_LCD_DrawPixel(liste_missile[i].x, liste_missile[i].y, LCD_COLOR_BACKGROUND);
liste_missile[i].x = liste_missile[i].x + liste_missile[i].dx ;
liste_missile[i].y = liste_missile[i].y + liste_missile[i].dy;
BSP_LCD_DrawPixel(liste_missile[i].x, liste_missile[i].y, liste_missile[i].color);
}
else
{
liste_missile[i].valide = 0;
BSP_LCD_DrawPixel(liste_missile[i].x, liste_missile[i].y, LCD_COLOR_BACKGROUND);
}
}
} }
} }
vTaskDelayUntil(&xLastWakeTime, xPeriodeTache);
vTaskDelayUntil(&xLastWakeTime, xPeriodeTache);
} }
/* USER CODE END f_projectile */ /* USER CODE END f_projectile */
} }

Binary file not shown.

View file

@ -1,30 +1,30 @@
main.c:164:5:main 280 static main.c:166:5:main 280 static
main.c:338:6:SystemClock_Config 216 static main.c:341:6:SystemClock_Config 216 static
main.c:414:13:MX_ADC1_Init 24 static main.c:417:13:MX_ADC1_Init 24 static
main.c:464:13:MX_ADC3_Init 24 static main.c:467:13:MX_ADC3_Init 24 static
main.c:514:13:MX_CRC_Init 8 static main.c:517:13:MX_CRC_Init 8 static
main.c:545:13:MX_DAC_Init 16 static main.c:548:13:MX_DAC_Init 16 static
main.c:583:13:MX_DMA2D_Init 8 static main.c:586:13:MX_DMA2D_Init 8 static
main.c:620:13:MX_I2C1_Init 8 static main.c:623:13:MX_I2C1_Init 8 static
main.c:666:13:MX_I2C3_Init 8 static main.c:669:13:MX_I2C3_Init 8 static
main.c:712:13:MX_LTDC_Init 64 static main.c:715:13:MX_LTDC_Init 64 static
main.c:774:13:MX_RNG_Init 8 static main.c:777:13:MX_RNG_Init 8 static
main.c:800:13:MX_RTC_Init 80 static main.c:803:13:MX_RTC_Init 80 static
main.c:892:13:MX_SPI2_Init 8 static main.c:895:13:MX_SPI2_Init 8 static
main.c:932:13:MX_TIM1_Init 40 static main.c:935:13:MX_TIM1_Init 40 static
main.c:979:13:MX_TIM2_Init 40 static main.c:982:13:MX_TIM2_Init 40 static
main.c:1024:13:MX_TIM3_Init 88 static main.c:1027:13:MX_TIM3_Init 88 static
main.c:1090:13:MX_TIM5_Init 40 static main.c:1093:13:MX_TIM5_Init 40 static
main.c:1135:13:MX_TIM8_Init 112 static main.c:1138:13:MX_TIM8_Init 112 static
main.c:1214:13:MX_UART7_Init 8 static main.c:1217:13:MX_UART7_Init 8 static
main.c:1249:13:MX_USART1_UART_Init 8 static main.c:1252:13:MX_USART1_UART_Init 8 static
main.c:1284:13:MX_USART6_UART_Init 8 static main.c:1287:13:MX_USART6_UART_Init 8 static
main.c:1315:13:MX_FMC_Init 40 static main.c:1318:13:MX_FMC_Init 40 static
main.c:1366:13:MX_GPIO_Init 72 static main.c:1369:13:MX_GPIO_Init 72 static
main.c:1543:5:envoie_score 16 static main.c:1546:5:envoie_score 16 static
main.c:1559:6:f_GameMaster 24 static main.c:1562:6:f_GameMaster 24 static
main.c:1587:6:f_Joueur_1 80 static main.c:1590:6:f_Joueur_1 80 static
main.c:1653:6:f_block_enemie 24 static main.c:1661:6:f_block_enemie 24 static
main.c:1673:6:f_projectile 544 static main.c:1681:6:f_projectile 384 static
main.c:1712:6:HAL_TIM_PeriodElapsedCallback 16 static main.c:1766:6:HAL_TIM_PeriodElapsedCallback 16 static
main.c:1729:6:Error_Handler 4 static,ignoring_inline_asm main.c:1783:6:Error_Handler 4 static,ignoring_inline_asm

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff