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:
wminix3
Date:
Fri Apr 23 02:32:00 2021 +0000
Revision:
16:e4e6515bdabb
Parent:
0:3817adfaeb06
Child:
27:9a17cf897bf8
Child:
29:ff6b8a1ad9f5
Started to work on adding more detailed sprites for enemies. Got the analog joystick to work in place of the tactile switch.

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);
wminix3 16:e4e6515bdabb 7 //const int* colors = [
wminix3 16:e4e6515bdabb 8 //uLCD.BLIT(blk_x, blk_y, e_width, e_height,
michaeljson 0:3817adfaeb06 9 }
michaeljson 0:3817adfaeb06 10
michaeljson 0:3817adfaeb06 11 void erase_enemy(int blk_x, int blk_y, int enemy_color, int e_width, int e_height)
michaeljson 0:3817adfaeb06 12 {
michaeljson 0:3817adfaeb06 13 uLCD.filled_rectangle(blk_x,blk_y,blk_x+e_width,blk_y-e_height,BACKGROUND_COLOR);
michaeljson 0:3817adfaeb06 14 }
michaeljson 0:3817adfaeb06 15
michaeljson 0:3817adfaeb06 16 int move_enemy(enemy_t * g, int MOVE_DOWN, int DIRECTION)
michaeljson 0:3817adfaeb06 17 {
michaeljson 0:3817adfaeb06 18 if (g->status == ENEMY_ALIVE)
michaeljson 0:3817adfaeb06 19 {
michaeljson 0:3817adfaeb06 20 if (DIRECTION == 1)
michaeljson 0:3817adfaeb06 21 {
michaeljson 0:3817adfaeb06 22 enemy_erase(g);
michaeljson 0:3817adfaeb06 23 g->enemy_blk_x += 1;
michaeljson 0:3817adfaeb06 24 enemy_show(g);
michaeljson 0:3817adfaeb06 25
michaeljson 0:3817adfaeb06 26 if (g->enemy_blk_y >= 110)
michaeljson 0:3817adfaeb06 27 {
michaeljson 0:3817adfaeb06 28 MOVE_DOWN = 2;
michaeljson 0:3817adfaeb06 29 }
michaeljson 0:3817adfaeb06 30 }
michaeljson 0:3817adfaeb06 31 else if (DIRECTION == 2)
michaeljson 0:3817adfaeb06 32 {
michaeljson 0:3817adfaeb06 33 enemy_erase(g);
michaeljson 0:3817adfaeb06 34 g->enemy_blk_x -= 1;
michaeljson 0:3817adfaeb06 35 enemy_show(g);
michaeljson 0:3817adfaeb06 36
michaeljson 0:3817adfaeb06 37 if (g->enemy_blk_y >= 110)
michaeljson 0:3817adfaeb06 38 {
michaeljson 0:3817adfaeb06 39 MOVE_DOWN = 2;
michaeljson 0:3817adfaeb06 40 }
michaeljson 0:3817adfaeb06 41 }
michaeljson 0:3817adfaeb06 42
michaeljson 0:3817adfaeb06 43 if ((g->enemy_blk_x+g->enemy_width) > (128-g->enemy_width)
michaeljson 0:3817adfaeb06 44 || (g->enemy_blk_x < (0+g->enemy_width)))
michaeljson 0:3817adfaeb06 45 {
michaeljson 0:3817adfaeb06 46 MOVE_DOWN = 1;
michaeljson 0:3817adfaeb06 47 }
michaeljson 0:3817adfaeb06 48 }
michaeljson 0:3817adfaeb06 49 return MOVE_DOWN;
michaeljson 0:3817adfaeb06 50 }
michaeljson 0:3817adfaeb06 51
michaeljson 0:3817adfaeb06 52 void enemy_init(enemy_t * g, unsigned int blk_x, unsigned int blk_y, unsigned int color)
michaeljson 0:3817adfaeb06 53 {
michaeljson 0:3817adfaeb06 54 g->enemy_blk_x = blk_x;
michaeljson 0:3817adfaeb06 55 g->enemy_blk_y = blk_y;
michaeljson 0:3817adfaeb06 56 g->enemy_color = color;
michaeljson 0:3817adfaeb06 57 g->enemy_width = 8;
michaeljson 0:3817adfaeb06 58 g->enemy_height = 8;
michaeljson 0:3817adfaeb06 59 g->status = ENEMY_ALIVE;
michaeljson 0:3817adfaeb06 60 }
michaeljson 0:3817adfaeb06 61
michaeljson 0:3817adfaeb06 62 void enemy_show(enemy_t * g)
michaeljson 0:3817adfaeb06 63 {
michaeljson 0:3817adfaeb06 64 draw_enemy(g->enemy_blk_x, g->enemy_blk_y, g->enemy_color, g->enemy_width, g->enemy_height);
michaeljson 0:3817adfaeb06 65 }
michaeljson 0:3817adfaeb06 66
michaeljson 0:3817adfaeb06 67 void enemy_erase(enemy_t * g)
michaeljson 0:3817adfaeb06 68 {
michaeljson 0:3817adfaeb06 69 erase_enemy(g->enemy_blk_x, g->enemy_blk_y, g->enemy_color, g->enemy_width, g->enemy_height);
michaeljson 0:3817adfaeb06 70 }
michaeljson 0:3817adfaeb06 71
michaeljson 0:3817adfaeb06 72 int check_enemy(enemy_t * g, missile_t * h)
michaeljson 0:3817adfaeb06 73 {
michaeljson 0:3817adfaeb06 74 int enemy_died = 0;
michaeljson 0:3817adfaeb06 75 if (g->status == ENEMY_ALIVE
michaeljson 0:3817adfaeb06 76 && ((h->missile_blk_x >= g->enemy_blk_x) && (h->missile_blk_x <= (g->enemy_blk_x + g->enemy_width))))
michaeljson 0:3817adfaeb06 77 {
michaeljson 0:3817adfaeb06 78 enemy_erase(g);
michaeljson 0:3817adfaeb06 79 g->status = ENEMY_DEAD;
michaeljson 0:3817adfaeb06 80 enemy_died = 1;
michaeljson 0:3817adfaeb06 81 h->status = PLAYER_MISSILE_EXPLODED;
michaeljson 0:3817adfaeb06 82 }
michaeljson 0:3817adfaeb06 83
michaeljson 0:3817adfaeb06 84 return enemy_died;
michaeljson 0:3817adfaeb06 85 }