Updated Space Invaders on the mbed. Improved upon Michael Son's "Mbed Space Invaders" at https://os.mbed.com/users/michaeljson/notebook/mbed-space-invaders/.
Dependencies: mbed wave_player mbed-rtos 4DGL-uLCD-SE SparkfunAnalogJoystick SDFileSystem LSM9DS1_Library_cal_updated
Fork of Two-PlayerSpaceInvaders by
test
enemy.cpp@0:3817adfaeb06, 2016-03-15 (annotated)
- Committer:
- michaeljson
- Date:
- Tue Mar 15 19:09:51 2016 +0000
- Revision:
- 0:3817adfaeb06
- Child:
- 16:e4e6515bdabb
Upload Mbed Space Invader version 1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
michaeljson | 0:3817adfaeb06 | 1 | #include "enemy.h" |
michaeljson | 0:3817adfaeb06 | 2 | #include "missile.h" |
michaeljson | 0:3817adfaeb06 | 3 | |
michaeljson | 0:3817adfaeb06 | 4 | void draw_enemy(int blk_x, int blk_y, int enemy_color, int e_width, int e_height) |
michaeljson | 0:3817adfaeb06 | 5 | { |
michaeljson | 0:3817adfaeb06 | 6 | uLCD.filled_rectangle(blk_x,blk_y,blk_x+e_width,blk_y-e_height,enemy_color); |
michaeljson | 0:3817adfaeb06 | 7 | } |
michaeljson | 0:3817adfaeb06 | 8 | |
michaeljson | 0:3817adfaeb06 | 9 | void erase_enemy(int blk_x, int blk_y, int enemy_color, int e_width, int e_height) |
michaeljson | 0:3817adfaeb06 | 10 | { |
michaeljson | 0:3817adfaeb06 | 11 | uLCD.filled_rectangle(blk_x,blk_y,blk_x+e_width,blk_y-e_height,BACKGROUND_COLOR); |
michaeljson | 0:3817adfaeb06 | 12 | } |
michaeljson | 0:3817adfaeb06 | 13 | |
michaeljson | 0:3817adfaeb06 | 14 | int move_enemy(enemy_t * g, int MOVE_DOWN, int DIRECTION) |
michaeljson | 0:3817adfaeb06 | 15 | { |
michaeljson | 0:3817adfaeb06 | 16 | if (g->status == ENEMY_ALIVE) |
michaeljson | 0:3817adfaeb06 | 17 | { |
michaeljson | 0:3817adfaeb06 | 18 | if (DIRECTION == 1) |
michaeljson | 0:3817adfaeb06 | 19 | { |
michaeljson | 0:3817adfaeb06 | 20 | enemy_erase(g); |
michaeljson | 0:3817adfaeb06 | 21 | g->enemy_blk_x += 1; |
michaeljson | 0:3817adfaeb06 | 22 | enemy_show(g); |
michaeljson | 0:3817adfaeb06 | 23 | |
michaeljson | 0:3817adfaeb06 | 24 | if (g->enemy_blk_y >= 110) |
michaeljson | 0:3817adfaeb06 | 25 | { |
michaeljson | 0:3817adfaeb06 | 26 | MOVE_DOWN = 2; |
michaeljson | 0:3817adfaeb06 | 27 | } |
michaeljson | 0:3817adfaeb06 | 28 | } |
michaeljson | 0:3817adfaeb06 | 29 | else if (DIRECTION == 2) |
michaeljson | 0:3817adfaeb06 | 30 | { |
michaeljson | 0:3817adfaeb06 | 31 | enemy_erase(g); |
michaeljson | 0:3817adfaeb06 | 32 | g->enemy_blk_x -= 1; |
michaeljson | 0:3817adfaeb06 | 33 | enemy_show(g); |
michaeljson | 0:3817adfaeb06 | 34 | |
michaeljson | 0:3817adfaeb06 | 35 | if (g->enemy_blk_y >= 110) |
michaeljson | 0:3817adfaeb06 | 36 | { |
michaeljson | 0:3817adfaeb06 | 37 | MOVE_DOWN = 2; |
michaeljson | 0:3817adfaeb06 | 38 | } |
michaeljson | 0:3817adfaeb06 | 39 | } |
michaeljson | 0:3817adfaeb06 | 40 | |
michaeljson | 0:3817adfaeb06 | 41 | if ((g->enemy_blk_x+g->enemy_width) > (128-g->enemy_width) |
michaeljson | 0:3817adfaeb06 | 42 | || (g->enemy_blk_x < (0+g->enemy_width))) |
michaeljson | 0:3817adfaeb06 | 43 | { |
michaeljson | 0:3817adfaeb06 | 44 | MOVE_DOWN = 1; |
michaeljson | 0:3817adfaeb06 | 45 | } |
michaeljson | 0:3817adfaeb06 | 46 | } |
michaeljson | 0:3817adfaeb06 | 47 | return MOVE_DOWN; |
michaeljson | 0:3817adfaeb06 | 48 | } |
michaeljson | 0:3817adfaeb06 | 49 | |
michaeljson | 0:3817adfaeb06 | 50 | void enemy_init(enemy_t * g, unsigned int blk_x, unsigned int blk_y, unsigned int color) |
michaeljson | 0:3817adfaeb06 | 51 | { |
michaeljson | 0:3817adfaeb06 | 52 | g->enemy_blk_x = blk_x; |
michaeljson | 0:3817adfaeb06 | 53 | g->enemy_blk_y = blk_y; |
michaeljson | 0:3817adfaeb06 | 54 | g->enemy_color = color; |
michaeljson | 0:3817adfaeb06 | 55 | g->enemy_width = 8; |
michaeljson | 0:3817adfaeb06 | 56 | g->enemy_height = 8; |
michaeljson | 0:3817adfaeb06 | 57 | g->status = ENEMY_ALIVE; |
michaeljson | 0:3817adfaeb06 | 58 | } |
michaeljson | 0:3817adfaeb06 | 59 | |
michaeljson | 0:3817adfaeb06 | 60 | void enemy_show(enemy_t * g) |
michaeljson | 0:3817adfaeb06 | 61 | { |
michaeljson | 0:3817adfaeb06 | 62 | draw_enemy(g->enemy_blk_x, g->enemy_blk_y, g->enemy_color, g->enemy_width, g->enemy_height); |
michaeljson | 0:3817adfaeb06 | 63 | } |
michaeljson | 0:3817adfaeb06 | 64 | |
michaeljson | 0:3817adfaeb06 | 65 | void enemy_erase(enemy_t * g) |
michaeljson | 0:3817adfaeb06 | 66 | { |
michaeljson | 0:3817adfaeb06 | 67 | erase_enemy(g->enemy_blk_x, g->enemy_blk_y, g->enemy_color, g->enemy_width, g->enemy_height); |
michaeljson | 0:3817adfaeb06 | 68 | } |
michaeljson | 0:3817adfaeb06 | 69 | |
michaeljson | 0:3817adfaeb06 | 70 | int check_enemy(enemy_t * g, missile_t * h) |
michaeljson | 0:3817adfaeb06 | 71 | { |
michaeljson | 0:3817adfaeb06 | 72 | int enemy_died = 0; |
michaeljson | 0:3817adfaeb06 | 73 | if (g->status == ENEMY_ALIVE |
michaeljson | 0:3817adfaeb06 | 74 | && ((h->missile_blk_x >= g->enemy_blk_x) && (h->missile_blk_x <= (g->enemy_blk_x + g->enemy_width)))) |
michaeljson | 0:3817adfaeb06 | 75 | { |
michaeljson | 0:3817adfaeb06 | 76 | enemy_erase(g); |
michaeljson | 0:3817adfaeb06 | 77 | g->status = ENEMY_DEAD; |
michaeljson | 0:3817adfaeb06 | 78 | enemy_died = 1; |
michaeljson | 0:3817adfaeb06 | 79 | h->status = PLAYER_MISSILE_EXPLODED; |
michaeljson | 0:3817adfaeb06 | 80 | } |
michaeljson | 0:3817adfaeb06 | 81 | |
michaeljson | 0:3817adfaeb06 | 82 | return enemy_died; |
michaeljson | 0:3817adfaeb06 | 83 | } |