ELEC2645 (2018/19) / Mbed 2 deprecated henririgby98

Dependencies:   mbed

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?

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