Prise en compte des bords pour les projectiles

doc
Thomas 3 years ago
parent 9c28bf0677
commit c829640a12

@ -122,7 +122,6 @@ void f_projectile(void const * argument);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
@ -135,8 +134,9 @@ struct Missile
uint8_t dx;
uint8_t dy;
uint8_t equipe;
char color;
uint32_t color;
uint8_t damage;
uint8_t valide;
};
struct Joueur
@ -153,6 +153,8 @@ struct Joueur
struct Joueur joueur = {10, 10, 1, 1, 3};
uint32_t LCD_COLOR_BACKGROUND = LCD_COLOR_BLACK;
/* USER CODE END 0 */
@ -171,6 +173,7 @@ int main(void)
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
@ -218,10 +221,10 @@ int main(void)
LCD_FB_START_ADDRESS + BSP_LCD_GetXSize() * BSP_LCD_GetYSize() * 4);
BSP_LCD_DisplayOn();
BSP_LCD_SelectLayer(1);
BSP_LCD_Clear(LCD_COLOR_LIGHTGREEN);
BSP_LCD_Clear(LCD_COLOR_BLACK);
BSP_LCD_SetFont(&Font12);
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());
@ -1606,28 +1609,33 @@ void f_Joueur_1(void const * argument)
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 */
for (;;)
{
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
BSP_LCD_SetTextColor(LCD_COLOR_BACKGROUND);
BSP_LCD_FillRect(joueur.x, joueur.y, Width, Height);
// BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp)
while (HAL_ADC_PollForConversion(&hadc3, 100) != HAL_OK);
joystick_v = HAL_ADC_GetValue(&hadc3);
while (HAL_ADC_PollForConversion(&hadc1, 100) != HAL_OK);
joystick_h = HAL_ADC_GetValue(&hadc1);
//BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp)
// while (HAL_ADC_PollForConversion(&hadc3, 100) != HAL_OK);
// joystick_v = HAL_ADC_GetValue(&hadc3);
// while (HAL_ADC_PollForConversion(&hadc1, 100) != HAL_OK);
// 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.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;
BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
BSP_LCD_FillRect(joueur.x, joueur.y, Width, Height);
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);
// 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};
xQueueSend(Queue_NHandle,&missile,0);
// 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);
vTaskDelayUntil(&xLastWakeTime, xPeriodeTache);
}
/* USER CODE END f_Joueur_1 */
@ -1674,29 +1682,75 @@ void f_projectile(void const * argument)
{
/* USER CODE BEGIN f_projectile */
TickType_t xLastWakeTime;
const TickType_t xPeriodeTache = 10;
const TickType_t xPeriodeTache = 5000;
/* Infinite loop */
struct Missile liste_missile[50];
struct Missile missile;
uint8_t indice = 0;
struct Missile liste_missile[20];
struct Missile missile = {70, 70, 0, 1, 0, LCD_COLOR_WHITE, 1,1};
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 (;;)
{
xQueueReceive(Queue_NHandle, &missile, 0);
liste_missile[indice++] = missile;
for (int i=0;i<= indice;i++)
//xQueueReceive(Queue_NHandle, &missile, 0);
//liste_missile[indice++] = missile;
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;
if ((liste_missile[i].x == joueur.x)&&(liste_missile[i].y == joueur.y))
// Si le missile n'est pas sur un bord
if (liste_missile[i].valide == 1)
{
xQueueSend(Queue_JHandle, &liste_missile+indice,0);
// TODO Une petite animation d'explosion ?
// Si le missile appartient au joueur :
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 */
}

Binary file not shown.

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