Initial publish
Dependencies: mbed
Fork of el17dg by
game/game.cpp@29:579e00b7f118, 2019-04-15 (annotated)
- 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?
User | Revision | Line number | New 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 | } |