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:
26:3270c6edd7d9
Fixed score.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
michaeljson 0:3817adfaeb06 1 #include "missile.h"
michaeljson 0:3817adfaeb06 2
wminix3 26:3270c6edd7d9 3
michaeljson 0:3817adfaeb06 4 void draw_missile_object(int blk_x, int blk_y, int missile_color, int m_width, int m_height)
michaeljson 0:3817adfaeb06 5 {
michaeljson 0:3817adfaeb06 6 uLCD.filled_rectangle(blk_x,blk_y-1,blk_x+m_width,blk_y-m_height,missile_color);
michaeljson 0:3817adfaeb06 7 }
michaeljson 0:3817adfaeb06 8
michaeljson 0:3817adfaeb06 9 void erase_missile(int blk_x, int blk_y, int m_width, int m_height)
michaeljson 0:3817adfaeb06 10 {
michaeljson 0:3817adfaeb06 11 uLCD.filled_rectangle(blk_x,blk_y-1,blk_x+m_width,blk_y-m_height,BACKGROUND_COLOR);
michaeljson 0:3817adfaeb06 12 }
michaeljson 0:3817adfaeb06 13
michaeljson 0:3817adfaeb06 14 void update_missile_pos(missile_t *g)
michaeljson 0:3817adfaeb06 15 {
michaeljson 0:3817adfaeb06 16 if (g->missile_blk_y < 18)
michaeljson 0:3817adfaeb06 17 {
michaeljson 0:3817adfaeb06 18 g->status = PLAYER_MISSILE_EXPLODED;
michaeljson 0:3817adfaeb06 19 }
michaeljson 0:3817adfaeb06 20
michaeljson 0:3817adfaeb06 21 if (g->status == PLAYER_MISSILE_ACTIVE)
michaeljson 0:3817adfaeb06 22 {
michaeljson 0:3817adfaeb06 23 missile_erase(g);
michaeljson 0:3817adfaeb06 24 g->missile_blk_y = g->missile_blk_y-3;
michaeljson 0:3817adfaeb06 25 missile_show(g);
michaeljson 0:3817adfaeb06 26 }
michaeljson 0:3817adfaeb06 27 else if (g->status == PLAYER_MISSILE_EXPLODED)
michaeljson 0:3817adfaeb06 28 {
michaeljson 0:3817adfaeb06 29 missile_erase(g);
michaeljson 0:3817adfaeb06 30 g->status = PLAYER_MISSILE_INACTIVE;
michaeljson 0:3817adfaeb06 31 g->missile_blk_y = 109;
michaeljson 0:3817adfaeb06 32 }
michaeljson 0:3817adfaeb06 33 }
michaeljson 0:3817adfaeb06 34
wminix3 26:3270c6edd7d9 35 void update_enemy_missile_pos(missile_t *g, int level)
michaeljson 0:3817adfaeb06 36 {
michaeljson 0:3817adfaeb06 37 if (g->missile_blk_y > 128)
michaeljson 0:3817adfaeb06 38 {
michaeljson 0:3817adfaeb06 39 g->status = ENEMY_MISSILE_EXPLODED;
michaeljson 0:3817adfaeb06 40 }
michaeljson 0:3817adfaeb06 41
michaeljson 0:3817adfaeb06 42 if (g->status == ENEMY_MISSILE_ACTIVE)
michaeljson 0:3817adfaeb06 43 {
michaeljson 0:3817adfaeb06 44 missile_erase(g);
wminix3 26:3270c6edd7d9 45 //g->missile_blk_y = g->missile_blk_y+1;
wminix3 26:3270c6edd7d9 46
wminix3 26:3270c6edd7d9 47 // higher difficulties/levels have faster enemy missiles
wminix3 26:3270c6edd7d9 48 if (level == 1) {
wminix3 26:3270c6edd7d9 49 g->missile_blk_y = g->missile_blk_y+1;
wminix3 26:3270c6edd7d9 50 } else if (level == 2) {
wminix3 26:3270c6edd7d9 51 g->missile_blk_y = g->missile_blk_y+3;
wminix3 26:3270c6edd7d9 52 } else if (level == 3) {
wminix3 26:3270c6edd7d9 53 g->missile_blk_y = g->missile_blk_y+6;
wminix3 26:3270c6edd7d9 54 }
wminix3 26:3270c6edd7d9 55
michaeljson 0:3817adfaeb06 56 missile_show(g);
michaeljson 0:3817adfaeb06 57 }
michaeljson 0:3817adfaeb06 58 else if (g->status == ENEMY_MISSILE_EXPLODED)
michaeljson 0:3817adfaeb06 59 {
michaeljson 0:3817adfaeb06 60 missile_erase(g);
michaeljson 0:3817adfaeb06 61 g->status = ENEMY_MISSILE_INACTIVE;
michaeljson 1:618aa2c4ca6a 62 g->missile_blk_y = 2;
michaeljson 0:3817adfaeb06 63 }
michaeljson 0:3817adfaeb06 64 }
michaeljson 0:3817adfaeb06 65
michaeljson 0:3817adfaeb06 66 void missile_init(missile_t * g, int blk_x, int blk_y, int color)
michaeljson 0:3817adfaeb06 67 {
michaeljson 0:3817adfaeb06 68 g->missile_blk_x = blk_x;
michaeljson 0:3817adfaeb06 69 g->missile_blk_y = blk_y;
michaeljson 0:3817adfaeb06 70 g->missile_color = color;
michaeljson 0:3817adfaeb06 71 g->missile_width = 1;
michaeljson 0:3817adfaeb06 72 g->missile_height = 8;
michaeljson 0:3817adfaeb06 73 g->status = PLAYER_MISSILE_INACTIVE;
michaeljson 0:3817adfaeb06 74 }
michaeljson 0:3817adfaeb06 75
michaeljson 0:3817adfaeb06 76 void enemy_missile_init(missile_t * g, int blk_x, int blk_y, int color)
michaeljson 0:3817adfaeb06 77 {
michaeljson 0:3817adfaeb06 78 g->missile_blk_x = blk_x;
michaeljson 0:3817adfaeb06 79 g->missile_blk_y = blk_y;
michaeljson 0:3817adfaeb06 80 g->missile_color = color;
michaeljson 0:3817adfaeb06 81 g->missile_width = 1;
michaeljson 0:3817adfaeb06 82 g->missile_height = 8;
michaeljson 0:3817adfaeb06 83 g->status = ENEMY_MISSILE_INACTIVE;
michaeljson 0:3817adfaeb06 84 }
michaeljson 0:3817adfaeb06 85
michaeljson 0:3817adfaeb06 86 void missile_show(missile_t * g)
michaeljson 0:3817adfaeb06 87 {
michaeljson 0:3817adfaeb06 88 draw_missile_object(g->missile_blk_x, g->missile_blk_y, g->missile_color, g->missile_width, g->missile_height);
michaeljson 0:3817adfaeb06 89 }
michaeljson 0:3817adfaeb06 90
michaeljson 0:3817adfaeb06 91 void missile_erase(missile_t *g)
michaeljson 0:3817adfaeb06 92 {
michaeljson 0:3817adfaeb06 93 erase_missile(g->missile_blk_x, g->missile_blk_y, g->missile_width, g->missile_height);
michaeljson 0:3817adfaeb06 94 }