ELEC2645 (2018/19) / Mbed 2 deprecated el17dg

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

Committer:
Noximilien
Date:
Tue Mar 26 10:52:53 2019 +0000
Revision:
20:557e84189a57
Parent:
19:b78fa41d04a9
Child:
21:0eb394495b8a
Have made the intro for my game. I need to implement class system again in order to get more marks. Need to a function that will be resetting in game values when the game is over.;

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