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.
Game/Game.cpp@10:58cf89dd878c, 2019-05-06 (annotated)
- Committer:
- joshdavy
- Date:
- Mon May 06 10:11:42 2019 +0000
- Revision:
- 10:58cf89dd878c
- Parent:
- 9:96969b1c6bde
- Child:
- 11:db27d3838514
Main game done. Documentation to be done next.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
joshdavy | 1:37802772843e | 1 | #include "Game.h" |
joshdavy | 8:21b6d4dbce44 | 2 | |
joshdavy | 10:58cf89dd878c | 3 | /** Game Class |
joshdavy | 10:58cf89dd878c | 4 | |
joshdavy | 10:58cf89dd878c | 5 | @brief Class for the main game. Responsible for level loading, updating and |
joshdavy | 10:58cf89dd878c | 6 | drawing the game screen. |
joshdavy | 10:58cf89dd878c | 7 | |
joshdavy | 10:58cf89dd878c | 8 | @version 1.0 |
joshdavy | 10:58cf89dd878c | 9 | |
joshdavy | 10:58cf89dd878c | 10 | |
joshdavy | 10:58cf89dd878c | 11 | // constructor |
joshdavy | 1:37802772843e | 12 | Game::Game() |
joshdavy | 1:37802772843e | 13 | { |
joshdavy | 1:37802772843e | 14 | |
joshdavy | 10:58cf89dd878c | 15 | } |
joshdavy | 10:58cf89dd878c | 16 | //deconstructor |
joshdavy | 10:58cf89dd878c | 17 | Game::~Game() |
joshdavy | 10:58cf89dd878c | 18 | { |
joshdavy | 10:58cf89dd878c | 19 | |
joshdavy | 10:58cf89dd878c | 20 | } |
joshdavy | 7:68e06dda79f7 | 21 | |
joshdavy | 1:37802772843e | 22 | |
joshdavy | 1:37802772843e | 23 | |
joshdavy | 9:96969b1c6bde | 24 | void Game::load_level(int level_number) |
joshdavy | 9:96969b1c6bde | 25 | { |
joshdavy | 10:58cf89dd878c | 26 | // I would of done this large switch statement with a an array |
joshdavy | 10:58cf89dd878c | 27 | // of LevelDefiniton as it would be a lot neater. However this causes |
joshdavy | 10:58cf89dd878c | 28 | // issue with the infamous "empty execution error" bug |
joshdavy | 9:96969b1c6bde | 29 | LevelDefinition level_def; |
joshdavy | 9:96969b1c6bde | 30 | switch(level_number) { |
joshdavy | 9:96969b1c6bde | 31 | case 1 : |
joshdavy | 9:96969b1c6bde | 32 | level_def = level_1; |
joshdavy | 9:96969b1c6bde | 33 | break; |
joshdavy | 9:96969b1c6bde | 34 | case 2: |
joshdavy | 9:96969b1c6bde | 35 | level_def = level_2; |
joshdavy | 9:96969b1c6bde | 36 | break; |
joshdavy | 9:96969b1c6bde | 37 | case 3: |
joshdavy | 9:96969b1c6bde | 38 | level_def = level_3; |
joshdavy | 9:96969b1c6bde | 39 | break; |
joshdavy | 9:96969b1c6bde | 40 | case 4: |
joshdavy | 9:96969b1c6bde | 41 | level_def = level_4; |
joshdavy | 9:96969b1c6bde | 42 | break; |
joshdavy | 9:96969b1c6bde | 43 | case 5: |
joshdavy | 9:96969b1c6bde | 44 | level_def = level_5; |
joshdavy | 9:96969b1c6bde | 45 | break; |
joshdavy | 9:96969b1c6bde | 46 | case 6: |
joshdavy | 9:96969b1c6bde | 47 | level_def = level_6; |
joshdavy | 9:96969b1c6bde | 48 | break; |
joshdavy | 9:96969b1c6bde | 49 | case 7: |
joshdavy | 9:96969b1c6bde | 50 | level_def = level_7; |
joshdavy | 9:96969b1c6bde | 51 | break; |
joshdavy | 9:96969b1c6bde | 52 | case 8: |
joshdavy | 10:58cf89dd878c | 53 | level_def = level_8; |
joshdavy | 10:58cf89dd878c | 54 | break; |
joshdavy | 10:58cf89dd878c | 55 | case 9: |
joshdavy | 10:58cf89dd878c | 56 | // Then the game is complete |
joshdavy | 9:96969b1c6bde | 57 | _game_won = true; |
joshdavy | 9:96969b1c6bde | 58 | return; |
joshdavy | 9:96969b1c6bde | 59 | |
joshdavy | 9:96969b1c6bde | 60 | |
joshdavy | 9:96969b1c6bde | 61 | } |
joshdavy | 9:96969b1c6bde | 62 | |
joshdavy | 10:58cf89dd878c | 63 | // Initialises the player position |
joshdavy | 10:58cf89dd878c | 64 | _player.init(level_def.initial_pos); |
joshdavy | 10:58cf89dd878c | 65 | // Initalises level |
joshdavy | 9:96969b1c6bde | 66 | _level.init(level_def.blocks, |
joshdavy | 9:96969b1c6bde | 67 | level_def.number_of_blocks, |
joshdavy | 9:96969b1c6bde | 68 | level_def.goal); |
joshdavy | 9:96969b1c6bde | 69 | |
joshdavy | 9:96969b1c6bde | 70 | |
joshdavy | 9:96969b1c6bde | 71 | for (int i = 0; i < level_def.number_of_moving_blocks; i++) { |
joshdavy | 9:96969b1c6bde | 72 | MovingBlockDefinition x = level_def.moving_blocks[i]; |
joshdavy | 9:96969b1c6bde | 73 | _level.declare_moving_block(x.index,x.extending,x.distance); |
joshdavy | 9:96969b1c6bde | 74 | } |
joshdavy | 9:96969b1c6bde | 75 | |
joshdavy | 9:96969b1c6bde | 76 | } |
joshdavy | 9:96969b1c6bde | 77 | |
joshdavy | 7:68e06dda79f7 | 78 | void Game::init() |
joshdavy | 7:68e06dda79f7 | 79 | { |
joshdavy | 10:58cf89dd878c | 80 | // Loads the first level |
joshdavy | 9:96969b1c6bde | 81 | load_level(1); |
joshdavy | 9:96969b1c6bde | 82 | _current_level = 1; |
joshdavy | 10:58cf89dd878c | 83 | |
joshdavy | 9:96969b1c6bde | 84 | _game_won = false; |
joshdavy | 7:68e06dda79f7 | 85 | } |
joshdavy | 1:37802772843e | 86 | |
joshdavy | 1:37802772843e | 87 | |
joshdavy | 1:37802772843e | 88 | |
joshdavy | 1:37802772843e | 89 | void Game::update(Gamepad &pad) |
joshdavy | 1:37802772843e | 90 | { |
joshdavy | 10:58cf89dd878c | 91 | // Update player position based on gamepad presses/ collisions |
joshdavy | 9:96969b1c6bde | 92 | _player.update(pad, _level.get_blocks(),_level.get_number_of_blocks()); |
joshdavy | 10:58cf89dd878c | 93 | // Update location of any moving blocks |
joshdavy | 9:96969b1c6bde | 94 | _level.update_moving_blocks(); |
joshdavy | 10:58cf89dd878c | 95 | |
joshdavy | 10:58cf89dd878c | 96 | // If the player has reached the goal |
joshdavy | 9:96969b1c6bde | 97 | if (_player.check_goal_reached(_level.get_goal())) { |
joshdavy | 10:58cf89dd878c | 98 | // Load next level |
joshdavy | 9:96969b1c6bde | 99 | _current_level += 1; |
joshdavy | 9:96969b1c6bde | 100 | load_level(_current_level); |
joshdavy | 9:96969b1c6bde | 101 | } |
joshdavy | 1:37802772843e | 102 | } |
joshdavy | 1:37802772843e | 103 | |
joshdavy | 9:96969b1c6bde | 104 | |
joshdavy | 2:b62e8be35a5d | 105 | void Game::draw(N5110 &lcd) |
joshdavy | 1:37802772843e | 106 | { |
joshdavy | 10:58cf89dd878c | 107 | // Clear screen buffer |
joshdavy | 2:b62e8be35a5d | 108 | lcd.clear(); |
joshdavy | 10:58cf89dd878c | 109 | |
joshdavy | 10:58cf89dd878c | 110 | // Render Level And Player |
joshdavy | 8:21b6d4dbce44 | 111 | _level.render(lcd); |
joshdavy | 1:37802772843e | 112 | _player.render(lcd); |
joshdavy | 10:58cf89dd878c | 113 | |
joshdavy | 10:58cf89dd878c | 114 | // refresh screen |
joshdavy | 2:b62e8be35a5d | 115 | lcd.refresh(); |
joshdavy | 2:b62e8be35a5d | 116 | |
joshdavy | 1:37802772843e | 117 | } |
joshdavy | 1:37802772843e | 118 | |
joshdavy | 9:96969b1c6bde | 119 | |
joshdavy | 9:96969b1c6bde | 120 | bool Game::game_won() |
joshdavy | 9:96969b1c6bde | 121 | { |
joshdavy | 9:96969b1c6bde | 122 | return _game_won; |
joshdavy | 9:96969b1c6bde | 123 | } |