ELEC2645 (2018/19) / Mbed 2 deprecated henririgby98

Dependencies:   mbed

Committer:
henririgby98
Date:
Thu May 09 14:58:01 2019 +0000
Revision:
20:477d2ee5e461
Parent:
16:3cb5c59ae7e8
finish;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
henririgby98 3:2aea0872bb5e 1 #ifndef MISSILES_H
henririgby98 3:2aea0872bb5e 2 #define MISSILES_H
henririgby98 3:2aea0872bb5e 3
henririgby98 3:2aea0872bb5e 4 #include "mbed.h"
henririgby98 3:2aea0872bb5e 5 #include "N5110.h"
henririgby98 3:2aea0872bb5e 6 #include "Gamepad.h"
henririgby98 3:2aea0872bb5e 7
henririgby98 13:5aa4147e2b3e 8 /** Missiles class
henririgby98 13:5aa4147e2b3e 9
henririgby98 13:5aa4147e2b3e 10 @brief Class for Missiles
henririgby98 13:5aa4147e2b3e 11
henririgby98 13:5aa4147e2b3e 12 @version 1.0
henririgby98 13:5aa4147e2b3e 13
henririgby98 13:5aa4147e2b3e 14 @author Henri Rigby
henririgby98 13:5aa4147e2b3e 15
henririgby98 13:5aa4147e2b3e 16 @date May 2019
henririgby98 13:5aa4147e2b3e 17
henririgby98 13:5aa4147e2b3e 18 @code
henririgby98 13:5aa4147e2b3e 19
henririgby98 15:286dde533aba 20 #include "Missiles.h"
henririgby98 15:286dde533aba 21
henririgby98 15:286dde533aba 22 Missiles::Missiles()
henririgby98 15:286dde533aba 23 {
henririgby98 15:286dde533aba 24
henririgby98 15:286dde533aba 25 }
henririgby98 15:286dde533aba 26
henririgby98 15:286dde533aba 27 Missiles::~Missiles()
henririgby98 15:286dde533aba 28 {
henririgby98 15:286dde533aba 29
henririgby98 15:286dde533aba 30 }
henririgby98 15:286dde533aba 31
henririgby98 15:286dde533aba 32 void Missiles::init(int size)
henririgby98 15:286dde533aba 33 {
henririgby98 15:286dde533aba 34 _speed = 3; // sets initial speed of missile to 3
henririgby98 15:286dde533aba 35 _size = size;
henririgby98 15:286dde533aba 36 srand(time(NULL));
henririgby98 15:286dde533aba 37 int N = rand() % 4; //randomises a value of N between 0 and 3
henririgby98 15:286dde533aba 38 if (N == 0) {
henririgby98 15:286dde533aba 39 _y = HEIGHT; //sets _y value to bottom of lcd display
henririgby98 15:286dde533aba 40 _x = rand() % 80 +4; //randomises _x value
henririgby98 15:286dde533aba 41 south(); //calls south function
henririgby98 15:286dde533aba 42 } else if (N == 1){
henririgby98 15:286dde533aba 43 _y = 0; //sets _y value to top of lcd display
henririgby98 15:286dde533aba 44 _x = rand() % 80 +4;
henririgby98 15:286dde533aba 45 north(); //calls north function
henririgby98 15:286dde533aba 46 } else if (N == 2){
henririgby98 15:286dde533aba 47 _y = rand() % 44 +4; //randomises _y value
henririgby98 15:286dde533aba 48 _x = 0; //sets _x value to left side of lcd display
henririgby98 15:286dde533aba 49 west(); //calls west function
henririgby98 15:286dde533aba 50 } else {
henririgby98 15:286dde533aba 51 _y = rand() % 44 +4;
henririgby98 15:286dde533aba 52 _x = WIDTH; //sets _x value to right side of lcd display
henririgby98 15:286dde533aba 53 east(); //calls east function
henririgby98 15:286dde533aba 54 }
henririgby98 15:286dde533aba 55 }
henririgby98 15:286dde533aba 56
henririgby98 15:286dde533aba 57 void Missiles::south()
henririgby98 15:286dde533aba 58 {
henririgby98 15:286dde533aba 59 srand(time(NULL));
henririgby98 15:286dde533aba 60 int direction = rand() % 2; //randomises value for direction between 0-1
henririgby98 15:286dde533aba 61 if (direction == 0) {
henririgby98 15:286dde533aba 62 _velocity.x = ((2*_speed)^1/2)/2; //sets x velocity equation means that no strafing will occur
henririgby98 15:286dde533aba 63 _velocity.y = -((2*_speed)^1/2)/2; //sets y velocity
henririgby98 15:286dde533aba 64 } else {
henririgby98 15:286dde533aba 65 _velocity.x = -((2*_speed)^1/2)/2;
henririgby98 15:286dde533aba 66 _velocity.y = -((2*_speed)^1/2)/2;
henririgby98 15:286dde533aba 67 }
henririgby98 15:286dde533aba 68 }
henririgby98 15:286dde533aba 69
henririgby98 15:286dde533aba 70 void Missiles::north()
henririgby98 15:286dde533aba 71 {
henririgby98 15:286dde533aba 72 srand(time(NULL));
henririgby98 15:286dde533aba 73 int direction = rand() % 2;
henririgby98 15:286dde533aba 74 if (direction == 0) {
henririgby98 15:286dde533aba 75 _velocity.x = ((2*_speed)^1/2)/2;
henririgby98 15:286dde533aba 76 _velocity.y = ((2*_speed)^1/2)/2;
henririgby98 15:286dde533aba 77 } else {
henririgby98 15:286dde533aba 78 _velocity.x = -((2*_speed)^1/2)/2;
henririgby98 15:286dde533aba 79 _velocity.y = ((2*_speed)^1/2)/2;
henririgby98 15:286dde533aba 80 }
henririgby98 15:286dde533aba 81 }
henririgby98 15:286dde533aba 82
henririgby98 15:286dde533aba 83 void Missiles::west()
henririgby98 15:286dde533aba 84 {
henririgby98 15:286dde533aba 85 srand(time(NULL));
henririgby98 15:286dde533aba 86 int direction = rand() % 2;
henririgby98 15:286dde533aba 87 if (direction == 0) {
henririgby98 15:286dde533aba 88 _velocity.x = ((2*_speed)^1/2)/2;
henririgby98 15:286dde533aba 89 _velocity.y = ((2*_speed)^1/2)/2;
henririgby98 15:286dde533aba 90 } else {
henririgby98 15:286dde533aba 91 _velocity.x = ((2*_speed)^1/2)/2;
henririgby98 15:286dde533aba 92 _velocity.y = -((2*_speed)^1/2)/2;
henririgby98 15:286dde533aba 93 }
henririgby98 15:286dde533aba 94 }
henririgby98 15:286dde533aba 95
henririgby98 15:286dde533aba 96 void Missiles::east()
henririgby98 15:286dde533aba 97 {
henririgby98 15:286dde533aba 98 int direction = rand() % 2;
henririgby98 15:286dde533aba 99 if (direction == 0) {
henririgby98 15:286dde533aba 100 _velocity.x = -((2*_speed)^1/2)/2;
henririgby98 15:286dde533aba 101 _velocity.y = ((2*_speed)^1/2)/2;
henririgby98 15:286dde533aba 102 } else {
henririgby98 15:286dde533aba 103 _velocity.x = -((2*_speed)^1/2)/2;
henririgby98 15:286dde533aba 104 _velocity.y = -((2*_speed)^1/2)/2;
henririgby98 15:286dde533aba 105 }
henririgby98 15:286dde533aba 106 }
henririgby98 15:286dde533aba 107
henririgby98 15:286dde533aba 108 void Missiles::update()
henririgby98 15:286dde533aba 109 {
henririgby98 15:286dde533aba 110 _x += _velocity.x; //sets _x by adding velocity in x direction
henririgby98 15:286dde533aba 111 _y += _velocity.y; //sets _y by adding velocity in y direction
henririgby98 15:286dde533aba 112 }
henririgby98 15:286dde533aba 113
henririgby98 15:286dde533aba 114 void Missiles::draw(N5110 &lcd)
henririgby98 15:286dde533aba 115 {
henririgby98 15:286dde533aba 116 lcd.drawRect(_x,_y,_size,_size,FILL_BLACK); //draws square representing missile
henririgby98 15:286dde533aba 117 }
henririgby98 15:286dde533aba 118
henririgby98 15:286dde533aba 119 void Missiles::set_velocity(Vector2D v)
henririgby98 15:286dde533aba 120 {
henririgby98 15:286dde533aba 121 _velocity.x = v.x; //sets the velocity in the x direction
henririgby98 15:286dde533aba 122 _velocity.y = v.y; //sets the velocity in the y direction
henririgby98 15:286dde533aba 123 }
henririgby98 15:286dde533aba 124
henririgby98 15:286dde533aba 125 Vector2D Missiles::get_velocity()
henririgby98 15:286dde533aba 126 {
henririgby98 15:286dde533aba 127 Vector2D v = {_velocity.x,_velocity.y}; //sets 2D velocity
henririgby98 15:286dde533aba 128 return v;
henririgby98 15:286dde533aba 129 }
henririgby98 15:286dde533aba 130
henririgby98 15:286dde533aba 131 Vector2D Missiles::get_pos()
henririgby98 15:286dde533aba 132 {
henririgby98 15:286dde533aba 133 Vector2D p = {_x,_y}; //gets the position by taking both _x and _y coordinates
henririgby98 15:286dde533aba 134 return p;
henririgby98 15:286dde533aba 135 }
henririgby98 15:286dde533aba 136
henririgby98 15:286dde533aba 137 void Missiles::set_pos(Vector2D p)
henririgby98 15:286dde533aba 138 {
henririgby98 15:286dde533aba 139 _x = p.x; //sets _x by taking the x component of position
henririgby98 15:286dde533aba 140 _y = p.y; //sets _y by taking the y component of position
henririgby98 15:286dde533aba 141 }
henririgby98 15:286dde533aba 142
henririgby98 15:286dde533aba 143 int Missiles::set_score()
henririgby98 15:286dde533aba 144 {
henririgby98 15:286dde533aba 145 _score = 0; //sets the value of _score to equal 0
henririgby98 15:286dde533aba 146 return _score;
henririgby98 15:286dde533aba 147 }
henririgby98 15:286dde533aba 148
henririgby98 15:286dde533aba 149 void Missiles::add_score()
henririgby98 15:286dde533aba 150 {
henririgby98 15:286dde533aba 151 _score++; //increases the value of score by 1
henririgby98 15:286dde533aba 152 }
henririgby98 15:286dde533aba 153
henririgby98 15:286dde533aba 154 int Missiles::get_score()
henririgby98 15:286dde533aba 155 {
henririgby98 15:286dde533aba 156 return _score; //returns the value of _score
henririgby98 15:286dde533aba 157 }
henririgby98 15:286dde533aba 158
henririgby98 13:5aa4147e2b3e 159 */
henririgby98 13:5aa4147e2b3e 160
henririgby98 3:2aea0872bb5e 161 class Missiles
henririgby98 3:2aea0872bb5e 162 {
henririgby98 3:2aea0872bb5e 163
henririgby98 3:2aea0872bb5e 164 public:
henririgby98 20:477d2ee5e461 165 /**constructor*/
henririgby98 3:2aea0872bb5e 166 Missiles();
henririgby98 20:477d2ee5e461 167 /**destructor*/
henririgby98 3:2aea0872bb5e 168 ~Missiles();
henririgby98 13:5aa4147e2b3e 169 /**
henririgby98 13:5aa4147e2b3e 170 * @brief Randomises missile starting position
henririgby98 16:3cb5c59ae7e8 171 * @param sets position @details Sets starting position of the missile
henririgby98 13:5aa4147e2b3e 172 */
henririgby98 7:e0cab3e73df9 173 void init(int size);
henririgby98 13:5aa4147e2b3e 174 /**
henririgby98 13:5aa4147e2b3e 175 * @brief Randomises starting direction & velocity if missile starts at bottom
henririgby98 13:5aa4147e2b3e 176 * @param sets direction & velocity @details Sets starting direction & velocity of missile from bottom
henririgby98 13:5aa4147e2b3e 177 */
henririgby98 7:e0cab3e73df9 178 void south();
henririgby98 13:5aa4147e2b3e 179 /**
henririgby98 13:5aa4147e2b3e 180 * @brief Randomises starting direction & velocity if missile starts at top
henririgby98 13:5aa4147e2b3e 181 * @param sets direction & velocity @details Sets starting direction & velocity of missile from top
henririgby98 13:5aa4147e2b3e 182 */
henririgby98 7:e0cab3e73df9 183 void north();
henririgby98 13:5aa4147e2b3e 184 /**
henririgby98 13:5aa4147e2b3e 185 * @brief Randomises starting direction & velocity if missile starts on left side
henririgby98 13:5aa4147e2b3e 186 * @param sets direction & velocity @details Sets starting direction & velocity of missile from left side
henririgby98 13:5aa4147e2b3e 187 */
henririgby98 7:e0cab3e73df9 188 void west();
henririgby98 13:5aa4147e2b3e 189 /**
henririgby98 13:5aa4147e2b3e 190 * @brief Randomises starting direction & velocity if missile starts on right side
henririgby98 13:5aa4147e2b3e 191 * @param sets direction & velocity @details Sets starting direction & velocity of missile from right side
henririgby98 13:5aa4147e2b3e 192 */
henririgby98 7:e0cab3e73df9 193 void east();
henririgby98 13:5aa4147e2b3e 194 /**
henririgby98 13:5aa4147e2b3e 195 * @brief Draws the missile
henririgby98 15:286dde533aba 196 * @return draws missile @details draws 2x2 square representing a missile
henririgby98 13:5aa4147e2b3e 197 */
henririgby98 3:2aea0872bb5e 198 void draw(N5110 &lcd);
henririgby98 13:5aa4147e2b3e 199 /**
henririgby98 13:5aa4147e2b3e 200 * @brief Updates the position of the missile
henririgby98 15:286dde533aba 201 * @param sets position @details Will reset the position of missile by adding the missiles velocity
henririgby98 13:5aa4147e2b3e 202 */
henririgby98 3:2aea0872bb5e 203 void update();
henririgby98 13:5aa4147e2b3e 204 /**
henririgby98 13:5aa4147e2b3e 205 * @brief Sets the score
henririgby98 15:286dde533aba 206 * @param sets value of the score(int) @details Sets the score of the game back to 0
henririgby98 13:5aa4147e2b3e 207 */
henririgby98 7:e0cab3e73df9 208 int set_score();
henririgby98 13:5aa4147e2b3e 209 /**
henririgby98 13:5aa4147e2b3e 210 * @brief Increases the score
henririgby98 15:286dde533aba 211 * @param sets value of the score @details Increases the value of score by 1
henririgby98 13:5aa4147e2b3e 212 */
henririgby98 7:e0cab3e73df9 213 void add_score();
henririgby98 13:5aa4147e2b3e 214 /**
henririgby98 13:5aa4147e2b3e 215 * @brief Gets the score
henririgby98 15:286dde533aba 216 * @return the current score @details Returns the value of what score is currently
henririgby98 13:5aa4147e2b3e 217 */
henririgby98 7:e0cab3e73df9 218 int get_score();
henririgby98 13:5aa4147e2b3e 219 /**
henririgby98 13:5aa4147e2b3e 220 * @brief Sets the velocity
henririgby98 13:5aa4147e2b3e 221 * @param sets velocity componets @details sets the velocity by equalling it to 2D velocity multiplied by direction
henririgby98 13:5aa4147e2b3e 222 */
henririgby98 3:2aea0872bb5e 223 void set_velocity(Vector2D v);
henririgby98 13:5aa4147e2b3e 224 /**
henririgby98 13:5aa4147e2b3e 225 * @brief Gets the velocity
henririgby98 15:286dde533aba 226 * @return 2D velocity @details returns the 2D velocity by taking velocity components of both x and y
henririgby98 13:5aa4147e2b3e 227 */
henririgby98 3:2aea0872bb5e 228 Vector2D get_velocity();
henririgby98 13:5aa4147e2b3e 229 /**
henririgby98 13:5aa4147e2b3e 230 * @brief Gets the position
henririgby98 15:286dde533aba 231 * @return position @details returns the position of both the x and y coordinates
henririgby98 13:5aa4147e2b3e 232 */
henririgby98 3:2aea0872bb5e 233 Vector2D get_pos();
henririgby98 13:5aa4147e2b3e 234 /**
henririgby98 13:5aa4147e2b3e 235 * @brief sets the position
henririgby98 13:5aa4147e2b3e 236 * @param sets position @details sets x and y coordinates by taking their respective values from p
henririgby98 13:5aa4147e2b3e 237 */
henririgby98 3:2aea0872bb5e 238 void set_pos(Vector2D p);
henririgby98 3:2aea0872bb5e 239
henririgby98 3:2aea0872bb5e 240 private:
henririgby98 3:2aea0872bb5e 241
henririgby98 13:5aa4147e2b3e 242 int _x;
henririgby98 13:5aa4147e2b3e 243 int _y;
henririgby98 7:e0cab3e73df9 244 int _score;
henririgby98 7:e0cab3e73df9 245 int _speed;
henririgby98 3:2aea0872bb5e 246 Vector2D _velocity;
henririgby98 3:2aea0872bb5e 247 int _size;
henririgby98 3:2aea0872bb5e 248 };
henririgby98 3:2aea0872bb5e 249 #endif