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:
Thu Apr 29 05:41:40 2021 +0000
Revision:
33:d17d71103d41
Parent:
29:ff6b8a1ad9f5
Fixed score.

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"
wminix3 29:ff6b8a1ad9f5 3 #include "globals.h"
michaeljson 0:3817adfaeb06 4
wminix3 29:ff6b8a1ad9f5 5 // draws red enemy sprites instead of simple white squares
michaeljson 0:3817adfaeb06 6 void draw_enemy(int blk_x, int blk_y, int enemy_color, int e_width, int e_height)
michaeljson 0:3817adfaeb06 7 {
wminix3 29:ff6b8a1ad9f5 8 char *shapes;
wminix3 29:ff6b8a1ad9f5 9 //enemy_color = 0x00FF00;
wminix3 29:ff6b8a1ad9f5 10 if (enemy_color == 0xFF0000){
wminix3 29:ff6b8a1ad9f5 11 shapes = "0000RRR00000RRRRRRRRR0RRRRRRRRRRRRRR00R00RRRRRRRRRRRRRR000RR0RR00000RR000RR00RR000R000RR";
wminix3 29:ff6b8a1ad9f5 12 }
wminix3 29:ff6b8a1ad9f5 13 // uLCD.filled_rectangle(blk_x,blk_y,blk_x+e_width,blk_y-e_height,enemy_color);
wminix3 29:ff6b8a1ad9f5 14 //const int* colors = [
wminix3 29:ff6b8a1ad9f5 15 //uLCD.BLIT(blk_x, blk_y, e_width, e_height,
wminix3 29:ff6b8a1ad9f5 16
wminix3 29:ff6b8a1ad9f5 17
wminix3 29:ff6b8a1ad9f5 18 draw_img(blk_x, blk_y, e_width, e_height, shapes); // use uLCD.BLIT
wminix3 29:ff6b8a1ad9f5 19 //uLCD.filled_rectangle(blk_x,blk_y,blk_x+e_width,blk_y-e_height,enemy_color);
wminix3 16:e4e6515bdabb 20 //const int* colors = [
wminix3 16:e4e6515bdabb 21 //uLCD.BLIT(blk_x, blk_y, e_width, e_height,
michaeljson 0:3817adfaeb06 22 }
michaeljson 0:3817adfaeb06 23
michaeljson 0:3817adfaeb06 24 void erase_enemy(int blk_x, int blk_y, int enemy_color, int e_width, int e_height)
michaeljson 0:3817adfaeb06 25 {
wminix3 29:ff6b8a1ad9f5 26 //uLCD.filled_rectangle(blk_x,blk_y,blk_x+e_width,blk_y-e_height,BACKGROUND_COLOR);
wminix3 29:ff6b8a1ad9f5 27 uLCD.filled_rectangle(blk_x - 2,blk_y,blk_x+11+2,blk_y+8+2,BACKGROUND_COLOR); // change the boundaries of the black rectangle to erase enemies better
michaeljson 0:3817adfaeb06 28 }
michaeljson 0:3817adfaeb06 29
michaeljson 0:3817adfaeb06 30 int move_enemy(enemy_t * g, int MOVE_DOWN, int DIRECTION)
michaeljson 0:3817adfaeb06 31 {
michaeljson 0:3817adfaeb06 32 if (g->status == ENEMY_ALIVE)
michaeljson 0:3817adfaeb06 33 {
michaeljson 0:3817adfaeb06 34 if (DIRECTION == 1)
michaeljson 0:3817adfaeb06 35 {
michaeljson 0:3817adfaeb06 36 enemy_erase(g);
michaeljson 0:3817adfaeb06 37 g->enemy_blk_x += 1;
michaeljson 0:3817adfaeb06 38 enemy_show(g);
michaeljson 0:3817adfaeb06 39
michaeljson 0:3817adfaeb06 40 if (g->enemy_blk_y >= 110)
michaeljson 0:3817adfaeb06 41 {
michaeljson 0:3817adfaeb06 42 MOVE_DOWN = 2;
michaeljson 0:3817adfaeb06 43 }
michaeljson 0:3817adfaeb06 44 }
michaeljson 0:3817adfaeb06 45 else if (DIRECTION == 2)
michaeljson 0:3817adfaeb06 46 {
michaeljson 0:3817adfaeb06 47 enemy_erase(g);
michaeljson 0:3817adfaeb06 48 g->enemy_blk_x -= 1;
michaeljson 0:3817adfaeb06 49 enemy_show(g);
michaeljson 0:3817adfaeb06 50
michaeljson 0:3817adfaeb06 51 if (g->enemy_blk_y >= 110)
michaeljson 0:3817adfaeb06 52 {
michaeljson 0:3817adfaeb06 53 MOVE_DOWN = 2;
michaeljson 0:3817adfaeb06 54 }
michaeljson 0:3817adfaeb06 55 }
michaeljson 0:3817adfaeb06 56
michaeljson 0:3817adfaeb06 57 if ((g->enemy_blk_x+g->enemy_width) > (128-g->enemy_width)
michaeljson 0:3817adfaeb06 58 || (g->enemy_blk_x < (0+g->enemy_width)))
michaeljson 0:3817adfaeb06 59 {
michaeljson 0:3817adfaeb06 60 MOVE_DOWN = 1;
michaeljson 0:3817adfaeb06 61 }
michaeljson 0:3817adfaeb06 62 }
michaeljson 0:3817adfaeb06 63 return MOVE_DOWN;
michaeljson 0:3817adfaeb06 64 }
michaeljson 0:3817adfaeb06 65
michaeljson 0:3817adfaeb06 66 void enemy_init(enemy_t * g, unsigned int blk_x, unsigned int blk_y, unsigned int color)
michaeljson 0:3817adfaeb06 67 {
michaeljson 0:3817adfaeb06 68 g->enemy_blk_x = blk_x;
michaeljson 0:3817adfaeb06 69 g->enemy_blk_y = blk_y;
michaeljson 0:3817adfaeb06 70 g->enemy_color = color;
wminix3 29:ff6b8a1ad9f5 71 g->enemy_width = 11; // make width of enemy 11
wminix3 29:ff6b8a1ad9f5 72 g->enemy_height = 8; // make height of enemy 8
michaeljson 0:3817adfaeb06 73 g->status = ENEMY_ALIVE;
michaeljson 0:3817adfaeb06 74 }
michaeljson 0:3817adfaeb06 75
michaeljson 0:3817adfaeb06 76 void enemy_show(enemy_t * g)
michaeljson 0:3817adfaeb06 77 {
michaeljson 0:3817adfaeb06 78 draw_enemy(g->enemy_blk_x, g->enemy_blk_y, g->enemy_color, g->enemy_width, g->enemy_height);
michaeljson 0:3817adfaeb06 79 }
michaeljson 0:3817adfaeb06 80
michaeljson 0:3817adfaeb06 81 void enemy_erase(enemy_t * g)
michaeljson 0:3817adfaeb06 82 {
michaeljson 0:3817adfaeb06 83 erase_enemy(g->enemy_blk_x, g->enemy_blk_y, g->enemy_color, g->enemy_width, g->enemy_height);
michaeljson 0:3817adfaeb06 84 }
michaeljson 0:3817adfaeb06 85
michaeljson 0:3817adfaeb06 86 int check_enemy(enemy_t * g, missile_t * h)
michaeljson 0:3817adfaeb06 87 {
michaeljson 0:3817adfaeb06 88 int enemy_died = 0;
michaeljson 0:3817adfaeb06 89 if (g->status == ENEMY_ALIVE
michaeljson 0:3817adfaeb06 90 && ((h->missile_blk_x >= g->enemy_blk_x) && (h->missile_blk_x <= (g->enemy_blk_x + g->enemy_width))))
michaeljson 0:3817adfaeb06 91 {
michaeljson 0:3817adfaeb06 92 enemy_erase(g);
michaeljson 0:3817adfaeb06 93 g->status = ENEMY_DEAD;
michaeljson 0:3817adfaeb06 94 enemy_died = 1;
michaeljson 0:3817adfaeb06 95 h->status = PLAYER_MISSILE_EXPLODED;
michaeljson 0:3817adfaeb06 96 }
michaeljson 0:3817adfaeb06 97
michaeljson 0:3817adfaeb06 98 return enemy_died;
michaeljson 0:3817adfaeb06 99 }