Josh Davy / Mbed 2 deprecated Flip

Dependencies:   mbed el17jd

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?

UserRevisionLine numberNew 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 }