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...
doc
Thomas 3 years ago
parent 9c28bf0677
commit 9619f398a2

@ -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.

@ -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
Loading…
Cancel
Save