ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Fri May 03 09:33:34 2019 +0000
Revision:
26:4253656c0755
Parent:
23:ff9073e12106
Child:
27:c920c5ec31af
Now a dynamic fire at the bottom of the screen that gets higher as the player collects more coins. It will kill the skater if they collide.

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