Initial publish
Dependencies: mbed
Fork of el17dg by
game/gameovermanager.h@40:e3bbda7444fa, 2019-05-07 (annotated)
- Committer:
- Noximilien
- Date:
- Tue May 07 15:22:35 2019 +0000
- Revision:
- 40:e3bbda7444fa
- Parent:
- 38:ef3968546d36
The Final, Submission Version. I have read and agreed to the academic integrity. SID:201160286
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Noximilien | 33:c623c6d5ed16 | 1 | #ifndef GAMEOVERMANAGER_H |
Noximilien | 33:c623c6d5ed16 | 2 | #define GAMEOVERMANAGER_H |
Noximilien | 33:c623c6d5ed16 | 3 | |
Noximilien | 34:754915ce9de5 | 4 | /** |
Noximilien | 34:754915ce9de5 | 5 | * GameOverManager Class |
Noximilien | 34:754915ce9de5 | 6 | * @brief A class for updating and drawing GameOver state. |
Noximilien | 34:754915ce9de5 | 7 | * @author Dmitrijs Griskovs |
Noximilien | 34:754915ce9de5 | 8 | * @date 30/04/2019 |
Noximilien | 34:754915ce9de5 | 9 | */ |
Noximilien | 33:c623c6d5ed16 | 10 | class GameOverManager { |
Noximilien | 33:c623c6d5ed16 | 11 | public: |
Noximilien | 34:754915ce9de5 | 12 | /** |
Noximilien | 34:754915ce9de5 | 13 | * Constructor. |
Noximilien | 34:754915ce9de5 | 14 | * @brief It init the GameOver with reseting |
Noximilien | 34:754915ce9de5 | 15 | * the statrting sequence of the gameOver state. |
Noximilien | 34:754915ce9de5 | 16 | */ |
Noximilien | 33:c623c6d5ed16 | 17 | GameOverManager() { reset(); } |
Noximilien | 33:c623c6d5ed16 | 18 | |
Noximilien | 34:754915ce9de5 | 19 | /** |
Noximilien | 34:754915ce9de5 | 20 | * @brief Resets the gameOver to the animiation to appear again |
Noximilien | 34:754915ce9de5 | 21 | * @returns bool started, when GameOver begins. |
Noximilien | 34:754915ce9de5 | 22 | */ |
Noximilien | 33:c623c6d5ed16 | 23 | void reset() { started = false; } |
Noximilien | 34:754915ce9de5 | 24 | /** |
Noximilien | 34:754915ce9de5 | 25 | * @brief Updates and draws the game over animation. |
Noximilien | 34:754915ce9de5 | 26 | * @details It draws "GameOver" sprite from the leftside of the screen to the center |
Noximilien | 34:754915ce9de5 | 27 | * and "youDied" sprite from the right side to the center. |
Noximilien | 34:754915ce9de5 | 28 | */ |
Noximilien | 33:c623c6d5ed16 | 29 | void updateAndDraw() { |
Noximilien | 35:172db1608332 | 30 | if (!started) { startAnimation();} |
Noximilien | 33:c623c6d5ed16 | 31 | if (animation_counter < animation_length) { |
Noximilien | 33:c623c6d5ed16 | 32 | if (gamepad.check_event(gamepad.START_PRESSED)) { |
Noximilien | 33:c623c6d5ed16 | 33 | gameOverLogo.pos.x = game_area_x - 29 + 42; |
Noximilien | 33:c623c6d5ed16 | 34 | youDied.pos.x = game_area_width - 42; |
Noximilien | 34:754915ce9de5 | 35 | animation_counter = animation_length; |
Noximilien | 33:c623c6d5ed16 | 36 | } else { |
Noximilien | 33:c623c6d5ed16 | 37 | animation_counter++; |
Noximilien | 33:c623c6d5ed16 | 38 | gameOverLogo.pos.x += 1; |
Noximilien | 33:c623c6d5ed16 | 39 | youDied.pos.x -= 1; |
Noximilien | 33:c623c6d5ed16 | 40 | } |
Noximilien | 33:c623c6d5ed16 | 41 | } |
Noximilien | 33:c623c6d5ed16 | 42 | drawSprite(gameOverLogo.pos, game_over_sprite); |
Noximilien | 33:c623c6d5ed16 | 43 | drawSprite(youDied.pos, you_died_sprite); |
Noximilien | 35:172db1608332 | 44 | gameOverPostAnimation(); |
Noximilien | 33:c623c6d5ed16 | 45 | musicGameOver(); |
Noximilien | 33:c623c6d5ed16 | 46 | ledsGameOver(); |
Noximilien | 33:c623c6d5ed16 | 47 | } |
Noximilien | 33:c623c6d5ed16 | 48 | |
Noximilien | 34:754915ce9de5 | 49 | /** |
Noximilien | 34:754915ce9de5 | 50 | * @brief Checks for whether the animation of GameOver has stoped drawing or not |
Noximilien | 34:754915ce9de5 | 51 | * @details It check the value of the counter against the total length of the |
Noximilien | 34:754915ce9de5 | 52 | * animation play. When the counter equals to the total length, it indicates that |
Noximilien | 34:754915ce9de5 | 53 | * the animation has stopped |
Noximilien | 34:754915ce9de5 | 54 | */ |
Noximilien | 33:c623c6d5ed16 | 55 | bool isPlayingAnimation() { |
Noximilien | 33:c623c6d5ed16 | 56 | return animation_counter < animation_length; |
Noximilien | 33:c623c6d5ed16 | 57 | }; |
Noximilien | 33:c623c6d5ed16 | 58 | |
Noximilien | 33:c623c6d5ed16 | 59 | private: |
Noximilien | 33:c623c6d5ed16 | 60 | void startAnimation() { |
Noximilien | 33:c623c6d5ed16 | 61 | started = true; |
Noximilien | 33:c623c6d5ed16 | 62 | gameOverLogo.pos.x = game_area_x - 29; // 0 - the sprite length |
Noximilien | 33:c623c6d5ed16 | 63 | gameOverLogo.pos.y = game_area_y; |
Noximilien | 33:c623c6d5ed16 | 64 | youDied.pos.x = game_area_width; |
Noximilien | 33:c623c6d5ed16 | 65 | youDied.pos.y = game_area_y; |
Noximilien | 33:c623c6d5ed16 | 66 | animation_counter = 0; |
Noximilien | 33:c623c6d5ed16 | 67 | led_state = false; |
Noximilien | 33:c623c6d5ed16 | 68 | low_frequency_music_counter = 0; |
Noximilien | 33:c623c6d5ed16 | 69 | high_frequency_music_counter = 0; |
Noximilien | 33:c623c6d5ed16 | 70 | } |
Noximilien | 33:c623c6d5ed16 | 71 | |
Noximilien | 33:c623c6d5ed16 | 72 | void ledsGameOver(){ |
Noximilien | 33:c623c6d5ed16 | 73 | gamepad.led(1,(float)led_state); |
Noximilien | 33:c623c6d5ed16 | 74 | gamepad.led(2,(float)!led_state); |
Noximilien | 33:c623c6d5ed16 | 75 | gamepad.led(3,(float)led_state); |
Noximilien | 33:c623c6d5ed16 | 76 | gamepad.led(4,(float)!led_state); |
Noximilien | 33:c623c6d5ed16 | 77 | gamepad.led(5,(float)led_state); |
Noximilien | 33:c623c6d5ed16 | 78 | gamepad.led(6,(float)!led_state); |
Noximilien | 33:c623c6d5ed16 | 79 | led_state = !led_state; |
Noximilien | 33:c623c6d5ed16 | 80 | } |
Noximilien | 33:c623c6d5ed16 | 81 | |
Noximilien | 33:c623c6d5ed16 | 82 | void musicGameOver(){ |
Noximilien | 33:c623c6d5ed16 | 83 | lowFrequencyPartMusic(); |
Noximilien | 33:c623c6d5ed16 | 84 | highFrequencyPartMusic(); |
Noximilien | 33:c623c6d5ed16 | 85 | high_frequency_music_counter++; |
Noximilien | 33:c623c6d5ed16 | 86 | low_frequency_music_counter++;//comment out this for epic game over beat. |
Noximilien | 37:6a2bf4488022 | 87 | DG_PRINTF("Low frequency counter value:: %i\n", low_frequency_music_counter); |
Noximilien | 37:6a2bf4488022 | 88 | DG_PRINTF("high frequency counter value:: %i\n", high_frequency_music_counter); |
Noximilien | 33:c623c6d5ed16 | 89 | } |
Noximilien | 33:c623c6d5ed16 | 90 | |
Noximilien | 33:c623c6d5ed16 | 91 | void lowFrequencyPartMusic(){ |
Noximilien | 33:c623c6d5ed16 | 92 | // Low frequency |
Noximilien | 33:c623c6d5ed16 | 93 | if (low_frequency_music_counter == 0){ gamepad.tone(60,3);} |
Noximilien | 33:c623c6d5ed16 | 94 | else if (low_frequency_music_counter == 3){gamepad.tone(90,3);} |
Noximilien | 33:c623c6d5ed16 | 95 | else if (low_frequency_music_counter == 6){gamepad.tone(60,3);} |
Noximilien | 33:c623c6d5ed16 | 96 | else if (low_frequency_music_counter == 9){gamepad.tone(80,3);} |
Noximilien | 33:c623c6d5ed16 | 97 | else if (low_frequency_music_counter == 12){gamepad.tone(70,2);} |
Noximilien | 33:c623c6d5ed16 | 98 | else if (low_frequency_music_counter == 14){gamepad.tone(60,2);} |
Noximilien | 33:c623c6d5ed16 | 99 | else if (low_frequency_music_counter == 16){gamepad.tone(70,3);} |
Noximilien | 33:c623c6d5ed16 | 100 | else if (low_frequency_music_counter == 19){gamepad.tone(50,1);} |
Noximilien | 33:c623c6d5ed16 | 101 | else if (low_frequency_music_counter == 20){gamepad.tone(40,3);} |
Noximilien | 33:c623c6d5ed16 | 102 | else if (low_frequency_music_counter== 23){ |
Noximilien | 33:c623c6d5ed16 | 103 | gamepad.tone(60,2); |
Noximilien | 33:c623c6d5ed16 | 104 | low_frequency_music_counter = 0; |
Noximilien | 33:c623c6d5ed16 | 105 | } |
Noximilien | 33:c623c6d5ed16 | 106 | } |
Noximilien | 33:c623c6d5ed16 | 107 | |
Noximilien | 33:c623c6d5ed16 | 108 | void highFrequencyPartMusic(){ |
Noximilien | 33:c623c6d5ed16 | 109 | // High frequency |
Noximilien | 33:c623c6d5ed16 | 110 | if ( high_frequency_music_counter == 0){ gamepad.tone(300,0.1);} |
Noximilien | 33:c623c6d5ed16 | 111 | else if (high_frequency_music_counter == 3){gamepad.tone(250,0.1);} |
Noximilien | 33:c623c6d5ed16 | 112 | else if (high_frequency_music_counter == 6){gamepad.tone(230,0.2);} |
Noximilien | 33:c623c6d5ed16 | 113 | else if (high_frequency_music_counter == 9){gamepad.tone(250,0.1);} |
Noximilien | 33:c623c6d5ed16 | 114 | else if ( high_frequency_music_counter == 12){gamepad.tone(250,0.2);} |
Noximilien | 33:c623c6d5ed16 | 115 | else if ( high_frequency_music_counter == 14){gamepad.tone(220,0.1);} |
Noximilien | 33:c623c6d5ed16 | 116 | else if ( high_frequency_music_counter == 16){gamepad.tone(210,0.3);} |
Noximilien | 33:c623c6d5ed16 | 117 | else if ( high_frequency_music_counter == 19){gamepad.tone(200,1);} |
Noximilien | 33:c623c6d5ed16 | 118 | else if ( high_frequency_music_counter == 21){gamepad.tone(250,1);} |
Noximilien | 33:c623c6d5ed16 | 119 | else if ( high_frequency_music_counter == 22){ |
Noximilien | 33:c623c6d5ed16 | 120 | gamepad.tone(200,1); |
Noximilien | 33:c623c6d5ed16 | 121 | high_frequency_music_counter = 0; |
Noximilien | 33:c623c6d5ed16 | 122 | } |
Noximilien | 33:c623c6d5ed16 | 123 | } |
Noximilien | 34:754915ce9de5 | 124 | void updateHighScore(){ |
Noximilien | 34:754915ce9de5 | 125 | if (GameGlobals::high_score < GameGlobals::game_score){ |
Noximilien | 34:754915ce9de5 | 126 | GameGlobals::high_score = GameGlobals::game_score; |
Noximilien | 34:754915ce9de5 | 127 | } |
Noximilien | 34:754915ce9de5 | 128 | } |
Noximilien | 33:c623c6d5ed16 | 129 | |
Noximilien | 35:172db1608332 | 130 | void gameOverPostAnimation(){ |
Noximilien | 35:172db1608332 | 131 | char buffer[32]; |
Noximilien | 35:172db1608332 | 132 | sprintf(buffer,"Score: %i", GameGlobals::game_score); |
Noximilien | 35:172db1608332 | 133 | updateHighScore(); |
Noximilien | 35:172db1608332 | 134 | lcd.printString(buffer,0,3); |
Noximilien | 35:172db1608332 | 135 | lcd.printString("Press Y",0,4); |
Noximilien | 35:172db1608332 | 136 | lcd.printString("to restart",0,5); |
Noximilien | 38:ef3968546d36 | 137 | gamepad.check_event(gamepad.START_PRESSED); |
Noximilien | 35:172db1608332 | 138 | } |
Noximilien | 35:172db1608332 | 139 | |
Noximilien | 33:c623c6d5ed16 | 140 | bool started; |
Noximilien | 33:c623c6d5ed16 | 141 | static const int animation_length = 42; |
Noximilien | 33:c623c6d5ed16 | 142 | int animation_counter; |
Noximilien | 33:c623c6d5ed16 | 143 | GameObject gameOverLogo; |
Noximilien | 33:c623c6d5ed16 | 144 | GameObject youDied; |
Noximilien | 33:c623c6d5ed16 | 145 | bool led_state; |
Noximilien | 33:c623c6d5ed16 | 146 | int low_frequency_music_counter; |
Noximilien | 33:c623c6d5ed16 | 147 | int high_frequency_music_counter; |
Noximilien | 33:c623c6d5ed16 | 148 | }; |
Noximilien | 33:c623c6d5ed16 | 149 | |
Noximilien | 33:c623c6d5ed16 | 150 | #endif |