JianWei Lee
/
project_game
Meteor defense project
Weapon/Weapon.h@50:082feedcdd22, 2017-05-04 (annotated)
- Committer:
- jasper0712
- Date:
- Thu May 04 16:55:26 2017 +0000
- Revision:
- 50:082feedcdd22
converted library to folder
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jasper0712 | 50:082feedcdd22 | 1 | #ifndef WEAPON_H |
jasper0712 | 50:082feedcdd22 | 2 | #define WEAPON_H |
jasper0712 | 50:082feedcdd22 | 3 | |
jasper0712 | 50:082feedcdd22 | 4 | #include "mbed.h" |
jasper0712 | 50:082feedcdd22 | 5 | #include "N5110.h" |
jasper0712 | 50:082feedcdd22 | 6 | #include "Gamepad.h" |
jasper0712 | 50:082feedcdd22 | 7 | #include "Spawn.h" |
jasper0712 | 50:082feedcdd22 | 8 | #include "GUI.h" |
jasper0712 | 50:082feedcdd22 | 9 | |
jasper0712 | 50:082feedcdd22 | 10 | #define Rows 48 |
jasper0712 | 50:082feedcdd22 | 11 | #define Cols 84 |
jasper0712 | 50:082feedcdd22 | 12 | |
jasper0712 | 50:082feedcdd22 | 13 | //position of the bomb target |
jasper0712 | 50:082feedcdd22 | 14 | struct Target { |
jasper0712 | 50:082feedcdd22 | 15 | int xx; |
jasper0712 | 50:082feedcdd22 | 16 | int yy; |
jasper0712 | 50:082feedcdd22 | 17 | }; |
jasper0712 | 50:082feedcdd22 | 18 | |
jasper0712 | 50:082feedcdd22 | 19 | //to store the weapon level |
jasper0712 | 50:082feedcdd22 | 20 | struct Variables { |
jasper0712 | 50:082feedcdd22 | 21 | int damage; |
jasper0712 | 50:082feedcdd22 | 22 | int range; |
jasper0712 | 50:082feedcdd22 | 23 | int cooldown; |
jasper0712 | 50:082feedcdd22 | 24 | int capacity; |
jasper0712 | 50:082feedcdd22 | 25 | int regenRate; |
jasper0712 | 50:082feedcdd22 | 26 | |
jasper0712 | 50:082feedcdd22 | 27 | }; |
jasper0712 | 50:082feedcdd22 | 28 | |
jasper0712 | 50:082feedcdd22 | 29 | /** Weapon Class |
jasper0712 | 50:082feedcdd22 | 30 | @brief Library that contains the weapons for the game |
jasper0712 | 50:082feedcdd22 | 31 | @author JianWei Lee |
jasper0712 | 50:082feedcdd22 | 32 | @date April 2017 |
jasper0712 | 50:082feedcdd22 | 33 | */ |
jasper0712 | 50:082feedcdd22 | 34 | class Weapon |
jasper0712 | 50:082feedcdd22 | 35 | { |
jasper0712 | 50:082feedcdd22 | 36 | public: |
jasper0712 | 50:082feedcdd22 | 37 | Weapon(); |
jasper0712 | 50:082feedcdd22 | 38 | ~Weapon(); |
jasper0712 | 50:082feedcdd22 | 39 | |
jasper0712 | 50:082feedcdd22 | 40 | void init(); |
jasper0712 | 50:082feedcdd22 | 41 | |
jasper0712 | 50:082feedcdd22 | 42 | /**Draw player |
jasper0712 | 50:082feedcdd22 | 43 | * |
jasper0712 | 50:082feedcdd22 | 44 | *@brief Draw player on the screen at (43,46) \n |
jasper0712 | 50:082feedcdd22 | 45 | *@brief Draw the position of the weapon depending on the joystick direction |
jasper0712 | 50:082feedcdd22 | 46 | */ |
jasper0712 | 50:082feedcdd22 | 47 | void drawPlayer(Gamepad &pad,N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 48 | |
jasper0712 | 50:082feedcdd22 | 49 | /**Math calculation |
jasper0712 | 50:082feedcdd22 | 50 | * |
jasper0712 | 50:082feedcdd22 | 51 | *@brief It gets the gradient from gamepad and calculate y-intercept of the line using the player's position \n |
jasper0712 | 50:082feedcdd22 | 52 | *@brief The math is required for laser and cannon. |
jasper0712 | 50:082feedcdd22 | 53 | */ |
jasper0712 | 50:082feedcdd22 | 54 | void weaponMath(Gamepad &pad); |
jasper0712 | 50:082feedcdd22 | 55 | |
jasper0712 | 50:082feedcdd22 | 56 | /**Laser |
jasper0712 | 50:082feedcdd22 | 57 | * |
jasper0712 | 50:082feedcdd22 | 58 | *@brief The main code for laser \n |
jasper0712 | 50:082feedcdd22 | 59 | *@brief Button A to activate laser \n |
jasper0712 | 50:082feedcdd22 | 60 | *@brief The screen is divided into 4 parts for better line resolution and gradient changes in these different region \n |
jasper0712 | 50:082feedcdd22 | 61 | *@brief Laser can only deal damage to spawn A, C and DE. \n |
jasper0712 | 50:082feedcdd22 | 62 | *@brief Laser path will be blocked by spawn B. |
jasper0712 | 50:082feedcdd22 | 63 | *@param Arr2[][Rows] - deal damage to the spawn |
jasper0712 | 50:082feedcdd22 | 64 | *@param cArr2[][Rows] - to differentiate the spawns. |
jasper0712 | 50:082feedcdd22 | 65 | */ |
jasper0712 | 50:082feedcdd22 | 66 | void laser_Main(int Arr2[][Rows], char cArr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 67 | |
jasper0712 | 50:082feedcdd22 | 68 | /*Bomb |
jasper0712 | 50:082feedcdd22 | 69 | * |
jasper0712 | 50:082feedcdd22 | 70 | *@brief The main code for bomb \n |
jasper0712 | 50:082feedcdd22 | 71 | *@brief Button L to bring up the bomb target, button X to detonate bomb \n |
jasper0712 | 50:082feedcdd22 | 72 | *@brief Bomb deals damage to an area - area size depends on the bomb radius \n |
jasper0712 | 50:082feedcdd22 | 73 | *@brief A circle will be drawn on the area bombed. \n |
jasper0712 | 50:082feedcdd22 | 74 | *@brief Bomb can only deal damage to spawn A, C and DE. |
jasper0712 | 50:082feedcdd22 | 75 | *@param Arr2[][Rows] - deal damage to the array |
jasper0712 | 50:082feedcdd22 | 76 | */ |
jasper0712 | 50:082feedcdd22 | 77 | void bomb_main(int Arr2[][Rows], Gamepad &pad, N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 78 | |
jasper0712 | 50:082feedcdd22 | 79 | |
jasper0712 | 50:082feedcdd22 | 80 | |
jasper0712 | 50:082feedcdd22 | 81 | /**Shield |
jasper0712 | 50:082feedcdd22 | 82 | * |
jasper0712 | 50:082feedcdd22 | 83 | *@brief The main code for shield \n |
jasper0712 | 50:082feedcdd22 | 84 | *@brief Button B to activate/deactivate shield. \n |
jasper0712 | 50:082feedcdd22 | 85 | *@brief Shield covers the player from fast moving spawn (spawn B and D&E) at y = 45 \n |
jasper0712 | 50:082feedcdd22 | 86 | *@brief The shield will be deactivated when depleted and will only recharge when the shield is deactivated |
jasper0712 | 50:082feedcdd22 | 87 | *@param Arr2[][Rows] - deal damage to the spawn |
jasper0712 | 50:082feedcdd22 | 88 | *@param cArr2[][Rows] - to differentiate the spawns. |
jasper0712 | 50:082feedcdd22 | 89 | */ |
jasper0712 | 50:082feedcdd22 | 90 | void shield_main(int Arr2[][Rows], char cArr2[][Rows], Gamepad &pad, N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 91 | |
jasper0712 | 50:082feedcdd22 | 92 | |
jasper0712 | 50:082feedcdd22 | 93 | /**Initialise drone |
jasper0712 | 50:082feedcdd22 | 94 | * |
jasper0712 | 50:082feedcdd22 | 95 | *@brief Drone on left side pixel 0 to 42 \n |
jasper0712 | 50:082feedcdd22 | 96 | *@brief Drone on right side pixel 42 to 83 |
jasper0712 | 50:082feedcdd22 | 97 | *@param x - position x of drone |
jasper0712 | 50:082feedcdd22 | 98 | *@param y - position y of drone |
jasper0712 | 50:082feedcdd22 | 99 | *@param a - left border of the drone range |
jasper0712 | 50:082feedcdd22 | 100 | *@param b - right border of the drone range |
jasper0712 | 50:082feedcdd22 | 101 | *@param damage - damage of the drone |
jasper0712 | 50:082feedcdd22 | 102 | *@param range - range of the drone |
jasper0712 | 50:082feedcdd22 | 103 | */ |
jasper0712 | 50:082feedcdd22 | 104 | void droneInit(int x, int y, int a, int b, int damage, int range); |
jasper0712 | 50:082feedcdd22 | 105 | |
jasper0712 | 50:082feedcdd22 | 106 | /*Drone |
jasper0712 | 50:082feedcdd22 | 107 | * |
jasper0712 | 50:082feedcdd22 | 108 | *@brief The drone will automatically deal damage to spawn A, C and D&E with a given range \n |
jasper0712 | 50:082feedcdd22 | 109 | *@brief Drone will prioritize at attacking spawn D&E when it enters the drone range |
jasper0712 | 50:082feedcdd22 | 110 | */ |
jasper0712 | 50:082feedcdd22 | 111 | void drone_main(int Arr2[][Rows], char cArr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 112 | |
jasper0712 | 50:082feedcdd22 | 113 | |
jasper0712 | 50:082feedcdd22 | 114 | /**Cannon |
jasper0712 | 50:082feedcdd22 | 115 | * |
jasper0712 | 50:082feedcdd22 | 116 | *@brief Cannon only can be fired when laser is switched on (button Y) \n |
jasper0712 | 50:082feedcdd22 | 117 | *@brief Cannon can delete spawn A, B and C instantly on contact \n |
jasper0712 | 50:082feedcdd22 | 118 | *@brief It's damage indicate how many spawns it can collide with \n |
jasper0712 | 50:082feedcdd22 | 119 | *@brief The cannon has a fixed radius and travel at the same speed at spawn B \n |
jasper0712 | 50:082feedcdd22 | 120 | *@brief Cannon ammo is not unlimited and will recharge whenever the ammo is not full |
jasper0712 | 50:082feedcdd22 | 121 | */ |
jasper0712 | 50:082feedcdd22 | 122 | void cannon_main(int Arr2[][Rows], char cArr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 123 | |
jasper0712 | 50:082feedcdd22 | 124 | /**Cannon meter |
jasper0712 | 50:082feedcdd22 | 125 | * |
jasper0712 | 50:082feedcdd22 | 126 | *@brief An indicator for the remaining cannon ammo \n |
jasper0712 | 50:082feedcdd22 | 127 | *@brief Cannon ammo size can be upgraded |
jasper0712 | 50:082feedcdd22 | 128 | */ |
jasper0712 | 50:082feedcdd22 | 129 | void cannon_Meter(N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 130 | |
jasper0712 | 50:082feedcdd22 | 131 | /**Cannon recharge |
jasper0712 | 50:082feedcdd22 | 132 | * |
jasper0712 | 50:082feedcdd22 | 133 | *@brief Recharge cannon ammo whenever the cannon ammo is not full \n |
jasper0712 | 50:082feedcdd22 | 134 | *@brief Cannon recharge rate can be upgraded |
jasper0712 | 50:082feedcdd22 | 135 | */ |
jasper0712 | 50:082feedcdd22 | 136 | void cannon_recharge(); |
jasper0712 | 50:082feedcdd22 | 137 | |
jasper0712 | 50:082feedcdd22 | 138 | /**Set Variables |
jasper0712 | 50:082feedcdd22 | 139 | * |
jasper0712 | 50:082feedcdd22 | 140 | *@brief This code will be executed after weapon upgrades \n |
jasper0712 | 50:082feedcdd22 | 141 | *@brief Set the variables using numbers from GUI's struct |
jasper0712 | 50:082feedcdd22 | 142 | *@param up - weapon's number |
jasper0712 | 50:082feedcdd22 | 143 | *@param up1 - variable's number |
jasper0712 | 50:082feedcdd22 | 144 | */ |
jasper0712 | 50:082feedcdd22 | 145 | void setVar(int up, int up1); |
jasper0712 | 50:082feedcdd22 | 146 | |
jasper0712 | 50:082feedcdd22 | 147 | /**Clear weapon variables |
jasper0712 | 50:082feedcdd22 | 148 | * |
jasper0712 | 50:082feedcdd22 | 149 | *@brief To be used only when the player give up on the game. \n |
jasper0712 | 50:082feedcdd22 | 150 | *@brief All weapon variables are set to 0 |
jasper0712 | 50:082feedcdd22 | 151 | */ |
jasper0712 | 50:082feedcdd22 | 152 | void reset_WeaponVariables(); |
jasper0712 | 50:082feedcdd22 | 153 | |
jasper0712 | 50:082feedcdd22 | 154 | //these variable can be upgraded as the game progress |
jasper0712 | 50:082feedcdd22 | 155 | int _bombRange; |
jasper0712 | 50:082feedcdd22 | 156 | int _laserDamage; |
jasper0712 | 50:082feedcdd22 | 157 | int _bombDamage; |
jasper0712 | 50:082feedcdd22 | 158 | int _bombCooldown; |
jasper0712 | 50:082feedcdd22 | 159 | int _shieldCapacity; |
jasper0712 | 50:082feedcdd22 | 160 | int _shieldRegenRate; |
jasper0712 | 50:082feedcdd22 | 161 | int _droneDamage; |
jasper0712 | 50:082feedcdd22 | 162 | int _droneRange; |
jasper0712 | 50:082feedcdd22 | 163 | int _cannonDamage; |
jasper0712 | 50:082feedcdd22 | 164 | int _cannonCapacity; |
jasper0712 | 50:082feedcdd22 | 165 | int _cannonRegenRate; |
jasper0712 | 50:082feedcdd22 | 166 | |
jasper0712 | 50:082feedcdd22 | 167 | //these are used in game engine |
jasper0712 | 50:082feedcdd22 | 168 | int cannonFiring_flag; |
jasper0712 | 50:082feedcdd22 | 169 | int _cannon; |
jasper0712 | 50:082feedcdd22 | 170 | |
jasper0712 | 50:082feedcdd22 | 171 | private: |
jasper0712 | 50:082feedcdd22 | 172 | //structs |
jasper0712 | 50:082feedcdd22 | 173 | Variables laser; |
jasper0712 | 50:082feedcdd22 | 174 | Variables bomb; |
jasper0712 | 50:082feedcdd22 | 175 | Variables drone; |
jasper0712 | 50:082feedcdd22 | 176 | Variables shield; |
jasper0712 | 50:082feedcdd22 | 177 | Variables cannon; |
jasper0712 | 50:082feedcdd22 | 178 | |
jasper0712 | 50:082feedcdd22 | 179 | //Laser |
jasper0712 | 50:082feedcdd22 | 180 | int c; |
jasper0712 | 50:082feedcdd22 | 181 | int y; |
jasper0712 | 50:082feedcdd22 | 182 | int x; |
jasper0712 | 50:082feedcdd22 | 183 | float m; |
jasper0712 | 50:082feedcdd22 | 184 | int _x; |
jasper0712 | 50:082feedcdd22 | 185 | int _y; |
jasper0712 | 50:082feedcdd22 | 186 | int lineBreak; |
jasper0712 | 50:082feedcdd22 | 187 | //screen divided into 4 parts |
jasper0712 | 50:082feedcdd22 | 188 | void laser1and4(int Arr2[][Rows], char cArr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 189 | void laser2(int Arr2[][Rows], char cArr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 190 | void laser3(int Arr2[][Rows], char cArr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 191 | //look for spawn A, B, C and D&E |
jasper0712 | 50:082feedcdd22 | 192 | void laser_detectSpawn(int i, int j, int Arr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 193 | //to give C a larger hitbox |
jasper0712 | 50:082feedcdd22 | 194 | void laser_detectSpawnC(int i, int j, int Arr2[][Rows], char cArr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 195 | |
jasper0712 | 50:082feedcdd22 | 196 | //drone |
jasper0712 | 50:082feedcdd22 | 197 | int breakout; |
jasper0712 | 50:082feedcdd22 | 198 | int d_x; |
jasper0712 | 50:082feedcdd22 | 199 | int d_y; |
jasper0712 | 50:082feedcdd22 | 200 | int d_side; //which side the drone is at. 0 for left side. 42 for right side. |
jasper0712 | 50:082feedcdd22 | 201 | int d_scan; |
jasper0712 | 50:082feedcdd22 | 202 | int d_foundDE; |
jasper0712 | 50:082feedcdd22 | 203 | //draw a line for laser |
jasper0712 | 50:082feedcdd22 | 204 | void droneLaser(int x, int y, int Arr2[][Rows], char cArr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 205 | //drone scan for spawn A, B and D&E |
jasper0712 | 50:082feedcdd22 | 206 | void droneScanForAB(int Arr2[][Rows], char cArr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 207 | void droneScanForDE(int Arr2[][Rows], char cArr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 208 | |
jasper0712 | 50:082feedcdd22 | 209 | //cannon |
jasper0712 | 50:082feedcdd22 | 210 | float cannonDirection; |
jasper0712 | 50:082feedcdd22 | 211 | int cannon_y; |
jasper0712 | 50:082feedcdd22 | 212 | int cannon_x; |
jasper0712 | 50:082feedcdd22 | 213 | int cannon_c; |
jasper0712 | 50:082feedcdd22 | 214 | int cannon_Damage; |
jasper0712 | 50:082feedcdd22 | 215 | //screen divided into 4 parts |
jasper0712 | 50:082feedcdd22 | 216 | void cannon1and4(int Arr2[][Rows], char cArr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 217 | void cannon2(int Arr2[][Rows], char cArr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 218 | void cannon3(int Arr2[][Rows], char cArr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 219 | //draw cannon ball |
jasper0712 | 50:082feedcdd22 | 220 | void draw_CannonBall(int x, int y, N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 221 | //large cannon hit box |
jasper0712 | 50:082feedcdd22 | 222 | void cannon_HitBox(int i, int j, int Arr2[][Rows], char cArr2[][Rows]); |
jasper0712 | 50:082feedcdd22 | 223 | |
jasper0712 | 50:082feedcdd22 | 224 | |
jasper0712 | 50:082feedcdd22 | 225 | |
jasper0712 | 50:082feedcdd22 | 226 | |
jasper0712 | 50:082feedcdd22 | 227 | //bomb |
jasper0712 | 50:082feedcdd22 | 228 | int _bomb; |
jasper0712 | 50:082feedcdd22 | 229 | int bombTarget_flag; |
jasper0712 | 50:082feedcdd22 | 230 | //initialise bomb |
jasper0712 | 50:082feedcdd22 | 231 | void bombInit(); |
jasper0712 | 50:082feedcdd22 | 232 | //draw bomb target on screen |
jasper0712 | 50:082feedcdd22 | 233 | void drawBombTarget(Gamepad &pad, N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 234 | //the function to toggle bomb target flag |
jasper0712 | 50:082feedcdd22 | 235 | void checkBombTarget(Gamepad &pad); |
jasper0712 | 50:082feedcdd22 | 236 | //http://stackoverflow.com/questions/17163636/filled-circle-in-matrix2d-array |
jasper0712 | 50:082feedcdd22 | 237 | //draw a circle on screen using pythagoras theorem |
jasper0712 | 50:082feedcdd22 | 238 | //and deal damage to the area |
jasper0712 | 50:082feedcdd22 | 239 | void drawCircle(int a, int b, int r, int c2, int x2, int y2, int Arr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 240 | void spawnDamageByBomb(int Arr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 241 | //struct to store bomb target's coordinate |
jasper0712 | 50:082feedcdd22 | 242 | Target targetCoord(Gamepad &pad); |
jasper0712 | 50:082feedcdd22 | 243 | |
jasper0712 | 50:082feedcdd22 | 244 | //shield |
jasper0712 | 50:082feedcdd22 | 245 | int _shield; |
jasper0712 | 50:082feedcdd22 | 246 | //Scan for spawn B and D&E and deletes them at y = 45. |
jasper0712 | 50:082feedcdd22 | 247 | void shield_Rule(int Arr2[][Rows], char cArr2[][Rows], N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 248 | //draw shield |
jasper0712 | 50:082feedcdd22 | 249 | void drawEnergyShield(N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 250 | void shieldMeter(N5110 &lcd); |
jasper0712 | 50:082feedcdd22 | 251 | |
jasper0712 | 50:082feedcdd22 | 252 | }; |
jasper0712 | 50:082feedcdd22 | 253 | |
jasper0712 | 50:082feedcdd22 | 254 | #endif |
jasper0712 | 50:082feedcdd22 | 255 |