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 William Minix

test

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?

UserRevisionLine numberNew 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 }