ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Fri May 03 09:33:34 2019 +0000
Revision:
26:4253656c0755
Parent:
21:20478f086bc2
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 12:ebaefda53dd0 1 #include "EngineController.h"
lewisgw 12:ebaefda53dd0 2
lewisgw 12:ebaefda53dd0 3 int intro_text[12][42] = {
lewisgw 21:20478f086bc2 4 { 1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
lewisgw 21:20478f086bc2 5 1,1,1,1 },
lewisgw 21:20478f086bc2 6 { 1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
lewisgw 21:20478f086bc2 7 1,1,1,1 },
lewisgw 21:20478f086bc2 8 { 1,1,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,
lewisgw 21:20478f086bc2 9 0,0,1,1 },
lewisgw 21:20478f086bc2 10 { 1,1,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,
lewisgw 21:20478f086bc2 11 0,0,1,1 },
lewisgw 21:20478f086bc2 12 { 1,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,1,
lewisgw 21:20478f086bc2 13 1,1,1,1 },
lewisgw 21:20478f086bc2 14 { 1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,
lewisgw 21:20478f086bc2 15 1,1,1,1 },
lewisgw 21:20478f086bc2 16 { 1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,
lewisgw 21:20478f086bc2 17 1,0,0,0 },
lewisgw 21:20478f086bc2 18 { 0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,1,
lewisgw 21:20478f086bc2 19 1,0,0,0 },
lewisgw 21:20478f086bc2 20 { 0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,
lewisgw 21:20478f086bc2 21 1,1,0,0 },
lewisgw 21:20478f086bc2 22 { 0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,
lewisgw 21:20478f086bc2 23 1,1,0,0 },
lewisgw 21:20478f086bc2 24 { 1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,
lewisgw 21:20478f086bc2 25 1,1,1,0 },
lewisgw 21:20478f086bc2 26 { 1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,
lewisgw 21:20478f086bc2 27 1,1,1,1 }
lewisgw 12:ebaefda53dd0 28 };
lewisgw 12:ebaefda53dd0 29
lewisgw 21:20478f086bc2 30 // Constructor and destructor.
lewisgw 12:ebaefda53dd0 31 EngineController::EngineController() {}
lewisgw 12:ebaefda53dd0 32
lewisgw 12:ebaefda53dd0 33 EngineController::~EngineController() {}
lewisgw 12:ebaefda53dd0 34
lewisgw 12:ebaefda53dd0 35 void EngineController::init() {
lewisgw 12:ebaefda53dd0 36 _game_engine.init();
lewisgw 12:ebaefda53dd0 37 _game_counter = 0;
lewisgw 17:f377df4ea7b1 38 _speed_divider = 10;
lewisgw 21:20478f086bc2 39 _start_platform_flag = true;
lewisgw 17:f377df4ea7b1 40 _change_speed_flag = false;
lewisgw 12:ebaefda53dd0 41 }
lewisgw 12:ebaefda53dd0 42
lewisgw 12:ebaefda53dd0 43 void EngineController::run_game_engine(N5110 &lcd, Gamepad &gamepad) {
lewisgw 21:20478f086bc2 44 // The main game loop.
lewisgw 21:20478f086bc2 45 check_for_start(lcd, gamepad); // Check to see if it should print starting
lewisgw 21:20478f086bc2 46 // text.
lewisgw 21:20478f086bc2 47 if (_game_counter == 100) _game_counter = 0;
lewisgw 14:9861fe85c803 48 update_game(lcd, gamepad);
lewisgw 21:20478f086bc2 49 if (_game_counter % _speed_divider == 0)
lewisgw 21:20478f086bc2 50 _game_engine.generate_level(_game_counter); // Level speed is determined by
lewisgw 21:20478f086bc2 51 // speed divider.
lewisgw 14:9861fe85c803 52 _game_counter++;
lewisgw 17:f377df4ea7b1 53 _player_score = _game_engine.get_player_score();
lewisgw 21:20478f086bc2 54 _speed_divider = int(-0.25*_player_score + 10); // Speed divider is dependent
lewisgw 21:20478f086bc2 55 // on how many coins you have
lewisgw 14:9861fe85c803 56 }
lewisgw 14:9861fe85c803 57
lewisgw 20:a8cad4e044ea 58 void EngineController::check_for_start(N5110 &lcd, Gamepad &gamepad) {
lewisgw 21:20478f086bc2 59 // Print the intro text if the game has just started or jump has not been
lewisgw 21:20478f086bc2 60 // pressed.
lewisgw 21:20478f086bc2 61 if (_start_platform_flag) print_intro_text(lcd);
lewisgw 21:20478f086bc2 62 _game_engine.check_reset(lcd, gamepad); // Resets the game if skater has
lewisgw 21:20478f086bc2 63 // died.
lewisgw 21:20478f086bc2 64 _start_platform_flag = _game_engine.get_start_platform_flag(); // Returns
lewisgw 21:20478f086bc2 65 // false when jump is pressed.
lewisgw 14:9861fe85c803 66 }
lewisgw 14:9861fe85c803 67
lewisgw 14:9861fe85c803 68 void EngineController::print_intro_text(N5110 &lcd) {
lewisgw 14:9861fe85c803 69 lcd.drawLine(0,17,80,17,FILL_WHITE);
lewisgw 14:9861fe85c803 70 lcd.drawSprite(40,4,12,42,(int *)intro_text);
lewisgw 14:9861fe85c803 71 }
lewisgw 14:9861fe85c803 72
lewisgw 14:9861fe85c803 73 void EngineController::update_game(N5110 &lcd, Gamepad &gamepad) {
lewisgw 14:9861fe85c803 74 // Run the game engine.
lewisgw 12:ebaefda53dd0 75 _game_engine.read_input(gamepad);
lewisgw 21:20478f086bc2 76 _game_engine.set_level_condition(); // Determines if the skater is under
lewisgw 21:20478f086bc2 77 // upper platforms.
lewisgw 20:a8cad4e044ea 78 _game_engine.process_y(gamepad);
lewisgw 12:ebaefda53dd0 79 _game_engine.process_x(_game_counter);
lewisgw 12:ebaefda53dd0 80 _game_engine.process_sprite();
lewisgw 20:a8cad4e044ea 81 _game_engine.check_coin_collision(gamepad);
lewisgw 26:4253656c0755 82 _game_engine.check_fire_collision(gamepad, _game_counter);
lewisgw 26:4253656c0755 83 _game_engine.update_lcd(lcd, _game_counter);
lewisgw 12:ebaefda53dd0 84 }
lewisgw 21:20478f086bc2 85