Initial publish

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

Committer:
Noximilien
Date:
Mon Apr 15 12:59:51 2019 +0000
Revision:
29:579e00b7f118
Parent:
28:35af3843de8f
Child:
30:d454d0cb72bc
Added a lot of comments.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Noximilien 3:10918b0f7a7d 1 #include "mbed.h"
Noximilien 3:10918b0f7a7d 2 #include "N5110.h"
Noximilien 3:10918b0f7a7d 3 #include "Gamepad.h"
Noximilien 3:10918b0f7a7d 4
Noximilien 3:10918b0f7a7d 5 #include "models.h"
Noximilien 4:02c63aaa2df9 6 #include "main.h"
Noximilien 4:02c63aaa2df9 7 #include "game.h"
Noximilien 21:0eb394495b8a 8 #include "geometry.h"
Noximilien 21:0eb394495b8a 9 #include "gameobject.h"
Noximilien 21:0eb394495b8a 10
Noximilien 21:0eb394495b8a 11 #include "enemies.h"
Noximilien 22:4dc3c95f2146 12 #include "constants.h"
Noximilien 23:240bc00ef25b 13 #include "stars.h"
Noximilien 23:240bc00ef25b 14 #include "player.h"
Noximilien 26:676874c42883 15 #include "hud.h"
Noximilien 20:557e84189a57 16
Noximilien 29:579e00b7f118 17 // The speed of every counter is 1Hz
Noximilien 21:0eb394495b8a 18 bool game_over = true;
Noximilien 21:0eb394495b8a 19 int game_score;
Noximilien 28:35af3843de8f 20 int high_score = 0;
Noximilien 26:676874c42883 21 int score_count_for_difficulty;
Noximilien 27:f05f4e738ba9 22 int player_lifes = 3;
Noximilien 29:579e00b7f118 23 int low_frequency_music_counter = 0;
Noximilien 29:579e00b7f118 24 int high_frequency_music_counter = 0;
Noximilien 21:0eb394495b8a 25 bool red_led_state;
Noximilien 21:0eb394495b8a 26 int red_led_flashing;
Noximilien 26:676874c42883 27 int enemy_ship_delay_counter;
Noximilien 7:42376925945c 28
Noximilien 26:676874c42883 29 const int increase_difficulty = 50;
Noximilien 26:676874c42883 30 int enemy_ship_delay_max = 40;
Noximilien 29:579e00b7f118 31 bool led_state = false;
Noximilien 11:cf2ba52e8b7e 32
Noximilien 21:0eb394495b8a 33 Enemies enemies;
Noximilien 23:240bc00ef25b 34 Stars stars;
Noximilien 23:240bc00ef25b 35 Player playerShip;
Noximilien 23:240bc00ef25b 36 GameObject gameOverLogo;
Noximilien 23:240bc00ef25b 37 GameObject youDied;
Noximilien 26:676874c42883 38 Hud hud;
Noximilien 12:bfe3a3deaac3 39
Noximilien 22:4dc3c95f2146 40 /**@brief
Noximilien 29:579e00b7f118 41 * This is the main function of game.cpp, where the actual gameplay happens.
Noximilien 29:579e00b7f118 42 * Here all other functions are activeated, and when the player dies, it
Noximilien 29:579e00b7f118 43 * returns back to main menu "main.cpp".
Noximilien 29:579e00b7f118 44 */
Noximilien 29:579e00b7f118 45 bool Game::updateAndDraw() {
Noximilien 29:579e00b7f118 46 printf("update \n");
Noximilien 29:579e00b7f118 47 if (game_over) {
Noximilien 29:579e00b7f118 48 printf("start game \n");
Noximilien 29:579e00b7f118 49 startNewGame();
Noximilien 29:579e00b7f118 50 }
Noximilien 29:579e00b7f118 51 if (gamepad.check_event(gamepad.X_PRESSED)){
Noximilien 29:579e00b7f118 52 // Checking the button second time to prevent double blast.
Noximilien 29:579e00b7f118 53 gamepad.check_event(gamepad.X_PRESSED);
Noximilien 29:579e00b7f118 54 playerShip.fireNewBlast();
Noximilien 29:579e00b7f118 55 gamepad.tone(200,0.1);
Noximilien 29:579e00b7f118 56 }
Noximilien 29:579e00b7f118 57 playerShip.playerShipMovement();
Noximilien 29:579e00b7f118 58 stars.starsSpawnDelay();
Noximilien 29:579e00b7f118 59 increaseGameDifficultyAndEnemySpawnDelay();
Noximilien 29:579e00b7f118 60 hud.displayLifes();
Noximilien 29:579e00b7f118 61 playerShip.updateAndDrawBlasts();
Noximilien 29:579e00b7f118 62 stars.updateAndDrawSmallStars();
Noximilien 29:579e00b7f118 63 stars.updateAndDrawMediumStars();
Noximilien 29:579e00b7f118 64 enemies.updateAndDrawEnemies();
Noximilien 29:579e00b7f118 65 collideEnemiesAndBlasts();
Noximilien 29:579e00b7f118 66 collideEnemiesBlastsAndPlayer();
Noximilien 29:579e00b7f118 67 collideEnemiesAndPlayer();
Noximilien 29:579e00b7f118 68 enemies.updateAndDrawEnemyBlasts();
Noximilien 29:579e00b7f118 69 hud.drawScore();
Noximilien 29:579e00b7f118 70
Noximilien 29:579e00b7f118 71 /**@brief
Noximilien 29:579e00b7f118 72 * This small statment checks whether the pause button was pressed or not.
Noximilien 29:579e00b7f118 73 * If it was pressed, then the game will go back to main menu and will save
Noximilien 29:579e00b7f118 74 * the current status of the object until the game is continued.
Noximilien 29:579e00b7f118 75 */
Noximilien 29:579e00b7f118 76 bool want_to_pause = false;
Noximilien 29:579e00b7f118 77 game_over = checkForGameOver();
Noximilien 29:579e00b7f118 78 if (game_over){
Noximilien 29:579e00b7f118 79 printf("game over happened\n");
Noximilien 29:579e00b7f118 80 gameOver();
Noximilien 29:579e00b7f118 81 want_to_pause = true;
Noximilien 29:579e00b7f118 82 }
Noximilien 29:579e00b7f118 83 if (gamepad.check_event(gamepad.START_PRESSED)){
Noximilien 29:579e00b7f118 84 printf("pausing the game\n");
Noximilien 29:579e00b7f118 85 gamepad.check_event(gamepad.START_PRESSED);
Noximilien 29:579e00b7f118 86 want_to_pause = true;
Noximilien 29:579e00b7f118 87 }
Noximilien 29:579e00b7f118 88 return want_to_pause;
Noximilien 29:579e00b7f118 89 }
Noximilien 29:579e00b7f118 90
Noximilien 29:579e00b7f118 91 /**@brief
Noximilien 22:4dc3c95f2146 92 * This function checks whether the requirments for the collision of the two objects,
Noximilien 22:4dc3c95f2146 93 * are met. When those requirments are met the collision of two objects function will
Noximilien 22:4dc3c95f2146 94 * be checking wheter the boundaries of the objects colide. If they do, the blast
Noximilien 22:4dc3c95f2146 95 * becomes inactive, in game score increases and enemy dies.
Noximilien 22:4dc3c95f2146 96 */
Noximilien 21:0eb394495b8a 97 void Game::collideEnemiesAndBlasts() {
Noximilien 21:0eb394495b8a 98 for (int i = 0; i < max_enemies; ++i) {
Noximilien 23:240bc00ef25b 99 for (int j = 0; j < max_player_blasts; ++j) {
Noximilien 21:0eb394495b8a 100 Enemy& enemy = enemies.enemies[i];
Noximilien 21:0eb394495b8a 101 GameObject& blast = blasts[j];
Noximilien 21:0eb394495b8a 102 if (enemy.active && !enemy.dead && blast.active) {
Noximilien 12:bfe3a3deaac3 103 bool collision = circleCollideTwoObjects(
Noximilien 21:0eb394495b8a 104 enemy.pos, enemies.enemy_bounds,
Noximilien 21:0eb394495b8a 105 blast.pos, blast_bounds
Noximilien 12:bfe3a3deaac3 106 );
Noximilien 12:bfe3a3deaac3 107 if (collision) {
Noximilien 21:0eb394495b8a 108 enemy.die();
Noximilien 29:579e00b7f118 109 printf("enemy got hit and dies from blast");
Noximilien 21:0eb394495b8a 110 game_score += 30;
Noximilien 26:676874c42883 111 score_count_for_difficulty +=30;
Noximilien 21:0eb394495b8a 112 blast.active = false;
Noximilien 12:bfe3a3deaac3 113 }
Noximilien 12:bfe3a3deaac3 114 }
Noximilien 12:bfe3a3deaac3 115 }
Noximilien 12:bfe3a3deaac3 116 }
Noximilien 12:bfe3a3deaac3 117 }
Noximilien 5:2b9181bc5c89 118
Noximilien 22:4dc3c95f2146 119 /**@brief
Noximilien 23:240bc00ef25b 120 * This code does the same work as the one before but with two other objects.
Noximilien 22:4dc3c95f2146 121 * It checks whether the requirments for the collision of the two objects,
Noximilien 22:4dc3c95f2146 122 * are met. When those requirments are met the collision of two objects function will
Noximilien 22:4dc3c95f2146 123 * be checking wheter the boundaries of the objects colide. If they do, the blast
Noximilien 22:4dc3c95f2146 124 * becomes inactive, in game score increases and enemy dies.
Noximilien 22:4dc3c95f2146 125 */
Noximilien 21:0eb394495b8a 126 void Game::collideEnemiesBlastsAndPlayer() {
Noximilien 23:240bc00ef25b 127 for (int i = 0; i < max_enemies; ++i) {
Noximilien 21:0eb394495b8a 128 GameObject& blast = enemies.enemy_blasts[i];
Noximilien 21:0eb394495b8a 129 if (blast.active) {
Noximilien 21:0eb394495b8a 130 bool collision = circleCollideTwoObjects(
Noximilien 21:0eb394495b8a 131 player.pos, player_bounds,
Noximilien 21:0eb394495b8a 132 blast.pos, enemies.enemy_blast_bounds
Noximilien 21:0eb394495b8a 133 );
Noximilien 21:0eb394495b8a 134 if (collision) {
Noximilien 29:579e00b7f118 135 gamepad.tone(423,0.4);
Noximilien 21:0eb394495b8a 136 player_lifes -= 1;
Noximilien 29:579e00b7f118 137 printf("lost a life from blst. left: %i \n", player_lifes);
Noximilien 21:0eb394495b8a 138 blast.active = false;
Noximilien 18:6becc9f9de5e 139 }
Noximilien 18:6becc9f9de5e 140 }
Noximilien 18:6becc9f9de5e 141 }
Noximilien 18:6becc9f9de5e 142 }
Noximilien 26:676874c42883 143
Noximilien 22:4dc3c95f2146 144 /**@brief
Noximilien 23:240bc00ef25b 145 * This code does the same work as the one before but with two other object.
Noximilien 23:240bc00ef25b 146 * of enemy ship and the player's ship
Noximilien 22:4dc3c95f2146 147 */
Noximilien 23:240bc00ef25b 148 void Game::collideEnemiesAndPlayer() {
Noximilien 27:f05f4e738ba9 149 for (int i = 0; i < max_enemies; ++i) {
Noximilien 23:240bc00ef25b 150 Enemy& enemy = enemies.enemies[i];
Noximilien 23:240bc00ef25b 151 if (enemy.active && !enemy.dead) {
Noximilien 23:240bc00ef25b 152 bool collision = circleCollideTwoObjects(
Noximilien 23:240bc00ef25b 153 player.pos, player_bounds,
Noximilien 23:240bc00ef25b 154 enemy.pos, enemies.enemy_bounds
Noximilien 23:240bc00ef25b 155 );
Noximilien 23:240bc00ef25b 156 if (collision) {
Noximilien 27:f05f4e738ba9 157 player_lifes -= 1;
Noximilien 29:579e00b7f118 158 printf("lost a life from enemy col. left: %i \n", player_lifes);
Noximilien 23:240bc00ef25b 159 enemy.die();
Noximilien 29:579e00b7f118 160 printf("enemy got hit from collsion and dies");
Noximilien 23:240bc00ef25b 161 }
Noximilien 23:240bc00ef25b 162 }
Noximilien 23:240bc00ef25b 163 }
Noximilien 13:5c3dc6e827c2 164 }
Noximilien 13:5c3dc6e827c2 165
Noximilien 26:676874c42883 166 /**@brief
Noximilien 26:676874c42883 167 * This function resets all the values to their intial states when the game is
Noximilien 26:676874c42883 168 * first began when the player dies and wants to restart the game.
Noximilien 23:240bc00ef25b 169 * It does not reset the values when the game is paused.
Noximilien 23:240bc00ef25b 170 */
Noximilien 21:0eb394495b8a 171 void Game::startNewGame() {
Noximilien 23:240bc00ef25b 172 gameOverLogo.pos.x = game_area_x - 29; // 0 - the sprite length
Noximilien 23:240bc00ef25b 173 gameOverLogo.pos.y = game_area_y;
Noximilien 23:240bc00ef25b 174 youDied.pos.x = game_area_width;
Noximilien 23:240bc00ef25b 175 youDied.pos.y = game_area_y;
Noximilien 21:0eb394495b8a 176 game_over = false;
Noximilien 23:240bc00ef25b 177 player.pos.x = 0; //player was defined in player.h
Noximilien 21:0eb394495b8a 178 player.pos.y = 24;
Noximilien 26:676874c42883 179 stars_delay = 0;
Noximilien 26:676874c42883 180 enemy_ship_delay_max = 40;
Noximilien 26:676874c42883 181 enemy_ship_delay_counter = enemy_ship_delay_max;
Noximilien 21:0eb394495b8a 182 game_score = 0;
Noximilien 26:676874c42883 183 score_count_for_difficulty = 0;
Noximilien 21:0eb394495b8a 184 player_lifes = 3;
Noximilien 21:0eb394495b8a 185 red_led_state = false;
Noximilien 21:0eb394495b8a 186 red_led_flashing = 0;
Noximilien 26:676874c42883 187 enemy_blast_speed = 3;
Noximilien 26:676874c42883 188 enemy_speed = 1;
Noximilien 21:0eb394495b8a 189 for (int i = 0; i < max_enemies; ++i) {
Noximilien 21:0eb394495b8a 190 enemies.enemies[i].active = false;
Noximilien 13:5c3dc6e827c2 191 }
Noximilien 23:240bc00ef25b 192 for (int i = 0; i < max_player_blasts; ++i) {
Noximilien 21:0eb394495b8a 193 blasts[i].active = false;
Noximilien 13:5c3dc6e827c2 194 }
Noximilien 21:0eb394495b8a 195 for (int i = 0; i < max_enemy_blasts; ++i) {
Noximilien 21:0eb394495b8a 196 enemies.enemy_blasts[i].active = false;
Noximilien 13:5c3dc6e827c2 197 }
Noximilien 29:579e00b7f118 198 //Reset start and Y button event to avoid errors
Noximilien 29:579e00b7f118 199 gamepad.check_event(gamepad.START_PRESSED);
Noximilien 29:579e00b7f118 200 gamepad.check_event(gamepad.Y_PRESSED);
Noximilien 13:5c3dc6e827c2 201 }
Noximilien 13:5c3dc6e827c2 202
Noximilien 26:676874c42883 203 /**@brief
Noximilien 23:240bc00ef25b 204 * A game over function that shows the sprites of "game over" and "you died".
Noximilien 23:240bc00ef25b 205 * Allows to reset the game to play again.
Noximilien 23:240bc00ef25b 206 */
Noximilien 23:240bc00ef25b 207 void Game::gameOver() {
Noximilien 28:35af3843de8f 208 drawGameOver();
Noximilien 26:676874c42883 209 char buffer[32];
Noximilien 24:0570cb4b92d7 210 sprintf(buffer,"Your Score %i",game_score);
Noximilien 24:0570cb4b92d7 211 lcd.printString(buffer,0,3);
Noximilien 23:240bc00ef25b 212 wait(1);
Noximilien 23:240bc00ef25b 213 lcd.printString("Press Y",0,4);
Noximilien 23:240bc00ef25b 214 lcd.printString("to restart",0,5);
Noximilien 23:240bc00ef25b 215 lcd.refresh();
Noximilien 29:579e00b7f118 216 gamepad.check_event(gamepad.START_PRESSED);
Noximilien 29:579e00b7f118 217 while (!gamepad.check_event(gamepad.Y_PRESSED)){/////////////////////////////////
Noximilien 29:579e00b7f118 218 musicGameOver();
Noximilien 29:579e00b7f118 219 ledsGameOver();
Noximilien 23:240bc00ef25b 220 }
Noximilien 23:240bc00ef25b 221 }
Noximilien 23:240bc00ef25b 222
Noximilien 26:676874c42883 223 /**@brief
Noximilien 26:676874c42883 224 * A function tbat delays enemy spawn on low game score.
Noximilien 26:676874c42883 225 * It decreases the enemy spawn delay as in game score increases.
Noximilien 29:579e00b7f118 226 * The enemy spawn delay is located in game.cpp because the game difficulty
Noximilien 29:579e00b7f118 227 * depends on the on how fast enemy appears.
Noximilien 26:676874c42883 228 */
Noximilien 26:676874c42883 229 void Game::increaseGameDifficultyAndEnemySpawnDelay(){
Noximilien 26:676874c42883 230 if (enemy_ship_delay_counter <= 0){
Noximilien 26:676874c42883 231 enemies.spawnNewEnemy();
Noximilien 26:676874c42883 232 enemy_ship_delay_counter = enemy_ship_delay_max;
Noximilien 26:676874c42883 233 }
Noximilien 26:676874c42883 234 else { enemy_ship_delay_counter -= 1;}
Noximilien 26:676874c42883 235
Noximilien 26:676874c42883 236 if (enemy_ship_delay_max >= 4 && score_count_for_difficulty >= increase_difficulty){
Noximilien 29:579e00b7f118 237 //decrease enemy delay spawn.
Noximilien 26:676874c42883 238 enemy_ship_delay_max -= 3;
Noximilien 26:676874c42883 239 if (enemy_ship_delay_max <= 20 && enemy_ship_delay_max >= 15){
Noximilien 26:676874c42883 240 enemy_blast_speed += 1;
Noximilien 26:676874c42883 241 enemy_speed += 1;
Noximilien 26:676874c42883 242 }
Noximilien 26:676874c42883 243 score_count_for_difficulty = 0;
Noximilien 26:676874c42883 244 }
Noximilien 26:676874c42883 245 }
Noximilien 26:676874c42883 246
Noximilien 26:676874c42883 247 /**@brief
Noximilien 27:f05f4e738ba9 248 * This is a single line function to set the player lifes to 0 when the.
Noximilien 27:f05f4e738ba9 249 * game is over.
Noximilien 27:f05f4e738ba9 250 */
Noximilien 27:f05f4e738ba9 251 bool Game::checkForGameOver() {
Noximilien 27:f05f4e738ba9 252 return player_lifes == 0;
Noximilien 28:35af3843de8f 253 }
Noximilien 29:579e00b7f118 254
Noximilien 29:579e00b7f118 255 /**@brief
Noximilien 29:579e00b7f118 256 * A separate function that draws game over. */
Noximilien 28:35af3843de8f 257 void Game::drawGameOver(){
Noximilien 28:35af3843de8f 258 for (int i = 0; i < 42; i++){
Noximilien 29:579e00b7f118 259 musicGameOver();
Noximilien 28:35af3843de8f 260 lcd.clear();
Noximilien 29:579e00b7f118 261 gameOverLogo.pos.x += 1;
Noximilien 29:579e00b7f118 262 youDied.pos.x -= 1;
Noximilien 29:579e00b7f118 263 drawSprite(gameOverLogo.pos, game_over_sprite);
Noximilien 29:579e00b7f118 264 drawSprite(youDied.pos, you_died_sprite);
Noximilien 28:35af3843de8f 265 lcd.refresh();
Noximilien 28:35af3843de8f 266 wait(0.1);
Noximilien 28:35af3843de8f 267 }
Noximilien 29:579e00b7f118 268 }
Noximilien 29:579e00b7f118 269
Noximilien 29:579e00b7f118 270 void Game::ledsGameOver(){
Noximilien 29:579e00b7f118 271 gamepad.led(1,(float)led_state);
Noximilien 29:579e00b7f118 272 gamepad.led(2,(float)!led_state);
Noximilien 29:579e00b7f118 273 gamepad.led(3,(float)led_state);
Noximilien 29:579e00b7f118 274 gamepad.led(4,(float)!led_state);
Noximilien 29:579e00b7f118 275 gamepad.led(5,(float)led_state);
Noximilien 29:579e00b7f118 276 gamepad.led(6,(float)!led_state);
Noximilien 29:579e00b7f118 277 wait(0.5);
Noximilien 29:579e00b7f118 278 led_state = !led_state;
Noximilien 29:579e00b7f118 279 }
Noximilien 29:579e00b7f118 280
Noximilien 29:579e00b7f118 281 void Game::musicGameOver(){
Noximilien 29:579e00b7f118 282 lowFrequencyPartMusic();
Noximilien 29:579e00b7f118 283 highFrequencyPartMusic();
Noximilien 29:579e00b7f118 284 high_frequency_music_counter ++;
Noximilien 29:579e00b7f118 285 low_frequency_music_counter ++; //remove this for epic game over beat.
Noximilien 29:579e00b7f118 286 printMusicCountersTest();
Noximilien 29:579e00b7f118 287 }
Noximilien 29:579e00b7f118 288
Noximilien 29:579e00b7f118 289 void Game::lowFrequencyPartMusic(){
Noximilien 29:579e00b7f118 290 // Low frequency //
Noximilien 29:579e00b7f118 291 //60:1, 50:1, 40:1, 30:1, 40:0.5, 50:0.5, 40:0.5, 30:0.5, 40:1, 30:2 = 9s;
Noximilien 29:579e00b7f118 292 if (low_frequency_music_counter == 0){ gamepad.tone(60,3);}
Noximilien 29:579e00b7f118 293 else if (low_frequency_music_counter == 3){gamepad.tone(90,3);}
Noximilien 29:579e00b7f118 294 else if (low_frequency_music_counter == 6){gamepad.tone(60,3);}
Noximilien 29:579e00b7f118 295 else if (low_frequency_music_counter == 9){gamepad.tone(80,3);}
Noximilien 29:579e00b7f118 296 else if (low_frequency_music_counter == 12){gamepad.tone(70,2);}
Noximilien 29:579e00b7f118 297 else if (low_frequency_music_counter == 14){gamepad.tone(60,2);}
Noximilien 29:579e00b7f118 298 else if (low_frequency_music_counter == 16){gamepad.tone(70,3);}
Noximilien 29:579e00b7f118 299 else if (low_frequency_music_counter == 19){gamepad.tone(50,1);}
Noximilien 29:579e00b7f118 300 else if (low_frequency_music_counter == 20){gamepad.tone(40,3);}
Noximilien 29:579e00b7f118 301 else if (low_frequency_music_counter== 23){
Noximilien 29:579e00b7f118 302 gamepad.tone(60,2);
Noximilien 29:579e00b7f118 303 low_frequency_music_counter = 0;
Noximilien 29:579e00b7f118 304 }
Noximilien 29:579e00b7f118 305 }
Noximilien 29:579e00b7f118 306
Noximilien 29:579e00b7f118 307 void Game::highFrequencyPartMusic(){
Noximilien 29:579e00b7f118 308 // High frequency
Noximilien 29:579e00b7f118 309 if ( high_frequency_music_counter == 0){ gamepad.tone(300,0.1);}
Noximilien 29:579e00b7f118 310 else if (high_frequency_music_counter == 3){gamepad.tone(250,0.1);}
Noximilien 29:579e00b7f118 311 else if (high_frequency_music_counter == 6){gamepad.tone(230,0.2);}
Noximilien 29:579e00b7f118 312 else if (high_frequency_music_counter == 9){gamepad.tone(250,0.1);}
Noximilien 29:579e00b7f118 313 else if ( high_frequency_music_counter == 12){gamepad.tone(250,0.2);}
Noximilien 29:579e00b7f118 314 else if ( high_frequency_music_counter == 14){gamepad.tone(220,0.1);}
Noximilien 29:579e00b7f118 315 else if ( high_frequency_music_counter == 16){gamepad.tone(210,0.3);}
Noximilien 29:579e00b7f118 316 else if ( high_frequency_music_counter == 19){gamepad.tone(200,1);}
Noximilien 29:579e00b7f118 317 else if ( high_frequency_music_counter == 21){gamepad.tone(250,1);}
Noximilien 29:579e00b7f118 318 else if ( high_frequency_music_counter == 22){
Noximilien 29:579e00b7f118 319 gamepad.tone(200,1);
Noximilien 29:579e00b7f118 320 high_frequency_music_counter = 0;
Noximilien 29:579e00b7f118 321 }
Noximilien 29:579e00b7f118 322 }
Noximilien 29:579e00b7f118 323
Noximilien 29:579e00b7f118 324 void Game::printMusicCountersTest(){
Noximilien 29:579e00b7f118 325 printf("Low frequency counter value:: %i\n", low_frequency_music_counter);
Noximilien 29:579e00b7f118 326 printf("high frequency counter value:: %i\n", high_frequency_music_counter);
Noximilien 26:676874c42883 327 }