Initial publish

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

Committer:
Noximilien
Date:
Tue Mar 19 12:43:01 2019 +0000
Revision:
18:6becc9f9de5e
Parent:
17:69a85c909566
Child:
19:b78fa41d04a9
I have made the enemy blast to collide with the player ship and deplete the player's health every time the ship is hit. Need to create game over function and damage animation.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Noximilien 3:10918b0f7a7d 1
Noximilien 3:10918b0f7a7d 2
Noximilien 3:10918b0f7a7d 3 #include "mbed.h"
Noximilien 3:10918b0f7a7d 4 #include "N5110.h"
Noximilien 3:10918b0f7a7d 5 #include "Gamepad.h"
Noximilien 3:10918b0f7a7d 6
Noximilien 3:10918b0f7a7d 7 #include "models.h"
Noximilien 4:02c63aaa2df9 8 #include "main.h"
Noximilien 4:02c63aaa2df9 9 #include "game.h"
Noximilien 5:2b9181bc5c89 10
Noximilien 5:2b9181bc5c89 11 int x_ship_pos = 0;
Noximilien 5:2b9181bc5c89 12 int y_ship_pos = 24;
Noximilien 11:cf2ba52e8b7e 13 int small_star_delay = 0;
Noximilien 16:b7d0cac561cc 14 int enemy_blast_delay = 0;
Noximilien 16:b7d0cac561cc 15 int game_score = 0;
Noximilien 7:42376925945c 16
Noximilien 8:c18c240665aa 17 const int ship_speed = 2;
Noximilien 11:cf2ba52e8b7e 18 const int small_star_delay_max = 3;
Noximilien 16:b7d0cac561cc 19 const int enemy_blast_delay_max = 5;
Noximilien 6:100b46be4bea 20
Noximilien 16:b7d0cac561cc 21 int player_lifes = 3;
Noximilien 16:b7d0cac561cc 22 bool game_over = false;
Noximilien 18:6becc9f9de5e 23 const float player_collision_radius = 8;
Noximilien 18:6becc9f9de5e 24 const float player_collision_offset_x = 5;
Noximilien 18:6becc9f9de5e 25 const float player_collision_offset_y = 7;
Noximilien 12:bfe3a3deaac3 26
Noximilien 12:bfe3a3deaac3 27 struct GameObject {
Noximilien 12:bfe3a3deaac3 28 int x;
Noximilien 12:bfe3a3deaac3 29 int y;
Noximilien 12:bfe3a3deaac3 30 bool active;
Noximilien 12:bfe3a3deaac3 31 };
Noximilien 9:5ad5501c702e 32
Noximilien 12:bfe3a3deaac3 33 struct Enemy : public GameObject {
Noximilien 12:bfe3a3deaac3 34 bool dead;
Noximilien 12:bfe3a3deaac3 35 int dead_counter;
Noximilien 12:bfe3a3deaac3 36 };
Noximilien 12:bfe3a3deaac3 37
Noximilien 12:bfe3a3deaac3 38 #define MAX_BLASTS (5)
Noximilien 12:bfe3a3deaac3 39 GameObject blasts[MAX_BLASTS];
Noximilien 16:b7d0cac561cc 40 GameObject enemy_blasts[MAX_BLASTS];
Noximilien 12:bfe3a3deaac3 41 const float blast_collision_radius = 1;
Noximilien 12:bfe3a3deaac3 42 const float blast_collision_offset_x = 1;
Noximilien 12:bfe3a3deaac3 43 const float blast_collision_offset_y = 0;
Noximilien 12:bfe3a3deaac3 44
Noximilien 12:bfe3a3deaac3 45 #define MAX_SMALL_STARS (5)
Noximilien 13:5c3dc6e827c2 46 GameObject small_stars[MAX_SMALL_STARS];
Noximilien 12:bfe3a3deaac3 47
Noximilien 12:bfe3a3deaac3 48 #define MAX_MEDIUM_STARS (10)
Noximilien 13:5c3dc6e827c2 49 GameObject medium_stars[MAX_MEDIUM_STARS];
Noximilien 11:cf2ba52e8b7e 50
Noximilien 12:bfe3a3deaac3 51 #define MAX_ENEMIES (1)
Noximilien 12:bfe3a3deaac3 52 Enemy enemies[MAX_ENEMIES];
Noximilien 12:bfe3a3deaac3 53 const float enemy_collision_radius = 8;
Noximilien 12:bfe3a3deaac3 54 const float enemy_collision_offset_x = 5;
Noximilien 12:bfe3a3deaac3 55 const float enemy_collision_offset_y = 3;
Noximilien 12:bfe3a3deaac3 56
Noximilien 12:bfe3a3deaac3 57
Noximilien 12:bfe3a3deaac3 58 GameObject player;
Noximilien 12:bfe3a3deaac3 59
Noximilien 12:bfe3a3deaac3 60 void spawnNewEnemy() {
Noximilien 12:bfe3a3deaac3 61 int found = -1;
Noximilien 12:bfe3a3deaac3 62 for (int i = 0; i < MAX_ENEMIES; ++i) {
Noximilien 12:bfe3a3deaac3 63 if (!enemies[i].active) {
Noximilien 12:bfe3a3deaac3 64 found = i;
Noximilien 12:bfe3a3deaac3 65 break;
Noximilien 12:bfe3a3deaac3 66 }
Noximilien 12:bfe3a3deaac3 67 }
Noximilien 12:bfe3a3deaac3 68
Noximilien 12:bfe3a3deaac3 69 if (found != -1) {
Noximilien 12:bfe3a3deaac3 70 enemies[found].dead = false;
Noximilien 12:bfe3a3deaac3 71 enemies[found].active = true;
Noximilien 12:bfe3a3deaac3 72 enemies[found].x = screen_width;
Noximilien 17:69a85c909566 73 enemies[found].y = (game_score_height + enemy2_height/2) + rand()% (screen_height - enemy2_height*2 - game_score_height);
Noximilien 12:bfe3a3deaac3 74
Noximilien 12:bfe3a3deaac3 75 }
Noximilien 12:bfe3a3deaac3 76 }
Noximilien 12:bfe3a3deaac3 77
Noximilien 12:bfe3a3deaac3 78 void updateAndDrawEnemies() {
Noximilien 17:69a85c909566 79 const int enemy_speed = 1;
Noximilien 12:bfe3a3deaac3 80 for (int i = 0; i < MAX_ENEMIES; ++i) {
Noximilien 12:bfe3a3deaac3 81 if (enemies[i].active){
Noximilien 12:bfe3a3deaac3 82 enemies[i].x -= enemy_speed;
Noximilien 12:bfe3a3deaac3 83 if (!enemies[i].dead) {
Noximilien 12:bfe3a3deaac3 84 lcd.drawSprite(enemies[i].x, enemies[i].y, 7, 11, (int*)enemyShip2);
Noximilien 14:e8de27c4d0d4 85 }
Noximilien 14:e8de27c4d0d4 86 if (enemies[i].x < 0){
Noximilien 14:e8de27c4d0d4 87 enemies[i].active = false;
Noximilien 14:e8de27c4d0d4 88 }
Noximilien 14:e8de27c4d0d4 89 else {
Noximilien 12:bfe3a3deaac3 90 if (enemies[i].dead_counter > 0) {
Noximilien 12:bfe3a3deaac3 91 enemies[i].dead_counter--;
Noximilien 14:e8de27c4d0d4 92 if (enemies[i].dead_counter == 2){
Noximilien 14:e8de27c4d0d4 93 lcd.drawSprite(enemies[i].x, enemies[i].y, 7, 11, (int*)enemyHalfExploded);
Noximilien 14:e8de27c4d0d4 94 }
Noximilien 14:e8de27c4d0d4 95 else if (enemies[i].dead_counter == 1){
Noximilien 14:e8de27c4d0d4 96 lcd.drawSprite(enemies[i].x, enemies[i].y, 7, 11, (int*)enemyExploded);
Noximilien 14:e8de27c4d0d4 97 game_score += 30;
Noximilien 14:e8de27c4d0d4 98 }
Noximilien 14:e8de27c4d0d4 99 else {
Noximilien 12:bfe3a3deaac3 100 enemies[i].active = false;
Noximilien 12:bfe3a3deaac3 101 }
Noximilien 12:bfe3a3deaac3 102 }
Noximilien 12:bfe3a3deaac3 103 }
Noximilien 12:bfe3a3deaac3 104 }
Noximilien 12:bfe3a3deaac3 105 }
Noximilien 12:bfe3a3deaac3 106 }
Noximilien 12:bfe3a3deaac3 107
Noximilien 12:bfe3a3deaac3 108 void updateAndDrawBlasts() {
Noximilien 12:bfe3a3deaac3 109 const int blast_speed = 5;
Noximilien 12:bfe3a3deaac3 110 for (int i = 0; i < MAX_BLASTS; ++i) {
Noximilien 12:bfe3a3deaac3 111 if (blasts[i].active) {
Noximilien 12:bfe3a3deaac3 112 blasts[i].x += blast_speed;
Noximilien 12:bfe3a3deaac3 113 if (blasts[i].x >= screen_width){
Noximilien 12:bfe3a3deaac3 114 blasts[i].active = false;
Noximilien 12:bfe3a3deaac3 115 }
Noximilien 12:bfe3a3deaac3 116 lcd.setPixel(blasts[i].x, blasts[i].y, 1);
Noximilien 12:bfe3a3deaac3 117 lcd.setPixel(blasts[i].x+1, blasts[i].y, 1);
Noximilien 12:bfe3a3deaac3 118 lcd.setPixel(blasts[i].x+2, blasts[i].y, 1);
Noximilien 12:bfe3a3deaac3 119 }
Noximilien 12:bfe3a3deaac3 120 }
Noximilien 12:bfe3a3deaac3 121 }
Noximilien 12:bfe3a3deaac3 122
Noximilien 16:b7d0cac561cc 123 void fireNewEnemyBlast() {
Noximilien 16:b7d0cac561cc 124 // Search the array of blasts if inactive we can use it.
Noximilien 16:b7d0cac561cc 125 int found = -1;
Noximilien 16:b7d0cac561cc 126 for (int i = 0; i < MAX_BLASTS; ++i) {
Noximilien 16:b7d0cac561cc 127 if (!enemy_blasts[i].active) {
Noximilien 16:b7d0cac561cc 128 found = i;
Noximilien 16:b7d0cac561cc 129 break;
Noximilien 16:b7d0cac561cc 130 }
Noximilien 16:b7d0cac561cc 131 }
Noximilien 16:b7d0cac561cc 132
Noximilien 16:b7d0cac561cc 133 if (found != -1) { ///////////////////////////////////////////////////
Noximilien 16:b7d0cac561cc 134 enemy_blasts[found].active = true;
Noximilien 16:b7d0cac561cc 135 enemy_blasts[found].x = enemies[found].x;
Noximilien 16:b7d0cac561cc 136 enemy_blasts[found].y = enemies[found].y + (enemy2_height/2);
Noximilien 16:b7d0cac561cc 137 }
Noximilien 16:b7d0cac561cc 138 }
Noximilien 16:b7d0cac561cc 139
Noximilien 16:b7d0cac561cc 140 void updateAndDrawEnemyBlasts() {
Noximilien 16:b7d0cac561cc 141 const int blast_speed = 5;
Noximilien 16:b7d0cac561cc 142 for (int i = 0; i < MAX_BLASTS; ++i) {
Noximilien 16:b7d0cac561cc 143 if (enemy_blasts[i].active) {
Noximilien 16:b7d0cac561cc 144 enemy_blasts[i].x -= blast_speed;
Noximilien 16:b7d0cac561cc 145 if (enemy_blasts[i].x <= -1){
Noximilien 16:b7d0cac561cc 146 enemy_blasts[i].active = false;
Noximilien 16:b7d0cac561cc 147 }
Noximilien 16:b7d0cac561cc 148 lcd.setPixel(enemy_blasts[i].x, enemy_blasts[i].y, 1);
Noximilien 16:b7d0cac561cc 149 lcd.setPixel(enemy_blasts[i].x-1, enemy_blasts[i].y, 1);
Noximilien 16:b7d0cac561cc 150 lcd.setPixel(enemy_blasts[i].x-2, enemy_blasts[i].y, 1);
Noximilien 16:b7d0cac561cc 151 }
Noximilien 16:b7d0cac561cc 152 }
Noximilien 16:b7d0cac561cc 153 }
Noximilien 16:b7d0cac561cc 154
Noximilien 12:bfe3a3deaac3 155 void fireNewBlast() {
Noximilien 12:bfe3a3deaac3 156 // Search the array of blasts if inactive we can use it.
Noximilien 12:bfe3a3deaac3 157 int found = -1;
Noximilien 12:bfe3a3deaac3 158 for (int i = 0; i < MAX_BLASTS; ++i) {
Noximilien 12:bfe3a3deaac3 159 if (!blasts[i].active) {
Noximilien 12:bfe3a3deaac3 160 found = i;
Noximilien 12:bfe3a3deaac3 161 break;
Noximilien 12:bfe3a3deaac3 162 }
Noximilien 12:bfe3a3deaac3 163 }
Noximilien 12:bfe3a3deaac3 164
Noximilien 12:bfe3a3deaac3 165 if (found != -1) {
Noximilien 12:bfe3a3deaac3 166 blasts[found].active = true;
Noximilien 12:bfe3a3deaac3 167 blasts[found].x = x_ship_pos + spaceship1_width;
Noximilien 12:bfe3a3deaac3 168 blasts[found].y = y_ship_pos + (spaceship1_height/2);
Noximilien 12:bfe3a3deaac3 169 }
Noximilien 12:bfe3a3deaac3 170 }
Noximilien 12:bfe3a3deaac3 171
Noximilien 12:bfe3a3deaac3 172 inline bool circleCollideTwoObjects(
Noximilien 12:bfe3a3deaac3 173 int x1, int y1, float r1, float offset_x1, float offset_y1,
Noximilien 16:b7d0cac561cc 174 int x2, int y2, float r2, float offset_x2, float offset_y2) {
Noximilien 16:b7d0cac561cc 175
Noximilien 16:b7d0cac561cc 176 int distance = pow((x1 + offset_x1) - (x2 + offset_x2), 2) + pow((y1 + offset_y1) - (y2 + offset_y2), 2);
Noximilien 16:b7d0cac561cc 177 return distance <= pow(r1 + r2, 2);
Noximilien 12:bfe3a3deaac3 178 }
Noximilien 12:bfe3a3deaac3 179
Noximilien 12:bfe3a3deaac3 180 void collideEnemiesAndBlasts() {
Noximilien 12:bfe3a3deaac3 181 for (int i = 0; i < MAX_ENEMIES; ++i) {
Noximilien 12:bfe3a3deaac3 182 for (int j = 0; j < MAX_BLASTS; ++j) {
Noximilien 12:bfe3a3deaac3 183 if (enemies[i].active && !enemies[i].dead && blasts[j].active) {
Noximilien 12:bfe3a3deaac3 184 bool collision = circleCollideTwoObjects(
Noximilien 12:bfe3a3deaac3 185 enemies[i].x, enemies[i].y, enemy_collision_radius, enemy_collision_offset_x, enemy_collision_offset_y,
Noximilien 12:bfe3a3deaac3 186 blasts[j].x, blasts[j].y, blast_collision_radius, blast_collision_offset_x, blast_collision_offset_y
Noximilien 12:bfe3a3deaac3 187 );
Noximilien 12:bfe3a3deaac3 188 if (collision) {
Noximilien 12:bfe3a3deaac3 189 enemies[i].dead = true;
Noximilien 12:bfe3a3deaac3 190 enemies[i].dead_counter = 3;
Noximilien 12:bfe3a3deaac3 191 blasts[j].active = false;
Noximilien 12:bfe3a3deaac3 192 }
Noximilien 12:bfe3a3deaac3 193 }
Noximilien 12:bfe3a3deaac3 194 }
Noximilien 12:bfe3a3deaac3 195 }
Noximilien 12:bfe3a3deaac3 196 }
Noximilien 5:2b9181bc5c89 197
Noximilien 18:6becc9f9de5e 198 void collideEnemiesBlastsAndPlayer() {
Noximilien 18:6becc9f9de5e 199 for (int i = 0; i < MAX_ENEMIES; ++i) {
Noximilien 18:6becc9f9de5e 200 for (int j = 0; j < MAX_BLASTS; ++j) {
Noximilien 18:6becc9f9de5e 201 if (enemies[i].active && enemy_blasts[j].active) {
Noximilien 18:6becc9f9de5e 202 bool collision = circleCollideTwoObjects(
Noximilien 18:6becc9f9de5e 203 x_ship_pos, y_ship_pos, player_collision_radius, player_collision_offset_x, player_collision_offset_y,
Noximilien 18:6becc9f9de5e 204 enemy_blasts[j].x, enemy_blasts[j].y, blast_collision_radius, blast_collision_offset_x, blast_collision_offset_y
Noximilien 18:6becc9f9de5e 205 );
Noximilien 18:6becc9f9de5e 206 if (collision) {
Noximilien 18:6becc9f9de5e 207 player_lifes -= 1;
Noximilien 18:6becc9f9de5e 208 enemy_blasts[j].active = false;
Noximilien 18:6becc9f9de5e 209 }
Noximilien 18:6becc9f9de5e 210 }
Noximilien 18:6becc9f9de5e 211 }
Noximilien 18:6becc9f9de5e 212 }
Noximilien 18:6becc9f9de5e 213 }
Noximilien 18:6becc9f9de5e 214
Noximilien 13:5c3dc6e827c2 215 void newSmallStarFlies() {
Noximilien 13:5c3dc6e827c2 216 // Search the array of stars if inactive we can use it. - the same as with blasts
Noximilien 13:5c3dc6e827c2 217 int found = -1;
Noximilien 13:5c3dc6e827c2 218 for (int i = 0; i < MAX_SMALL_STARS; ++i) {
Noximilien 13:5c3dc6e827c2 219 if (!small_stars[i].active) {
Noximilien 13:5c3dc6e827c2 220 found = i;
Noximilien 13:5c3dc6e827c2 221 break;
Noximilien 13:5c3dc6e827c2 222 }
Noximilien 13:5c3dc6e827c2 223 }
Noximilien 13:5c3dc6e827c2 224
Noximilien 13:5c3dc6e827c2 225 if (found != -1) {
Noximilien 13:5c3dc6e827c2 226 small_stars[found].active = true;
Noximilien 13:5c3dc6e827c2 227 small_stars[found].x = screen_width;
Noximilien 15:0145c5f0bea1 228 small_stars[found].y = rand() % screen_height + game_score_height;
Noximilien 13:5c3dc6e827c2 229 }
Noximilien 13:5c3dc6e827c2 230 }
Noximilien 13:5c3dc6e827c2 231
Noximilien 13:5c3dc6e827c2 232 void updateAndDrawSmallStars(){
Noximilien 13:5c3dc6e827c2 233 const int small_star_speed = 5;
Noximilien 13:5c3dc6e827c2 234 for (int i = 0; i < MAX_SMALL_STARS; ++i) {
Noximilien 13:5c3dc6e827c2 235 if (small_stars[i].active) {
Noximilien 13:5c3dc6e827c2 236 small_stars[i].x -= small_star_speed;
Noximilien 13:5c3dc6e827c2 237 if (small_stars[i].x <= 0){
Noximilien 13:5c3dc6e827c2 238 small_stars[i].active = false;
Noximilien 13:5c3dc6e827c2 239 }
Noximilien 13:5c3dc6e827c2 240 lcd.drawSprite(small_stars[i].x, small_stars[i].y, 3, 3, (int*)starSmall);
Noximilien 13:5c3dc6e827c2 241 }
Noximilien 13:5c3dc6e827c2 242 }
Noximilien 13:5c3dc6e827c2 243 }
Noximilien 13:5c3dc6e827c2 244
Noximilien 13:5c3dc6e827c2 245 void newMediumStarFlies() {
Noximilien 13:5c3dc6e827c2 246 // Search the array of stars if inactive we can use it. - the same as with blasts
Noximilien 13:5c3dc6e827c2 247 int found = -1;
Noximilien 13:5c3dc6e827c2 248 for (int i = 0; i < MAX_MEDIUM_STARS; ++i) {
Noximilien 13:5c3dc6e827c2 249 if (!medium_stars[i].active) {
Noximilien 13:5c3dc6e827c2 250 found = i;
Noximilien 13:5c3dc6e827c2 251 break;
Noximilien 13:5c3dc6e827c2 252 }
Noximilien 13:5c3dc6e827c2 253 }
Noximilien 13:5c3dc6e827c2 254
Noximilien 13:5c3dc6e827c2 255 if (found != -1) {
Noximilien 13:5c3dc6e827c2 256 medium_stars[found].active = true;
Noximilien 13:5c3dc6e827c2 257 medium_stars[found].x = screen_width;
Noximilien 15:0145c5f0bea1 258 medium_stars[found].y =rand() % screen_height + game_score_height;
Noximilien 13:5c3dc6e827c2 259 }
Noximilien 13:5c3dc6e827c2 260 }
Noximilien 13:5c3dc6e827c2 261
Noximilien 13:5c3dc6e827c2 262 void updateAndDrawMediumStars(){
Noximilien 13:5c3dc6e827c2 263 const int medium_star_speed = 5;
Noximilien 13:5c3dc6e827c2 264 for (int i = 0; i < MAX_MEDIUM_STARS; ++i) {
Noximilien 13:5c3dc6e827c2 265 if (medium_stars[i].active) {
Noximilien 13:5c3dc6e827c2 266 medium_stars[i].x -= medium_star_speed;
Noximilien 13:5c3dc6e827c2 267 if (medium_stars[i].x <= -2){
Noximilien 13:5c3dc6e827c2 268 medium_stars[i].active = false;
Noximilien 13:5c3dc6e827c2 269 }
Noximilien 13:5c3dc6e827c2 270 lcd.drawSprite(medium_stars[i].x, medium_stars[i].y, 5, 5, (int*)starMedium);
Noximilien 13:5c3dc6e827c2 271 }
Noximilien 13:5c3dc6e827c2 272 }
Noximilien 13:5c3dc6e827c2 273 }
Noximilien 13:5c3dc6e827c2 274
Noximilien 18:6becc9f9de5e 275 void shipMovment(){ // The position of the player
Noximilien 13:5c3dc6e827c2 276
Noximilien 15:0145c5f0bea1 277 if(x_ship_pos <= screen_height && x_ship_pos >= 0){
Noximilien 13:5c3dc6e827c2 278 if(x_dir.read() > 0.6f){
Noximilien 13:5c3dc6e827c2 279 x_ship_pos -= ship_speed;
Noximilien 13:5c3dc6e827c2 280 }
Noximilien 13:5c3dc6e827c2 281 else if(x_dir.read() < 0.4f){
Noximilien 13:5c3dc6e827c2 282 x_ship_pos += ship_speed;
Noximilien 13:5c3dc6e827c2 283 }
Noximilien 13:5c3dc6e827c2 284 }
Noximilien 13:5c3dc6e827c2 285
Noximilien 13:5c3dc6e827c2 286 else if (x_ship_pos <= 48){ x_ship_pos = 0;} //Limits for x direction border IMPROVE IF POSSIBLE.
Noximilien 13:5c3dc6e827c2 287 else { x_ship_pos = 48;}
Noximilien 13:5c3dc6e827c2 288
Noximilien 13:5c3dc6e827c2 289
Noximilien 15:0145c5f0bea1 290 if (y_ship_pos <= (screen_height - spaceship1_height) && y_ship_pos >= game_score_height){
Noximilien 13:5c3dc6e827c2 291 if(y_dir.read() > 0.6f){
Noximilien 13:5c3dc6e827c2 292 y_ship_pos -= ship_speed;
Noximilien 13:5c3dc6e827c2 293 }
Noximilien 13:5c3dc6e827c2 294 else if(y_dir.read() < 0.4f){
Noximilien 13:5c3dc6e827c2 295 y_ship_pos += ship_speed;
Noximilien 13:5c3dc6e827c2 296 }
Noximilien 13:5c3dc6e827c2 297 }
Noximilien 15:0145c5f0bea1 298 else if (y_ship_pos >= (screen_height - spaceship1_height)){ //Limits for y direction border IMPROVE IF POSSIBLE.
Noximilien 15:0145c5f0bea1 299 y_ship_pos = screen_height - spaceship1_height;
Noximilien 14:e8de27c4d0d4 300 }
Noximilien 15:0145c5f0bea1 301 else if (y_ship_pos < game_score_height){
Noximilien 15:0145c5f0bea1 302 y_ship_pos = game_score_height;
Noximilien 14:e8de27c4d0d4 303 }
Noximilien 13:5c3dc6e827c2 304 }
Noximilien 13:5c3dc6e827c2 305
Noximilien 14:e8de27c4d0d4 306 void highScore(){
Noximilien 16:b7d0cac561cc 307
Noximilien 14:e8de27c4d0d4 308 char buffer[4];
Noximilien 14:e8de27c4d0d4 309 sprintf(buffer," Score: %i",game_score);
Noximilien 14:e8de27c4d0d4 310 lcd.printString(buffer,0,0);
Noximilien 14:e8de27c4d0d4 311 }
Noximilien 13:5c3dc6e827c2 312
Noximilien 16:b7d0cac561cc 313 void playerLivesRemain(){////////////////////////////////////////////////////////////////////////////////
Noximilien 17:69a85c909566 314 if (player_lifes == 3){
Noximilien 18:6becc9f9de5e 315 //turn all LEDs on
Noximilien 18:6becc9f9de5e 316 gamepad.leds_on();
Noximilien 16:b7d0cac561cc 317 }
Noximilien 18:6becc9f9de5e 318 else if (player_lifes == 2){
Noximilien 16:b7d0cac561cc 319 // only yelow and red are lit (to tal 4)
Noximilien 18:6becc9f9de5e 320
Noximilien 18:6becc9f9de5e 321 //gamepad.leds_on();
Noximilien 18:6becc9f9de5e 322 gamepad.led(6,0.0);
Noximilien 18:6becc9f9de5e 323 gamepad.led(3,0.0);
Noximilien 16:b7d0cac561cc 324 }
Noximilien 18:6becc9f9de5e 325 else if (player_lifes == 1){
Noximilien 16:b7d0cac561cc 326 // red LED is lit and flashes.
Noximilien 18:6becc9f9de5e 327 gamepad.led(2,0.0);
Noximilien 18:6becc9f9de5e 328 gamepad.led(5,0.0);
Noximilien 17:69a85c909566 329
Noximilien 16:b7d0cac561cc 330 }
Noximilien 16:b7d0cac561cc 331 else {
Noximilien 16:b7d0cac561cc 332 // all LEDs are flashing
Noximilien 18:6becc9f9de5e 333 gamepad.leds_off();
Noximilien 16:b7d0cac561cc 334 game_over = true;
Noximilien 16:b7d0cac561cc 335 }
Noximilien 16:b7d0cac561cc 336
Noximilien 16:b7d0cac561cc 337 }
Noximilien 16:b7d0cac561cc 338
Noximilien 4:02c63aaa2df9 339 bool Game::updateAndDraw() {
Noximilien 6:100b46be4bea 340
Noximilien 6:100b46be4bea 341 shipMovment();
Noximilien 6:100b46be4bea 342 if (gamepad.check_event(gamepad.B_PRESSED)){
Noximilien 9:5ad5501c702e 343 fireNewBlast();
Noximilien 6:100b46be4bea 344 }
Noximilien 11:cf2ba52e8b7e 345 if (small_star_delay == small_star_delay_max){
Noximilien 11:cf2ba52e8b7e 346 //This is dealy between small stars generation.
Noximilien 18:6becc9f9de5e 347 //newSmallStarFlies();
Noximilien 18:6becc9f9de5e 348 //newMediumStarFlies();
Noximilien 12:bfe3a3deaac3 349 spawnNewEnemy();
Noximilien 12:bfe3a3deaac3 350
Noximilien 11:cf2ba52e8b7e 351 small_star_delay = 0;
Noximilien 10:f02413ae09fe 352 }
Noximilien 10:f02413ae09fe 353 else {
Noximilien 11:cf2ba52e8b7e 354 small_star_delay += 1;
Noximilien 10:f02413ae09fe 355 }
Noximilien 7:42376925945c 356
Noximilien 16:b7d0cac561cc 357 if (enemy_blast_delay == enemy_blast_delay_max){
Noximilien 16:b7d0cac561cc 358
Noximilien 16:b7d0cac561cc 359 fireNewEnemyBlast();
Noximilien 16:b7d0cac561cc 360 enemy_blast_delay = 0;
Noximilien 16:b7d0cac561cc 361 }
Noximilien 16:b7d0cac561cc 362 else {
Noximilien 16:b7d0cac561cc 363 enemy_blast_delay += 1;
Noximilien 16:b7d0cac561cc 364 }
Noximilien 16:b7d0cac561cc 365
Noximilien 17:69a85c909566 366 playerLivesRemain();
Noximilien 9:5ad5501c702e 367 updateAndDrawBlasts();
Noximilien 11:cf2ba52e8b7e 368 updateAndDrawSmallStars();
Noximilien 11:cf2ba52e8b7e 369 updateAndDrawMediumStars();
Noximilien 12:bfe3a3deaac3 370 updateAndDrawEnemies();
Noximilien 12:bfe3a3deaac3 371 collideEnemiesAndBlasts();
Noximilien 18:6becc9f9de5e 372 collideEnemiesBlastsAndPlayer();
Noximilien 16:b7d0cac561cc 373 updateAndDrawEnemyBlasts();
Noximilien 14:e8de27c4d0d4 374 highScore();
Noximilien 5:2b9181bc5c89 375
Noximilien 9:5ad5501c702e 376 lcd.drawSpriteOnTop(x_ship_pos, y_ship_pos, spaceship1_width, spaceship1_height, (int *)spaceShip1);
Noximilien 5:2b9181bc5c89 377 /*char buffer[4];
Noximilien 5:2b9181bc5c89 378 sprintf(buffer,"%i\n",(int)(x_dir.read()*84));
Noximilien 5:2b9181bc5c89 379 printf(buffer);*/
Noximilien 3:10918b0f7a7d 380
Noximilien 4:02c63aaa2df9 381 bool want_to_pause = false;
Noximilien 4:02c63aaa2df9 382 if (gamepad.check_event(gamepad.START_PRESSED)){
Noximilien 7:42376925945c 383
Noximilien 4:02c63aaa2df9 384 want_to_pause = true;
Noximilien 4:02c63aaa2df9 385 }
Noximilien 4:02c63aaa2df9 386 return want_to_pause;
Noximilien 13:5c3dc6e827c2 387 }