Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
EngineController/EngineController.cpp@17:f377df4ea7b1, 2019-04-11 (annotated)
- Committer:
- lewisgw
- Date:
- Thu Apr 11 11:37:49 2019 +0000
- Revision:
- 17:f377df4ea7b1
- Parent:
- 16:331be5c7ed80
- Child:
- 18:304700b5d8f8
Ball of fire moves up and down the screen, platforms and ball move faster as you collect more coins to make the game more challenging.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lewisgw | 12:ebaefda53dd0 | 1 | #include "EngineController.h" |
lewisgw | 12:ebaefda53dd0 | 2 | |
lewisgw | 12:ebaefda53dd0 | 3 | int intro_text[12][42] = { |
lewisgw | 12:ebaefda53dd0 | 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,1,1,1,1 }, |
lewisgw | 12:ebaefda53dd0 | 5 | { 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,1,1,1,1 }, |
lewisgw | 12:ebaefda53dd0 | 6 | { 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,0,0,1,1 }, |
lewisgw | 12:ebaefda53dd0 | 7 | { 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,0,0,1,1 }, |
lewisgw | 12:ebaefda53dd0 | 8 | { 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,1,1,1,1 }, |
lewisgw | 12:ebaefda53dd0 | 9 | { 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,1,1,1,1 }, |
lewisgw | 12:ebaefda53dd0 | 10 | { 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,1,0,0,0 }, |
lewisgw | 12:ebaefda53dd0 | 11 | { 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,1,0,0,0 }, |
lewisgw | 12:ebaefda53dd0 | 12 | { 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,1,1,0,0 }, |
lewisgw | 12:ebaefda53dd0 | 13 | { 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,1,1,0,0 }, |
lewisgw | 12:ebaefda53dd0 | 14 | { 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,1,1,1,0 }, |
lewisgw | 12:ebaefda53dd0 | 15 | { 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,1,1,1,1 } |
lewisgw | 12:ebaefda53dd0 | 16 | }; |
lewisgw | 12:ebaefda53dd0 | 17 | |
lewisgw | 14:9861fe85c803 | 18 | // Constructor and destructor |
lewisgw | 12:ebaefda53dd0 | 19 | EngineController::EngineController() {} |
lewisgw | 12:ebaefda53dd0 | 20 | |
lewisgw | 12:ebaefda53dd0 | 21 | EngineController::~EngineController() {} |
lewisgw | 12:ebaefda53dd0 | 22 | |
lewisgw | 12:ebaefda53dd0 | 23 | void EngineController::init() { |
lewisgw | 14:9861fe85c803 | 24 | // Initialise the game engine, game counter and starting text flag. |
lewisgw | 12:ebaefda53dd0 | 25 | _game_engine.init(); |
lewisgw | 12:ebaefda53dd0 | 26 | _game_counter = 0; |
lewisgw | 17:f377df4ea7b1 | 27 | _speed_divider = 10; |
lewisgw | 12:ebaefda53dd0 | 28 | _start_platform = true; |
lewisgw | 17:f377df4ea7b1 | 29 | _change_speed_flag = false; |
lewisgw | 12:ebaefda53dd0 | 30 | } |
lewisgw | 12:ebaefda53dd0 | 31 | |
lewisgw | 12:ebaefda53dd0 | 32 | void EngineController::run_game_engine(N5110 &lcd, Gamepad &gamepad) { |
lewisgw | 14:9861fe85c803 | 33 | // The main game loop that first checks if the game has just started and runs |
lewisgw | 14:9861fe85c803 | 34 | // the game. |
lewisgw | 14:9861fe85c803 | 35 | check_for_start(lcd); |
lewisgw | 17:f377df4ea7b1 | 36 | if(_game_counter == 100) _game_counter = 0; |
lewisgw | 14:9861fe85c803 | 37 | update_game(lcd, gamepad); |
lewisgw | 17:f377df4ea7b1 | 38 | if (_game_counter % _speed_divider == 0) _game_engine.generate_level(_game_counter); |
lewisgw | 14:9861fe85c803 | 39 | _game_counter++; |
lewisgw | 17:f377df4ea7b1 | 40 | _player_score = _game_engine.get_player_score(); |
lewisgw | 17:f377df4ea7b1 | 41 | _speed_divider = int(-0.25*_player_score + 10); |
lewisgw | 14:9861fe85c803 | 42 | } |
lewisgw | 14:9861fe85c803 | 43 | |
lewisgw | 14:9861fe85c803 | 44 | void EngineController::check_for_start(N5110 &lcd) { |
lewisgw | 14:9861fe85c803 | 45 | // Print the intro text if the game has just started. |
lewisgw | 12:ebaefda53dd0 | 46 | if(_start_platform) print_intro_text(lcd); |
lewisgw | 17:f377df4ea7b1 | 47 | _game_engine.check_reset(lcd); |
lewisgw | 14:9861fe85c803 | 48 | _start_platform = _game_engine.get_start_platform(); |
lewisgw | 14:9861fe85c803 | 49 | } |
lewisgw | 14:9861fe85c803 | 50 | |
lewisgw | 14:9861fe85c803 | 51 | void EngineController::print_intro_text(N5110 &lcd) { |
lewisgw | 14:9861fe85c803 | 52 | lcd.drawLine(0,17,80,17,FILL_WHITE); |
lewisgw | 14:9861fe85c803 | 53 | lcd.drawSprite(40,4,12,42,(int *)intro_text); |
lewisgw | 14:9861fe85c803 | 54 | } |
lewisgw | 14:9861fe85c803 | 55 | |
lewisgw | 14:9861fe85c803 | 56 | void EngineController::update_game(N5110 &lcd, Gamepad &gamepad) { |
lewisgw | 14:9861fe85c803 | 57 | // Run the game engine. |
lewisgw | 12:ebaefda53dd0 | 58 | _game_engine.read_input(gamepad); |
lewisgw | 12:ebaefda53dd0 | 59 | _game_engine.set_level_condition(); |
lewisgw | 12:ebaefda53dd0 | 60 | _game_engine.process_y(); |
lewisgw | 12:ebaefda53dd0 | 61 | _game_engine.process_x(_game_counter); |
lewisgw | 12:ebaefda53dd0 | 62 | _game_engine.process_sprite(); |
lewisgw | 15:876c047a6ec9 | 63 | _game_engine.check_coin_collision(); |
lewisgw | 16:331be5c7ed80 | 64 | _game_engine.check_spikes_collision(); |
lewisgw | 12:ebaefda53dd0 | 65 | _game_engine.update_lcd(lcd); |
lewisgw | 12:ebaefda53dd0 | 66 | } |