ELEC2645 (2018/19) / Mbed 2 deprecated el17dg

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

Committer:
Noximilien
Date:
Mon Apr 29 08:10:52 2019 +0000
Revision:
33:c623c6d5ed16
Child:
34:754915ce9de5
Have started working on boss mode. Changed the structure of game.cpp to finite state machine. Moved Game Over to a separate class. slightlight changed the player class. changed geometry into collision library. Cleaned the code to be under 20 lines.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Noximilien 33:c623c6d5ed16 1 #ifndef GAMEOVERMANAGER_H
Noximilien 33:c623c6d5ed16 2 #define GAMEOVERMANAGER_H
Noximilien 33:c623c6d5ed16 3
Noximilien 33:c623c6d5ed16 4 #include "main.h"
Noximilien 33:c623c6d5ed16 5
Noximilien 33:c623c6d5ed16 6 class GameOverManager {
Noximilien 33:c623c6d5ed16 7 public:
Noximilien 33:c623c6d5ed16 8 GameOverManager() { reset(); }
Noximilien 33:c623c6d5ed16 9
Noximilien 33:c623c6d5ed16 10 void reset() { started = false; }
Noximilien 33:c623c6d5ed16 11
Noximilien 33:c623c6d5ed16 12 void updateAndDraw() {
Noximilien 33:c623c6d5ed16 13 if (!started) {
Noximilien 33:c623c6d5ed16 14 startAnimation();
Noximilien 33:c623c6d5ed16 15 }
Noximilien 33:c623c6d5ed16 16
Noximilien 33:c623c6d5ed16 17 if (animation_counter < animation_length) {
Noximilien 33:c623c6d5ed16 18 if (gamepad.check_event(gamepad.START_PRESSED)) {
Noximilien 33:c623c6d5ed16 19 gameOverLogo.pos.x = game_area_x - 29 + 42;
Noximilien 33:c623c6d5ed16 20 youDied.pos.x = game_area_width - 42;
Noximilien 33:c623c6d5ed16 21 } else {
Noximilien 33:c623c6d5ed16 22 animation_counter++;
Noximilien 33:c623c6d5ed16 23 gameOverLogo.pos.x += 1;
Noximilien 33:c623c6d5ed16 24 youDied.pos.x -= 1;
Noximilien 33:c623c6d5ed16 25 }
Noximilien 33:c623c6d5ed16 26 }
Noximilien 33:c623c6d5ed16 27 drawSprite(gameOverLogo.pos, game_over_sprite);
Noximilien 33:c623c6d5ed16 28 drawSprite(youDied.pos, you_died_sprite);
Noximilien 33:c623c6d5ed16 29
Noximilien 33:c623c6d5ed16 30 char buffer[32];
Noximilien 33:c623c6d5ed16 31 sprintf(buffer,"Your Score %i", GameGlobals::game_score);
Noximilien 33:c623c6d5ed16 32 lcd.printString(buffer,0,3);
Noximilien 33:c623c6d5ed16 33 lcd.printString("Press Y",0,4);
Noximilien 33:c623c6d5ed16 34 lcd.printString("to restart",0,5);
Noximilien 33:c623c6d5ed16 35
Noximilien 33:c623c6d5ed16 36 musicGameOver();
Noximilien 33:c623c6d5ed16 37 ledsGameOver();
Noximilien 33:c623c6d5ed16 38 }
Noximilien 33:c623c6d5ed16 39
Noximilien 33:c623c6d5ed16 40 bool isPlayingAnimation() {
Noximilien 33:c623c6d5ed16 41 return animation_counter < animation_length;
Noximilien 33:c623c6d5ed16 42 };
Noximilien 33:c623c6d5ed16 43
Noximilien 33:c623c6d5ed16 44 private:
Noximilien 33:c623c6d5ed16 45 void startAnimation() {
Noximilien 33:c623c6d5ed16 46 started = true;
Noximilien 33:c623c6d5ed16 47 gameOverLogo.pos.x = game_area_x - 29; // 0 - the sprite length
Noximilien 33:c623c6d5ed16 48 gameOverLogo.pos.y = game_area_y;
Noximilien 33:c623c6d5ed16 49 youDied.pos.x = game_area_width;
Noximilien 33:c623c6d5ed16 50 youDied.pos.y = game_area_y;
Noximilien 33:c623c6d5ed16 51 animation_counter = 0;
Noximilien 33:c623c6d5ed16 52 led_state = false;
Noximilien 33:c623c6d5ed16 53 low_frequency_music_counter = 0;
Noximilien 33:c623c6d5ed16 54 high_frequency_music_counter = 0;
Noximilien 33:c623c6d5ed16 55 }
Noximilien 33:c623c6d5ed16 56
Noximilien 33:c623c6d5ed16 57 void ledsGameOver(){
Noximilien 33:c623c6d5ed16 58 gamepad.led(1,(float)led_state);
Noximilien 33:c623c6d5ed16 59 gamepad.led(2,(float)!led_state);
Noximilien 33:c623c6d5ed16 60 gamepad.led(3,(float)led_state);
Noximilien 33:c623c6d5ed16 61 gamepad.led(4,(float)!led_state);
Noximilien 33:c623c6d5ed16 62 gamepad.led(5,(float)led_state);
Noximilien 33:c623c6d5ed16 63 gamepad.led(6,(float)!led_state);
Noximilien 33:c623c6d5ed16 64 led_state = !led_state;
Noximilien 33:c623c6d5ed16 65 }
Noximilien 33:c623c6d5ed16 66
Noximilien 33:c623c6d5ed16 67 void musicGameOver(){
Noximilien 33:c623c6d5ed16 68 lowFrequencyPartMusic();
Noximilien 33:c623c6d5ed16 69 highFrequencyPartMusic();
Noximilien 33:c623c6d5ed16 70 high_frequency_music_counter++;
Noximilien 33:c623c6d5ed16 71 low_frequency_music_counter++;//comment out this for epic game over beat.
Noximilien 33:c623c6d5ed16 72 //printf("Low frequency counter value:: %i\n", low_frequency_music_counter);
Noximilien 33:c623c6d5ed16 73 //printf("high frequency counter value:: %i\n", high_frequency_music_counter);
Noximilien 33:c623c6d5ed16 74 }
Noximilien 33:c623c6d5ed16 75
Noximilien 33:c623c6d5ed16 76 void lowFrequencyPartMusic(){
Noximilien 33:c623c6d5ed16 77 // Low frequency
Noximilien 33:c623c6d5ed16 78 if (low_frequency_music_counter == 0){ gamepad.tone(60,3);}
Noximilien 33:c623c6d5ed16 79 else if (low_frequency_music_counter == 3){gamepad.tone(90,3);}
Noximilien 33:c623c6d5ed16 80 else if (low_frequency_music_counter == 6){gamepad.tone(60,3);}
Noximilien 33:c623c6d5ed16 81 else if (low_frequency_music_counter == 9){gamepad.tone(80,3);}
Noximilien 33:c623c6d5ed16 82 else if (low_frequency_music_counter == 12){gamepad.tone(70,2);}
Noximilien 33:c623c6d5ed16 83 else if (low_frequency_music_counter == 14){gamepad.tone(60,2);}
Noximilien 33:c623c6d5ed16 84 else if (low_frequency_music_counter == 16){gamepad.tone(70,3);}
Noximilien 33:c623c6d5ed16 85 else if (low_frequency_music_counter == 19){gamepad.tone(50,1);}
Noximilien 33:c623c6d5ed16 86 else if (low_frequency_music_counter == 20){gamepad.tone(40,3);}
Noximilien 33:c623c6d5ed16 87 else if (low_frequency_music_counter== 23){
Noximilien 33:c623c6d5ed16 88 gamepad.tone(60,2);
Noximilien 33:c623c6d5ed16 89 low_frequency_music_counter = 0;
Noximilien 33:c623c6d5ed16 90 }
Noximilien 33:c623c6d5ed16 91 }
Noximilien 33:c623c6d5ed16 92
Noximilien 33:c623c6d5ed16 93 void highFrequencyPartMusic(){
Noximilien 33:c623c6d5ed16 94 // High frequency
Noximilien 33:c623c6d5ed16 95 if ( high_frequency_music_counter == 0){ gamepad.tone(300,0.1);}
Noximilien 33:c623c6d5ed16 96 else if (high_frequency_music_counter == 3){gamepad.tone(250,0.1);}
Noximilien 33:c623c6d5ed16 97 else if (high_frequency_music_counter == 6){gamepad.tone(230,0.2);}
Noximilien 33:c623c6d5ed16 98 else if (high_frequency_music_counter == 9){gamepad.tone(250,0.1);}
Noximilien 33:c623c6d5ed16 99 else if ( high_frequency_music_counter == 12){gamepad.tone(250,0.2);}
Noximilien 33:c623c6d5ed16 100 else if ( high_frequency_music_counter == 14){gamepad.tone(220,0.1);}
Noximilien 33:c623c6d5ed16 101 else if ( high_frequency_music_counter == 16){gamepad.tone(210,0.3);}
Noximilien 33:c623c6d5ed16 102 else if ( high_frequency_music_counter == 19){gamepad.tone(200,1);}
Noximilien 33:c623c6d5ed16 103 else if ( high_frequency_music_counter == 21){gamepad.tone(250,1);}
Noximilien 33:c623c6d5ed16 104 else if ( high_frequency_music_counter == 22){
Noximilien 33:c623c6d5ed16 105 gamepad.tone(200,1);
Noximilien 33:c623c6d5ed16 106 high_frequency_music_counter = 0;
Noximilien 33:c623c6d5ed16 107 }
Noximilien 33:c623c6d5ed16 108 }
Noximilien 33:c623c6d5ed16 109
Noximilien 33:c623c6d5ed16 110 bool started;
Noximilien 33:c623c6d5ed16 111 static const int animation_length = 42;
Noximilien 33:c623c6d5ed16 112 int animation_counter;
Noximilien 33:c623c6d5ed16 113 GameObject gameOverLogo;
Noximilien 33:c623c6d5ed16 114 GameObject youDied;
Noximilien 33:c623c6d5ed16 115 bool led_state;
Noximilien 33:c623c6d5ed16 116 int low_frequency_music_counter;
Noximilien 33:c623c6d5ed16 117 int high_frequency_music_counter;
Noximilien 33:c623c6d5ed16 118 };
Noximilien 33:c623c6d5ed16 119
Noximilien 33:c623c6d5ed16 120 #endif