diff --git a/code/constant.h b/code/constant.h index bdd60f5c6cbbb9b848fdb8e7b8af3c2b682fd3cf..d539ef6e1eeaa9e456b8ba69270eac5fc18e6f5e 100644 --- a/code/constant.h +++ b/code/constant.h @@ -30,15 +30,40 @@ #define SOLDIER_WIDTH 78 /** - * \brief Taille du soldat + * \brief Hauteur de l'ennemie */ -#define ENEMY_SIZE 100 +#define ENEMY_HEIGHT 88 +/** + * \brief Largeur de l'ennemie + */ +#define ENEMY_WIDTH 78 + +/** + * \brief Hauteur de l'ennemie du type 4 + */ +#define ENEMY_T4_HEIGHT 68 + +/** + * \brief Largeur de l'ennemie du type 4 + */ +#define ENEMY_T4_WIDTH 58 + +/** + * \brief Taille de l'avion de ravitaillement + */ #define PLANE_SIZE 50 +/** + * \brief Taille de l'avion de ravitaillement + */ #define POWERUP_SIZE 50 +/** + * \brief Vitesse de chute du power up + */ #define POWERUP_SPEED 0.5 + /** * \brief Hauteur de la balle */ @@ -54,6 +79,19 @@ */ #define ENEMY_SPEED 1 +/** + * \brief Vitesse d'un ennemi de type 3 +*/ +#define ENEMY_T3_SPEED 3 + +/** + * \brief Vitesse d'un ennemi de type 2 +*/ +#define ENEMY_T2_SPEED 0.5 + +/** + * \brief Vitesse de l'avion de ravitaillement + */ #define PLANE_SPEED 1 /** @@ -61,6 +99,9 @@ */ #define SOLDIER_SPEED 2 +/** + * \brief Vitesse du accroupie +*/ #define SOLDIER_SPEED_CTRL 0.5f /** diff --git a/code/enemy.c b/code/enemy.c index 613c07ed5436483bc21d7dcdddb56c9ca96dd5db..4d67d6e07de851c841a8216d558358893d5b2072 100644 --- a/code/enemy.c +++ b/code/enemy.c @@ -11,15 +11,18 @@ void init_enemy(enemy_t *enemy) { srand(time(NULL)); - int random = rand()%3+0; + int random = rand()%4+0; if (random == 1) { init_enemyType1(enemy); }else if (random == 2){ init_enemyType2(enemy); - }else{ + }else if (random == 3){ init_enemyType3(enemy); - } + }else{ + init_enemyType4(enemy); + } + enemy->is_moving = 0; } void init_enemyType1(enemy_t *enemy) @@ -28,15 +31,15 @@ void init_enemyType1(enemy_t *enemy) int random = rand()%2+0; if (random == 1) { - init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_SIZE*2, ENEMY_SIZE, ENEMY_SIZE, ENEMY_SPEED, 1); + init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_SPEED, 1); }else{ - init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_SIZE*2, ENEMY_SIZE, ENEMY_SIZE, ENEMY_SPEED, 1); + init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_SPEED, 1); } enemy->type = 1; enemy->DestEnemy.x = enemy->sprite.x; enemy->DestEnemy.y = enemy->sprite.y; - enemy->DestEnemy.w = ENEMY_SIZE; - enemy->DestEnemy.h = ENEMY_SIZE; + enemy->DestEnemy.w = ENEMY_WIDTH; + enemy->DestEnemy.h = ENEMY_HEIGHT; } void init_enemyType2(enemy_t *enemy) @@ -45,15 +48,15 @@ void init_enemyType2(enemy_t *enemy) int random = rand()%2+0; if (random == 1) { - init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_SIZE*2, ENEMY_SIZE, ENEMY_SIZE, 1, 10); + init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_T2_SPEED, 10); }else{ - init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_SIZE*2, ENEMY_SIZE, ENEMY_SIZE,1, 10); + init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT,ENEMY_T2_SPEED, 10); } enemy->type = 2; enemy->DestEnemy.x = enemy->sprite.x; enemy->DestEnemy.y = enemy->sprite.y; - enemy->DestEnemy.w = ENEMY_SIZE; - enemy->DestEnemy.h = ENEMY_SIZE; + enemy->DestEnemy.w = ENEMY_WIDTH; + enemy->DestEnemy.h = ENEMY_HEIGHT; } void init_enemyType3(enemy_t *enemy) @@ -62,20 +65,37 @@ void init_enemyType3(enemy_t *enemy) int random = rand()%2+0; if (random == 1) { - init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_SIZE*2, ENEMY_SIZE, ENEMY_SIZE, 5, 1); + init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_T3_SPEED, 1); }else{ - init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_SIZE*2, ENEMY_SIZE, ENEMY_SIZE,5, 1); + init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT,ENEMY_T3_SPEED, 1); } enemy->type = 3; enemy->DestEnemy.x = enemy->sprite.x; enemy->DestEnemy.y = enemy->sprite.y; - enemy->DestEnemy.w = ENEMY_SIZE; - enemy->DestEnemy.h = ENEMY_SIZE; + enemy->DestEnemy.w = ENEMY_WIDTH; + enemy->DestEnemy.h = ENEMY_HEIGHT; +} + +void init_enemyType4(enemy_t *enemy) +{ + srand(time(NULL)); + int random = rand()%2+0; + if (random == 1) + { + init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_T4_HEIGHT*2-40, ENEMY_T4_WIDTH, ENEMY_T4_HEIGHT, 1, 1); + }else{ + init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_T4_HEIGHT*2-40, ENEMY_T4_WIDTH, ENEMY_T4_HEIGHT,1, 1); + } + enemy->type = 4; + enemy->DestEnemy.x = enemy->sprite.x; + enemy->DestEnemy.y = enemy->sprite.y; + enemy->DestEnemy.w = ENEMY_T4_WIDTH; + enemy->DestEnemy.h = ENEMY_T4_HEIGHT; } void enemy_walk(enemy_t *enemy,soldier_t *soldier) { - if (sprites_collide(&enemy->sprite, &soldier->sprite) != 1) + if (sprites_collide(&enemy->sprite, &soldier->sprite) != 1 && enemy->is_moving!=0) { if(soldier->sprite.x > enemy->sprite.x){ enemy->sprite.x += enemy->sprite.v; diff --git a/code/enemy.h b/code/enemy.h index 3ceb6562c7266b29fa935d65ba7fe99be60b20f0..f10b09e89b5361d6a263e7259540928ea7cdca60 100644 --- a/code/enemy.h +++ b/code/enemy.h @@ -14,6 +14,7 @@ struct enemy_s{ int hp; /*!<Point de vie */ SDL_Rect DestEnemy; int type; + int is_moving; }; /** * \brief Type qui correspond au paramètre du soldat @@ -35,4 +36,6 @@ void init_enemyType2(enemy_t *enemy); void init_enemyType3(enemy_t *enemy); +void init_enemyType4(enemy_t *enemy); + #endif \ No newline at end of file diff --git a/code/sprite.h b/code/sprite.h index a0f7446624167f6b6c5dfe260a19f66a93fd4739..d63b931b54061489e41edc352e77ad2af2a9c99d 100644 --- a/code/sprite.h +++ b/code/sprite.h @@ -16,8 +16,8 @@ struct sprite_s{ float h; /*!<Hauteur du sprite */ float w; /*!<Largeur du sprite */ float v; /*!<Vitesse vertical */ - int is_visible; /*!<Visible ou non, 0 si visible et 1 si non visible */ - int hp; + int is_visible; /*!<Visible ou non, 0 si invisible et 1 si visible */ + int hp; /*!<Point de vie */ }; /** * \brief Type qui correspond au paramètre du sprite diff --git a/code/world_data.c b/code/world_data.c index 8a45b9d43da22223ce44104c1c73f1e176adf8b4..14f6d72e438ff02d270ff5e2096d5aa1ffe8e4d2 100644 --- a/code/world_data.c +++ b/code/world_data.c @@ -135,7 +135,7 @@ void refresh_data(world_t *world) - //enemy_touch_soldier(&world->enemy,&world->soldier); + enemy_touch_soldier(&world->enemy,&world->soldier); plane_dead(&world->supplying,&world->soldier);