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
SpaceRebEngine/SpaceRebEngine.h@17:e749cac05270, 2019-05-09 (annotated)
- Committer:
- henririgby98
- Date:
- Thu May 09 12:38:51 2019 +0000
- Revision:
- 17:e749cac05270
- Parent:
- 7:e0cab3e73df9
- Child:
- 20:477d2ee5e461
space reb engine doxygen
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
henririgby98 | 4:d744920089ea | 1 | #ifndef SPACEREBENGINE_H |
henririgby98 | 4:d744920089ea | 2 | #define SPACEREBENGINE_H |
henririgby98 | 4:d744920089ea | 3 | |
henririgby98 | 4:d744920089ea | 4 | #include "mbed.h" |
henririgby98 | 4:d744920089ea | 5 | #include "N5110.h" |
henririgby98 | 4:d744920089ea | 6 | #include "Gamepad.h" |
henririgby98 | 5:0da65740cd5e | 7 | #include "SpaceInvader.h" |
henririgby98 | 4:d744920089ea | 8 | #include "Missiles.h" |
henririgby98 | 4:d744920089ea | 9 | |
henririgby98 | 17:e749cac05270 | 10 | /** SpaceRebEngine class |
henririgby98 | 17:e749cac05270 | 11 | |
henririgby98 | 17:e749cac05270 | 12 | @brief Class for Space Rebellion Engine |
henririgby98 | 17:e749cac05270 | 13 | |
henririgby98 | 17:e749cac05270 | 14 | @version 1.0 |
henririgby98 | 17:e749cac05270 | 15 | |
henririgby98 | 17:e749cac05270 | 16 | @author Henri Rigby |
henririgby98 | 17:e749cac05270 | 17 | |
henririgby98 | 17:e749cac05270 | 18 | @date May 2019 |
henririgby98 | 17:e749cac05270 | 19 | |
henririgby98 | 17:e749cac05270 | 20 | @code |
henririgby98 | 17:e749cac05270 | 21 | |
henririgby98 | 17:e749cac05270 | 22 | #include "SpaceRebEngine.h" |
henririgby98 | 17:e749cac05270 | 23 | |
henririgby98 | 17:e749cac05270 | 24 | SpaceRebEngine::SpaceRebEngine() |
henririgby98 | 17:e749cac05270 | 25 | { |
henririgby98 | 17:e749cac05270 | 26 | |
henririgby98 | 17:e749cac05270 | 27 | } |
henririgby98 | 17:e749cac05270 | 28 | |
henririgby98 | 17:e749cac05270 | 29 | SpaceRebEngine::~SpaceRebEngine() |
henririgby98 | 17:e749cac05270 | 30 | { |
henririgby98 | 17:e749cac05270 | 31 | |
henririgby98 | 17:e749cac05270 | 32 | } |
henririgby98 | 17:e749cac05270 | 33 | |
henririgby98 | 17:e749cac05270 | 34 | void SpaceRebEngine::init(int spaceinvader_width,int spaceinvader_height,int missiles_size,int speed) |
henririgby98 | 17:e749cac05270 | 35 | { |
henririgby98 | 17:e749cac05270 | 36 | _spaceinvader_width = spaceinvader_width; |
henririgby98 | 17:e749cac05270 | 37 | _spaceinvader_height = spaceinvader_height; |
henririgby98 | 17:e749cac05270 | 38 | _missiles_size = missiles_size; |
henririgby98 | 17:e749cac05270 | 39 | _speed = speed; |
henririgby98 | 17:e749cac05270 | 40 | _player.init(_spaceinvader_height,_spaceinvader_width); //sets initial values of spaceinvader |
henririgby98 | 17:e749cac05270 | 41 | _missiles.init(_missiles_size); //sets initial values of missilles |
henririgby98 | 17:e749cac05270 | 42 | _missiles.set_score(); //sets score of game in missiles.cpp |
henririgby98 | 17:e749cac05270 | 43 | _end = false; //ensures _end = false for each time the game is reset |
henririgby98 | 17:e749cac05270 | 44 | } |
henririgby98 | 17:e749cac05270 | 45 | |
henririgby98 | 17:e749cac05270 | 46 | void SpaceRebEngine::read_input(Gamepad &pad) |
henririgby98 | 17:e749cac05270 | 47 | { |
henririgby98 | 17:e749cac05270 | 48 | _d = pad.get_direction(); //sets _d by takeing the direction from the joystick |
henririgby98 | 17:e749cac05270 | 49 | _mag = pad.get_mag(); //sets magnitude by takeing the magnitude from the joystick |
henririgby98 | 17:e749cac05270 | 50 | } |
henririgby98 | 17:e749cac05270 | 51 | |
henririgby98 | 17:e749cac05270 | 52 | void SpaceRebEngine::draw(N5110 &lcd) |
henririgby98 | 17:e749cac05270 | 53 | { |
henririgby98 | 17:e749cac05270 | 54 | lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT); // draw the play area |
henririgby98 | 17:e749cac05270 | 55 | _player.draw(lcd); //draw the spaceinvader |
henririgby98 | 17:e749cac05270 | 56 | _missiles.draw(lcd); // draw the missiles |
henririgby98 | 17:e749cac05270 | 57 | } |
henririgby98 | 17:e749cac05270 | 58 | |
henririgby98 | 17:e749cac05270 | 59 | void SpaceRebEngine::update(Gamepad &pad) |
henririgby98 | 17:e749cac05270 | 60 | { |
henririgby98 | 17:e749cac05270 | 61 | _player.update(_d,_mag); //updates the movement of the spaceinvader |
henririgby98 | 17:e749cac05270 | 62 | _missiles.update(); //updates position of missiles |
henririgby98 | 17:e749cac05270 | 63 | |
henririgby98 | 17:e749cac05270 | 64 | check_spaceinvader_collision(pad); //checks to see if spaceinvader has been struck by missiles |
henririgby98 | 17:e749cac05270 | 65 | check_wall_collision(pad); //checks to see if missiles has collided with the play area wall |
henririgby98 | 17:e749cac05270 | 66 | } |
henririgby98 | 17:e749cac05270 | 67 | |
henririgby98 | 17:e749cac05270 | 68 | void SpaceRebEngine::check_wall_collision(Gamepad &pad) |
henririgby98 | 17:e749cac05270 | 69 | { |
henririgby98 | 17:e749cac05270 | 70 | Vector2D missiles_pos = _missiles.get_pos(); |
henririgby98 | 17:e749cac05270 | 71 | Vector2D missiles_velocity = _missiles.get_velocity(); |
henririgby98 | 17:e749cac05270 | 72 | if (missiles_pos.y <= 1) { |
henririgby98 | 17:e749cac05270 | 73 | missiles_pos.y = 1; //ensures missiles do not go beyond the y-axis play area at the top |
henririgby98 | 17:e749cac05270 | 74 | missiles_velocity.y = -missiles_velocity.y *1.1; //used to bounce and increase the missiles_velocity.y with each bounce on the wall |
henririgby98 | 17:e749cac05270 | 75 | _missiles.add_score(); //incrases score by 1 each time that the missiles hits the wall |
henririgby98 | 17:e749cac05270 | 76 | if (missiles_velocity.y >= 8){ |
henririgby98 | 17:e749cac05270 | 77 | missiles_velocity.y = 8; //sets a maximum missiles_velocity.y so missiles dont go 'supersonic' |
henririgby98 | 17:e749cac05270 | 78 | } |
henririgby98 | 17:e749cac05270 | 79 | } else if (missiles_pos.y + _missiles_size >= (HEIGHT-1) ) { |
henririgby98 | 17:e749cac05270 | 80 | missiles_pos.y = (HEIGHT-1) - _missiles_size; //ensures missiles do not go beyond the y-axis play area at the bottom |
henririgby98 | 17:e749cac05270 | 81 | missiles_velocity.y = -missiles_velocity.y * 1.1; |
henririgby98 | 17:e749cac05270 | 82 | _missiles.add_score(); |
henririgby98 | 17:e749cac05270 | 83 | if (missiles_velocity.y >= 8){ |
henririgby98 | 17:e749cac05270 | 84 | missiles_velocity.y = 8; |
henririgby98 | 17:e749cac05270 | 85 | } |
henririgby98 | 17:e749cac05270 | 86 | } else if (missiles_pos.x + _missiles_size >= (WIDTH-1) ) { |
henririgby98 | 17:e749cac05270 | 87 | missiles_pos.x = (WIDTH-1) - _missiles_size; //ensures missiles do not go beyond the x-axis play area to the right |
henririgby98 | 17:e749cac05270 | 88 | missiles_velocity.x = -missiles_velocity.x * 1.1 ; //used to bounce and increase the missiles_velocity.x with each bounce on the wall |
henririgby98 | 17:e749cac05270 | 89 | _missiles.add_score(); |
henririgby98 | 17:e749cac05270 | 90 | if (missiles_velocity.x >= 8){ |
henririgby98 | 17:e749cac05270 | 91 | missiles_velocity.x = 8; //sets a maximum missiles_velocity.x so missiles dont go 'supersonic' |
henririgby98 | 17:e749cac05270 | 92 | } |
henririgby98 | 17:e749cac05270 | 93 | } else if (missiles_pos.x <= 1) { |
henririgby98 | 17:e749cac05270 | 94 | missiles_pos.x = 1; //ensures missiles do not go beyond the x-axis play area to the left |
henririgby98 | 17:e749cac05270 | 95 | missiles_velocity.x = -missiles_velocity.x * 1.1; |
henririgby98 | 17:e749cac05270 | 96 | _missiles.add_score(); |
henririgby98 | 17:e749cac05270 | 97 | if (missiles_velocity.x >= 8){ |
henririgby98 | 17:e749cac05270 | 98 | missiles_velocity.x = 8; |
henririgby98 | 17:e749cac05270 | 99 | } |
henririgby98 | 17:e749cac05270 | 100 | } |
henririgby98 | 17:e749cac05270 | 101 | _missiles.set_velocity(missiles_velocity); //used to set the velocity of the missiles (velocity.y & velocity.x) |
henririgby98 | 17:e749cac05270 | 102 | _missiles.set_pos(missiles_pos); //used to set the position of the missiles (_y & _x) |
henririgby98 | 17:e749cac05270 | 103 | } |
henririgby98 | 17:e749cac05270 | 104 | |
henririgby98 | 17:e749cac05270 | 105 | void SpaceRebEngine::check_spaceinvader_collision(Gamepad &pad) |
henririgby98 | 17:e749cac05270 | 106 | { |
henririgby98 | 17:e749cac05270 | 107 | Vector2D missiles_pos = _missiles.get_pos(); //gets the position of missiles |
henririgby98 | 17:e749cac05270 | 108 | Vector2D missiles_velocity = _missiles.get_velocity(); //gets the velocity of the missiles |
henririgby98 | 17:e749cac05270 | 109 | Vector2D player_pos = _player.get_pos(); //gets the position of the spaceinvader |
henririgby98 | 17:e749cac05270 | 110 | if ( |
henririgby98 | 17:e749cac05270 | 111 | (missiles_pos.y >= player_pos.y) && |
henririgby98 | 17:e749cac05270 | 112 | (missiles_pos.y <= player_pos.y + _spaceinvader_height) && |
henririgby98 | 17:e749cac05270 | 113 | (missiles_pos.x >= player_pos.x) && |
henririgby98 | 17:e749cac05270 | 114 | (missiles_pos.x <= player_pos.x + _spaceinvader_width) //checks if there is a collision between spaceinvader & missiles |
henririgby98 | 17:e749cac05270 | 115 | ) { |
henririgby98 | 17:e749cac05270 | 116 | pad.tone(1500.0,0.1); //beep when spaceinvader collides with missiles |
henririgby98 | 17:e749cac05270 | 117 | _end = true; //sets value to true and does this to end the play mechanic |
henririgby98 | 17:e749cac05270 | 118 | } |
henririgby98 | 17:e749cac05270 | 119 | } |
henririgby98 | 17:e749cac05270 | 120 | |
henririgby98 | 17:e749cac05270 | 121 | void SpaceRebEngine::print_scores(N5110 &lcd) |
henririgby98 | 17:e749cac05270 | 122 | { |
henririgby98 | 17:e749cac05270 | 123 | _score = _missiles.get_score(); //gets the game score from missiles |
henririgby98 | 17:e749cac05270 | 124 | char buffer1[14]; |
henririgby98 | 17:e749cac05270 | 125 | sprintf(buffer1,"%2d",_score); |
henririgby98 | 17:e749cac05270 | 126 | lcd.printString(buffer1,WIDTH - 23,2); //prints the score on the lcd display |
henririgby98 | 17:e749cac05270 | 127 | } |
henririgby98 | 17:e749cac05270 | 128 | |
henririgby98 | 17:e749cac05270 | 129 | bool SpaceRebEngine::game_end() |
henririgby98 | 17:e749cac05270 | 130 | { |
henririgby98 | 17:e749cac05270 | 131 | bool end = _end; |
henririgby98 | 17:e749cac05270 | 132 | return end; //returns boolean value of end which is used to end play mechanic |
henririgby98 | 17:e749cac05270 | 133 | } |
henririgby98 | 17:e749cac05270 | 134 | |
henririgby98 | 17:e749cac05270 | 135 | @endcode |
henririgby98 | 17:e749cac05270 | 136 | */ |
henririgby98 | 4:d744920089ea | 137 | |
henririgby98 | 4:d744920089ea | 138 | class SpaceRebEngine |
henririgby98 | 4:d744920089ea | 139 | { |
henririgby98 | 4:d744920089ea | 140 | |
henririgby98 | 4:d744920089ea | 141 | public: |
henririgby98 | 4:d744920089ea | 142 | SpaceRebEngine(); |
henririgby98 | 4:d744920089ea | 143 | ~SpaceRebEngine(); |
henririgby98 | 17:e749cac05270 | 144 | /** |
henririgby98 | 17:e749cac05270 | 145 | * @brief Initialises spaceinvader and missiles |
henririgby98 | 17:e749cac05270 | 146 | * @param sets spaceinvader @details Sets height and width of the spaceinvader private variables |
henririgby98 | 17:e749cac05270 | 147 | * @param sets missiles @details Sets size and speed of the missiles private variables |
henririgby98 | 17:e749cac05270 | 148 | */ |
henririgby98 | 4:d744920089ea | 149 | void init(int spaceinvader_width,int spaceinvader_height,int missiles_size,int speed); |
henririgby98 | 17:e749cac05270 | 150 | /** |
henririgby98 | 17:e749cac05270 | 151 | * @brief Sets joystick values |
henririgby98 | 17:e749cac05270 | 152 | * @param sets the joystick values @details Sets direction and magnitude of the joystick private variables |
henririgby98 | 17:e749cac05270 | 153 | */ |
henririgby98 | 4:d744920089ea | 154 | void read_input(Gamepad &pad); |
henririgby98 | 17:e749cac05270 | 155 | /** |
henririgby98 | 17:e749cac05270 | 156 | * @brief Updates joystick and missiles values |
henririgby98 | 17:e749cac05270 | 157 | * @param sets the joystick values @details Sets direction and magnitude of the joystick private variables |
henririgby98 | 17:e749cac05270 | 158 | * @param sets missiles @details Sets size and speed of the missiles private variables |
henririgby98 | 17:e749cac05270 | 159 | */ |
henririgby98 | 4:d744920089ea | 160 | void update(Gamepad &pad); |
henririgby98 | 17:e749cac05270 | 161 | /** |
henririgby98 | 17:e749cac05270 | 162 | * @brief Draws game |
henririgby98 | 17:e749cac05270 | 163 | * @return draw game components @details Draws spaceinvader, missiles & play area |
henririgby98 | 17:e749cac05270 | 164 | */ |
henririgby98 | 4:d744920089ea | 165 | void draw(N5110 &lcd); |
henririgby98 | 17:e749cac05270 | 166 | /** |
henririgby98 | 17:e749cac05270 | 167 | * @brief Sets score and prints score |
henririgby98 | 17:e749cac05270 | 168 | * @param sets the score value @details Sets the value of _score private variable |
henririgby98 | 17:e749cac05270 | 169 | * @return prints value of score @details Prints the score on the lcd display |
henririgby98 | 17:e749cac05270 | 170 | */ |
henririgby98 | 7:e0cab3e73df9 | 171 | void print_scores(N5110 &lcd); |
henririgby98 | 17:e749cac05270 | 172 | /** |
henririgby98 | 17:e749cac05270 | 173 | * @brief Sets value of _end |
henririgby98 | 17:e749cac05270 | 174 | * @param value of _end @details Returns the boolean value of _end |
henririgby98 | 17:e749cac05270 | 175 | */ |
henririgby98 | 17:e749cac05270 | 176 | void check_spaceinvader_collision(Gamepad &pad); |
henririgby98 | 17:e749cac05270 | 177 | /** |
henririgby98 | 17:e749cac05270 | 178 | * @brief Sets missiles velocity |
henririgby98 | 17:e749cac05270 | 179 | * @param sets velocity values of missiles @details Sets the values for velocity.x & velocity.y of missiles |
henririgby98 | 17:e749cac05270 | 180 | */ |
henririgby98 | 17:e749cac05270 | 181 | void check_wall_collision(Gamepad &pad); |
henririgby98 | 17:e749cac05270 | 182 | /** |
henririgby98 | 17:e749cac05270 | 183 | * @brief Gets value of end |
henririgby98 | 17:e749cac05270 | 184 | * @return value of end @details Returns the boolean value of end |
henririgby98 | 17:e749cac05270 | 185 | */ |
henririgby98 | 7:e0cab3e73df9 | 186 | bool game_end(); |
henririgby98 | 4:d744920089ea | 187 | |
henririgby98 | 4:d744920089ea | 188 | private: |
henririgby98 | 4:d744920089ea | 189 | |
henririgby98 | 4:d744920089ea | 190 | SpaceInvader _player; |
henririgby98 | 4:d744920089ea | 191 | |
henririgby98 | 4:d744920089ea | 192 | int _spaceinvader_width; |
henririgby98 | 4:d744920089ea | 193 | int _spaceinvader_height; |
henririgby98 | 4:d744920089ea | 194 | int _missiles_size; |
henririgby98 | 4:d744920089ea | 195 | int _speed; |
henririgby98 | 7:e0cab3e73df9 | 196 | int _score; |
henririgby98 | 7:e0cab3e73df9 | 197 | |
henririgby98 | 7:e0cab3e73df9 | 198 | bool _end; |
henririgby98 | 4:d744920089ea | 199 | |
henririgby98 | 4:d744920089ea | 200 | Missiles _missiles; |
henririgby98 | 4:d744920089ea | 201 | |
henririgby98 | 4:d744920089ea | 202 | Direction _d; |
henririgby98 | 4:d744920089ea | 203 | float _mag; |
henririgby98 | 4:d744920089ea | 204 | |
henririgby98 | 4:d744920089ea | 205 | }; |
henririgby98 | 4:d744920089ea | 206 | |
henririgby98 | 4:d744920089ea | 207 | #endif |