Meteor defense project

Dependencies:   N5110 mbed

Committer:
jasper0712
Date:
Thu May 04 16:55:26 2017 +0000
Revision:
50:082feedcdd22
converted library to folder

Who changed what in which revision?

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