ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Tue May 07 17:21:00 2019 +0000
Revision:
29:bdc4138b5171
Parent:
28:be77ad6c0bda
Final Submission. I have read and agreed with the Statement of Academic Integrity.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lewisgw 5:eda40cdde3e7 1 #include "Engine.h"
lewisgw 5:eda40cdde3e7 2
lewisgw 23:ff9073e12106 3 // Reference for the technique used to generate random numbers.
lewisgw 26:4253656c0755 4 // [1] "rand" cplusplus. [Online] Available:
lewisgw 26:4253656c0755 5 // http://www.cplusplus.com/reference/cstdlib/rand/ [Accessed: 22 April 2019].
lewisgw 23:ff9073e12106 6
lewisgw 21:20478f086bc2 7 // Buffer to print updated score.
lewisgw 21:20478f086bc2 8 char buffer[14];
lewisgw 15:876c047a6ec9 9
lewisgw 21:20478f086bc2 10 // Constructor and destructor.
lewisgw 9:fff2009f826e 11 Engine::Engine() {}
lewisgw 5:eda40cdde3e7 12
lewisgw 9:fff2009f826e 13 Engine::~Engine() {}
lewisgw 5:eda40cdde3e7 14
lewisgw 15:876c047a6ec9 15 void Engine::init() {
lewisgw 29:bdc4138b5171 16 // Reset functions are used for init.
lewisgw 15:876c047a6ec9 17 reset_skater();
lewisgw 17:f377df4ea7b1 18 reset_engine();
lewisgw 23:ff9073e12106 19 srand(time(NULL)); // Set up for generating random numbers, [1].
lewisgw 15:876c047a6ec9 20 }
lewisgw 15:876c047a6ec9 21
lewisgw 20:a8cad4e044ea 22 void Engine::check_reset(N5110 &lcd, Gamepad &gamepad) {
lewisgw 21:20478f086bc2 23 // If reset flag is true, end and restart the game.
lewisgw 9:fff2009f826e 24 if (_skater.get_reset_flag()) {
lewisgw 26:4253656c0755 25 gamepad.leds_on();
lewisgw 21:20478f086bc2 26 execute_dying_sequence(lcd, gamepad);
lewisgw 26:4253656c0755 27 wait(1); // Short pause.
lewisgw 20:a8cad4e044ea 28 reset_skater();
lewisgw 20:a8cad4e044ea 29 reset_engine();
lewisgw 9:fff2009f826e 30 }
lewisgw 9:fff2009f826e 31 }
lewisgw 9:fff2009f826e 32
lewisgw 21:20478f086bc2 33 void Engine::execute_dying_sequence(N5110 &lcd, Gamepad &gamepad) {
lewisgw 29:bdc4138b5171 34 // Player has died and game needs to restart, printing their score.
lewisgw 26:4253656c0755 35 wait(1); // Short pause.
lewisgw 26:4253656c0755 36 gamepad.leds_off();
lewisgw 21:20478f086bc2 37 lcd.clear();
lewisgw 21:20478f086bc2 38 for (int i = 0; i < 40; i = i + 8) { // Counter for y direction, sweeps top
lewisgw 21:20478f086bc2 39 // to bottom.
lewisgw 23:ff9073e12106 40 for (int j = 0; j < 84; j++) { // Counter for x direction, sweeps L to R.
lewisgw 21:20478f086bc2 41 lcd.setPixel(j,i,true);
lewisgw 21:20478f086bc2 42 lcd.setPixel(i,j,true);
lewisgw 21:20478f086bc2 43 lcd.printString("TRY AGAIN",30,5);
lewisgw 21:20478f086bc2 44 lcd.refresh();
lewisgw 27:c920c5ec31af 45 gamepad.tone(int(1099 - 15.4*j - 1.2*i), 0.05); // Frequency of tone is
lewisgw 26:4253656c0755 46 // dependent on counters.
lewisgw 26:4253656c0755 47 wait(0.001); // Control speed of the sequence.
lewisgw 21:20478f086bc2 48 sprintf(buffer,"%2d",_player_score);
lewisgw 21:20478f086bc2 49 lcd.printString(buffer,0,5);
lewisgw 21:20478f086bc2 50 }
lewisgw 21:20478f086bc2 51 }
lewisgw 21:20478f086bc2 52 }
lewisgw 21:20478f086bc2 53
lewisgw 9:fff2009f826e 54 void Engine::reset_skater() {
lewisgw 29:bdc4138b5171 55 // Initial values for skater.
lewisgw 18:304700b5d8f8 56 _skater_direction = Left;
lewisgw 23:ff9073e12106 57 _start_platform_flag = true; // For printing start text in EngineController.
lewisgw 17:f377df4ea7b1 58 _skater.set_reset_flag(false);
lewisgw 19:f35887b14c23 59 _moving_counter = 0;
lewisgw 26:4253656c0755 60 _jump_counter = 20; // Start game falling onto the platform.
lewisgw 19:f35887b14c23 61 _fall_flag = false;
lewisgw 17:f377df4ea7b1 62 }
lewisgw 17:f377df4ea7b1 63
lewisgw 17:f377df4ea7b1 64 void Engine::reset_engine() {
lewisgw 29:bdc4138b5171 65 // Inital values for engine (and gamepad input).
lewisgw 17:f377df4ea7b1 66 _input.coord.x = 0;
lewisgw 17:f377df4ea7b1 67 _input.coord.y = 0;
lewisgw 17:f377df4ea7b1 68 _input.A_flag = false;
lewisgw 21:20478f086bc2 69 _lower_platforms.init(40); // 40 is the platform y coord.
lewisgw 21:20478f086bc2 70 _upper_platforms.init(22); // 22 is the platform y coord.
lewisgw 17:f377df4ea7b1 71 _coin.init();
lewisgw 18:304700b5d8f8 72 _fire.init();
lewisgw 17:f377df4ea7b1 73 _coin_collision_flag = false;
lewisgw 17:f377df4ea7b1 74 _player_score = 0;
lewisgw 26:4253656c0755 75 _fire_height = 0;
lewisgw 9:fff2009f826e 76 }
lewisgw 8:5327418f823a 77
lewisgw 5:eda40cdde3e7 78 void Engine::read_input(Gamepad &gamepad) {
lewisgw 29:bdc4138b5171 79 // Set up the input struct for use.
lewisgw 9:fff2009f826e 80 _input.coord = gamepad.get_mapped_coord();
lewisgw 9:fff2009f826e 81 _input.A_flag = gamepad.check_event(Gamepad::A_PRESSED);
lewisgw 9:fff2009f826e 82 }
lewisgw 5:eda40cdde3e7 83
lewisgw 20:a8cad4e044ea 84 void Engine::process_y(Gamepad &gamepad) {
lewisgw 21:20478f086bc2 85 // Sets the y coord by first checking if the skater should be falling.
lewisgw 26:4253656c0755 86 set_fall_flag(); // Update the fall flag dependent on skater position.
lewisgw 9:fff2009f826e 87 if (_fall_flag) {
lewisgw 29:bdc4138b5171 88 _skater.fall(_fall_flag, gamepad); // Fall if the skater should be.
lewisgw 9:fff2009f826e 89 } else {
lewisgw 28:be77ad6c0bda 90 _skater.set_y_position(_input.A_flag, _jump_counter, _level_condition,
lewisgw 21:20478f086bc2 91 gamepad);
lewisgw 9:fff2009f826e 92 }
lewisgw 21:20478f086bc2 93 _fall_flag = _skater.get_fall_flag(); // Update fall flag.
lewisgw 18:304700b5d8f8 94 _skater_y = _skater.get_y_position();
lewisgw 21:20478f086bc2 95 _jump_counter = _skater.get_jump_counter(); // Update jump counter.
lewisgw 9:fff2009f826e 96 }
lewisgw 14:9861fe85c803 97
lewisgw 9:fff2009f826e 98 void Engine::set_fall_flag() {
lewisgw 21:20478f086bc2 99 // Set the fall flag to true if the skater is not on one of the lower
lewisgw 26:4253656c0755 100 // platforms. The start platform condition has been offset by 6 to account for
lewisgw 26:4253656c0755 101 // skater sprite size.
lewisgw 26:4253656c0755 102 // If the skater is between platform 1 and 2, and on the lower level.
lewisgw 21:20478f086bc2 103 if (((_lower_line_1.x_end < _skater_x)
lewisgw 21:20478f086bc2 104 && (_skater_x < (_lower_line_2.x_start - 6)))
lewisgw 26:4253656c0755 105 && _skater_y == 23) {
lewisgw 9:fff2009f826e 106 _fall_flag = true;
lewisgw 26:4253656c0755 107 // If the skater is between platforms 2 and 3, and on the lower level.
lewisgw 21:20478f086bc2 108 } else if (((_lower_line_2.x_end < _skater_x)
lewisgw 21:20478f086bc2 109 && (_skater_x < (_lower_line_3.x_start - 6)))
lewisgw 21:20478f086bc2 110 && _skater_y == 23) {
lewisgw 9:fff2009f826e 111 _fall_flag = true;
lewisgw 26:4253656c0755 112 // If the skater is between platforms 3 and 1, and on the lower level.
lewisgw 21:20478f086bc2 113 } else if (((_lower_line_3.x_end < _skater_x)
lewisgw 21:20478f086bc2 114 && (_skater_x < (_lower_line_1.x_start - 6)))
lewisgw 21:20478f086bc2 115 && _skater_y == 23) {
lewisgw 9:fff2009f826e 116 _fall_flag = true;
lewisgw 9:fff2009f826e 117 }
lewisgw 9:fff2009f826e 118 }
lewisgw 5:eda40cdde3e7 119
lewisgw 17:f377df4ea7b1 120 void Engine::process_x(int game_counter) {
lewisgw 29:bdc4138b5171 121 // Sets the x coord from input.
lewisgw 17:f377df4ea7b1 122 _skater.set_x_position_and_sprite(_input.coord.x,
lewisgw 17:f377df4ea7b1 123 _moving_counter,
lewisgw 18:304700b5d8f8 124 _skater_direction,
lewisgw 17:f377df4ea7b1 125 _input.coord.y);
lewisgw 18:304700b5d8f8 126 _skater_x = _skater.get_x_position();
lewisgw 21:20478f086bc2 127 _moving_counter = _skater.get_moving_counter(); // Update moving counter.
lewisgw 26:4253656c0755 128 _speed_divider = int(-0.05*_player_score + 4); // Speed divider is calculated
lewisgw 26:4253656c0755 129 // from player score.
lewisgw 26:4253656c0755 130 // Move the skater along with platforms at rate determined by speed divider if
lewisgw 26:4253656c0755 131 // the skater is not moving left.
lewisgw 21:20478f086bc2 132 if ((game_counter % _speed_divider == 0) && (_input.coord.x > -0.1)) {
lewisgw 17:f377df4ea7b1 133 _moving_counter--;
lewisgw 9:fff2009f826e 134 }
lewisgw 9:fff2009f826e 135 }
lewisgw 5:eda40cdde3e7 136
lewisgw 5:eda40cdde3e7 137 void Engine::process_sprite() {
lewisgw 14:9861fe85c803 138 // Update the sprite and direction.
lewisgw 18:304700b5d8f8 139 _skater_sprite = _skater.get_sprite_value();
lewisgw 18:304700b5d8f8 140 _skater_direction = _skater.get_direction();
lewisgw 9:fff2009f826e 141 }
lewisgw 5:eda40cdde3e7 142
lewisgw 5:eda40cdde3e7 143
lewisgw 10:8bf3713d9e9c 144 void Engine::set_level_condition() {
lewisgw 14:9861fe85c803 145 // If the skater is under or on top of any of the upper platforms, set
lewisgw 26:4253656c0755 146 // level condition to 1.
lewisgw 26:4253656c0755 147 // Offset of 6 is to account for sprite size.
lewisgw 26:4253656c0755 148 // If the skater is between start and end of upper platform 1.
lewisgw 21:20478f086bc2 149 if (((_upper_line_1.x_start - 6) <= _skater_x)
lewisgw 21:20478f086bc2 150 && (_skater_x <= _upper_line_1.x_end)) {
lewisgw 10:8bf3713d9e9c 151 _level_condition = 1;
lewisgw 26:4253656c0755 152 // If the skater is between start and end of upper platform 2.
lewisgw 21:20478f086bc2 153 } else if (((_upper_line_2.x_start - 6) <= _skater_x)
lewisgw 21:20478f086bc2 154 && (_skater_x <= _upper_line_2.x_end)) {
lewisgw 10:8bf3713d9e9c 155 _level_condition = 1;
lewisgw 26:4253656c0755 156 // If the skater is between start and end of upper platform 3.
lewisgw 21:20478f086bc2 157 } else if (((_upper_line_3.x_start - 6) <= _skater_x)
lewisgw 21:20478f086bc2 158 && (_skater_x <= _upper_line_3.x_end)) {
lewisgw 10:8bf3713d9e9c 159 _level_condition = 1;
lewisgw 9:fff2009f826e 160 } else {
lewisgw 10:8bf3713d9e9c 161 _level_condition = 0;
lewisgw 10:8bf3713d9e9c 162 }
lewisgw 9:fff2009f826e 163 }
lewisgw 7:bbc2b75c1418 164
lewisgw 17:f377df4ea7b1 165 void Engine::generate_level(int game_counter) {
lewisgw 26:4253656c0755 166 // Generate properties for the level.
lewisgw 10:8bf3713d9e9c 167 generate_lower_lines();
lewisgw 10:8bf3713d9e9c 168 generate_upper_lines();
lewisgw 15:876c047a6ec9 169 _coin.generate_coin();
lewisgw 18:304700b5d8f8 170 generate_fire(game_counter);
lewisgw 9:fff2009f826e 171 }
lewisgw 5:eda40cdde3e7 172
lewisgw 26:4253656c0755 173 void Engine::draw_screen_fire(int game_counter, N5110 &lcd) {
lewisgw 26:4253656c0755 174 // Prints the dynamic fire at the bottom of the screen.
lewisgw 26:4253656c0755 175 // Restricts the max fire height multiplier, which is dependent on player
lewisgw 27:c920c5ec31af 176 // score. Fire will start when score = 3.
lewisgw 26:4253656c0755 177 if (_player_score < 15) {
lewisgw 26:4253656c0755 178 _fire_height = _player_score;
lewisgw 26:4253656c0755 179 } else {
lewisgw 26:4253656c0755 180 _fire_height = 14;
lewisgw 26:4253656c0755 181 }
lewisgw 26:4253656c0755 182 // i corresponds to horizontal positions of pixels.
lewisgw 26:4253656c0755 183 for (int i = 1; i < 84; i++) {
lewisgw 26:4253656c0755 184 if (i % 4 == 0) {
lewisgw 26:4253656c0755 185 // j corresponds to vertical height of pixels, and the max height is
lewisgw 26:4253656c0755 186 // dependent on game counter (0 to 99) so changes every loop, and is
lewisgw 26:4253656c0755 187 // scaled.
lewisgw 26:4253656c0755 188 for (int j = 0; j < game_counter*0.01*_fire_height; j++) {
lewisgw 26:4253656c0755 189 lcd.setPixel(i + (rand() % 8 + 1) ,50 - j*1.3,true); // Horizontal
lewisgw 26:4253656c0755 190 // position of pixel is constrained random [1], multiplier on j varies
lewisgw 26:4253656c0755 191 // local height.
lewisgw 26:4253656c0755 192 lcd.setPixel(i - (rand() % 8 + 1) ,50 - j*1.2,true); // [1].
lewisgw 26:4253656c0755 193 lcd.setPixel(i - (rand() % 8 + 1) ,50 - j*1.6,true); // [1].
lewisgw 26:4253656c0755 194 lcd.setPixel(i + (rand() % 8 + 1) ,50 - j*1.1,true); // [1].
lewisgw 26:4253656c0755 195 lcd.setPixel(i - (rand() % 8 + 1) ,50 - j*1.4,true); // [1].
lewisgw 26:4253656c0755 196 }
lewisgw 26:4253656c0755 197 }
lewisgw 26:4253656c0755 198 }
lewisgw 26:4253656c0755 199 }
lewisgw 26:4253656c0755 200
lewisgw 10:8bf3713d9e9c 201 void Engine::generate_lower_lines() {
lewisgw 14:9861fe85c803 202 // Use a scaled random number to generate the length of the lower lines.
lewisgw 26:4253656c0755 203 _length_1 = (rand() %20) + 10; // [1].
lewisgw 21:20478f086bc2 204 _lower_platforms.set_line_1(_length_1);
lewisgw 18:304700b5d8f8 205 _lower_line_1 = _lower_platforms.get_line_1();
lewisgw 26:4253656c0755 206 _length_2 = (rand() %20) + 10; // [1].
lewisgw 21:20478f086bc2 207 _lower_platforms.set_line_2(_length_2);
lewisgw 18:304700b5d8f8 208 _lower_line_2 = _lower_platforms.get_line_2();
lewisgw 26:4253656c0755 209 _length_3 = (rand() %20) + 10; // [1].
lewisgw 21:20478f086bc2 210 _lower_platforms.set_line_3(_length_3);
lewisgw 18:304700b5d8f8 211 _lower_line_3 = _lower_platforms.get_line_3();
lewisgw 10:8bf3713d9e9c 212 }
lewisgw 10:8bf3713d9e9c 213
lewisgw 10:8bf3713d9e9c 214 void Engine::generate_upper_lines() {
lewisgw 21:20478f086bc2 215 // Set the length of the upper lines to be proportionally smaller to
lewisgw 21:20478f086bc2 216 // the length of the lower lines.
lewisgw 21:20478f086bc2 217 _upper_platforms.set_line_1(_length_1 / 2);
lewisgw 18:304700b5d8f8 218 _upper_line_1 = _upper_platforms.get_line_1();
lewisgw 21:20478f086bc2 219 _upper_platforms.set_line_2(_length_2 / 2);
lewisgw 18:304700b5d8f8 220 _upper_line_2 = _upper_platforms.get_line_2();
lewisgw 21:20478f086bc2 221 _upper_platforms.set_line_3(_length_3 / 2);
lewisgw 18:304700b5d8f8 222 _upper_line_3 = _upper_platforms.get_line_3();
lewisgw 10:8bf3713d9e9c 223 }
lewisgw 5:eda40cdde3e7 224
lewisgw 18:304700b5d8f8 225 void Engine::generate_fire(int game_counter) {
lewisgw 21:20478f086bc2 226 // Generates the x and y coordinate of the fire. Y oscillates from 5 to 23.
lewisgw 21:20478f086bc2 227 _fire.generate_fire(); // Generates X coord of fire.
lewisgw 26:4253656c0755 228 // Y is calculated from parabolic relation to game counter.
lewisgw 21:20478f086bc2 229 _fire_y = int(-0.0073*game_counter*game_counter + 0.73*game_counter + 5);
lewisgw 16:331be5c7ed80 230 }
lewisgw 16:331be5c7ed80 231
lewisgw 26:4253656c0755 232 void Engine::update_lcd(N5110 &lcd, int game_counter){
lewisgw 26:4253656c0755 233 // Draw all sprites, screen fire, platforms and player score.
lewisgw 21:20478f086bc2 234 lcd.drawSprite(_skater_x,_skater_y,17,10,
lewisgw 21:20478f086bc2 235 (int *)_skater.get_sprite(_skater_sprite));
lewisgw 21:20478f086bc2 236 lcd.drawSprite(_coin.get_coin_x(),_coin.get_coin_y(),5,5,
lewisgw 21:20478f086bc2 237 (int*)_coin.get_coin_sprite());
lewisgw 18:304700b5d8f8 238 lcd.drawSprite(_fire.get_fire_x(),_fire_y,5,8,(int*)_fire.get_fire_sprite());
lewisgw 21:20478f086bc2 239 lcd.drawLine(_lower_line_2.x_start,_lower_line_2.y,_lower_line_2.x_end,
lewisgw 21:20478f086bc2 240 _lower_line_2.y,FILL_BLACK);
lewisgw 21:20478f086bc2 241 lcd.drawLine(_lower_line_1.x_start,_lower_line_1.y,_lower_line_1.x_end,
lewisgw 21:20478f086bc2 242 _lower_line_1.y,FILL_BLACK);
lewisgw 21:20478f086bc2 243 lcd.drawLine(_lower_line_3.x_start,_lower_line_3.y,_lower_line_3.x_end,
lewisgw 21:20478f086bc2 244 _lower_line_3.y,FILL_BLACK);
lewisgw 21:20478f086bc2 245 lcd.drawLine(_upper_line_2.x_start,_upper_line_2.y,_upper_line_2.x_end,
lewisgw 21:20478f086bc2 246 _upper_line_2.y,FILL_BLACK);
lewisgw 21:20478f086bc2 247 lcd.drawLine(_upper_line_1.x_start,_upper_line_1.y,_upper_line_1.x_end,
lewisgw 21:20478f086bc2 248 _upper_line_1.y,FILL_BLACK);
lewisgw 21:20478f086bc2 249 lcd.drawLine(_upper_line_3.x_start,_upper_line_3.y,_upper_line_3.x_end,
lewisgw 21:20478f086bc2 250 _upper_line_3.y,FILL_BLACK);
lewisgw 29:bdc4138b5171 251 // Print the score.
lewisgw 15:876c047a6ec9 252 sprintf(buffer,"%2d",_player_score);
lewisgw 15:876c047a6ec9 253 lcd.printString(buffer,0,0);
lewisgw 26:4253656c0755 254 draw_screen_fire(game_counter, lcd);
lewisgw 11:b66170249a26 255 }
lewisgw 11:b66170249a26 256
lewisgw 21:20478f086bc2 257 bool Engine::get_start_platform_flag() {
lewisgw 26:4253656c0755 258 if (_input.A_flag) _start_platform_flag = false; // Makes starting platform
lewisgw 26:4253656c0755 259 // vanish after first jump of the game.
lewisgw 21:20478f086bc2 260 return _start_platform_flag;
lewisgw 15:876c047a6ec9 261 }
lewisgw 15:876c047a6ec9 262
lewisgw 20:a8cad4e044ea 263 void Engine::check_coin_collision(Gamepad &gamepad) {
lewisgw 26:4253656c0755 264 // If skater x and y coord matches the coin's. Small adjustment for Y coord
lewisgw 26:4253656c0755 265 // compensates for skater sprite size.
lewisgw 21:20478f086bc2 266 if (_skater_x == _coin.get_coin_x()
lewisgw 26:4253656c0755 267 && (_skater_y == _coin.get_coin_y() - 10)) {
lewisgw 15:876c047a6ec9 268 _coin_collision_flag = true;
lewisgw 15:876c047a6ec9 269 _player_score++;
lewisgw 21:20478f086bc2 270 _coin.set_coin((rand() % 100),(abs(rand() % 100 - 20))); // Place coin
lewisgw 23:ff9073e12106 271 // on a constrained random position, [1].
lewisgw 26:4253656c0755 272 gamepad.tone(1500, 0.05); // Make collection noise on buzzer.
lewisgw 20:a8cad4e044ea 273 wait(0.05);
lewisgw 20:a8cad4e044ea 274 gamepad.tone(3000, 0.05);
lewisgw 15:876c047a6ec9 275 }
lewisgw 16:331be5c7ed80 276 }
lewisgw 16:331be5c7ed80 277
lewisgw 26:4253656c0755 278 void Engine::check_fire_collision(Gamepad &gamepad, int game_counter) {
lewisgw 26:4253656c0755 279 // If skater is not ducking, has same x coord and within a range of y coord
lewisgw 26:4253656c0755 280 // as fire.
lewisgw 21:20478f086bc2 281 if (_input.coord.y > -0.1
lewisgw 21:20478f086bc2 282 && _skater_x == _fire.get_fire_x()
lewisgw 21:20478f086bc2 283 && _skater_y > _fire_y - 10
lewisgw 26:4253656c0755 284 && _skater_y < _fire_y + 10
lewisgw 26:4253656c0755 285 ) { // A range of Y coords to make collision
lewisgw 26:4253656c0755 286 // more frequent.
lewisgw 17:f377df4ea7b1 287 _skater.set_reset_flag(true);
lewisgw 26:4253656c0755 288 gamepad.tone(400, 0.25); // Make collision noise on buzzer.
lewisgw 20:a8cad4e044ea 289 wait(0.05);
lewisgw 20:a8cad4e044ea 290 gamepad.tone(200, 0.25);
lewisgw 21:20478f086bc2 291 } else if ( _skater_x < -10 || _skater_x > 84 ) { // If skater goes off the
lewisgw 21:20478f086bc2 292 // screen.
lewisgw 16:331be5c7ed80 293 _skater.set_reset_flag(true);
lewisgw 20:a8cad4e044ea 294 gamepad.tone(200, 0.5);
lewisgw 16:331be5c7ed80 295 }
lewisgw 26:4253656c0755 296 // If the skater collides with the scaled peak of the background fire.
lewisgw 26:4253656c0755 297 if (_skater_y > (50 - game_counter*_fire_height*0.023)) {
lewisgw 26:4253656c0755 298 _fall_flag = true;
lewisgw 26:4253656c0755 299 wait(0.05); // Slow down falling sequence.
lewisgw 26:4253656c0755 300 }
lewisgw 16:331be5c7ed80 301 }
lewisgw 17:f377df4ea7b1 302
lewisgw 17:f377df4ea7b1 303 int Engine::get_player_score() {
lewisgw 17:f377df4ea7b1 304 return _player_score;
lewisgw 17:f377df4ea7b1 305 }
lewisgw 16:331be5c7ed80 306