ELEC2645 (2018/19) / Mbed 2 deprecated el17arm

Dependencies:   mbed

Committer:
el17arm
Date:
Tue May 07 00:38:10 2019 +0000
Revision:
59:d82d49a7a4d4
Parent:
58:4a826093d9e9
Child:
60:3df033345059
Update documentation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el17arm 33:023f57d52b1c 1 #ifndef SPRITES_H
el17arm 33:023f57d52b1c 2 #define SPRITES_H
el17arm 33:023f57d52b1c 3
el17arm 33:023f57d52b1c 4 #include "mbed.h"
el17arm 33:023f57d52b1c 5 #include "N5110.h"
el17arm 33:023f57d52b1c 6 #include "Gamepad.h"
el17arm 41:0cf320f73424 7
el17arm 58:4a826093d9e9 8 /////////// All sprite bitmaps ////////////////
el17arm 33:023f57d52b1c 9
el17arm 49:9bea7089b657 10 // right facing miner bitmap
el17arm 33:023f57d52b1c 11 const int miner_right[24] = {
el17arm 41:0cf320f73424 12
el17arm 33:023f57d52b1c 13 1,1,1,
el17arm 33:023f57d52b1c 14 1,1,0,
el17arm 33:023f57d52b1c 15 1,1,1,
el17arm 33:023f57d52b1c 16 0,1,0,
el17arm 33:023f57d52b1c 17 1,1,1,
el17arm 33:023f57d52b1c 18 1,1,1,
el17arm 33:023f57d52b1c 19 0,1,0,
el17arm 33:023f57d52b1c 20 0,1,1,
el17arm 33:023f57d52b1c 21
el17arm 33:023f57d52b1c 22 };
el17arm 49:9bea7089b657 23 // left facing miner bitmap
el17arm 49:9bea7089b657 24 const int miner_left[24] = {
el17arm 41:0cf320f73424 25
el17arm 33:023f57d52b1c 26 1,1,1,
el17arm 33:023f57d52b1c 27 0,1,1,
el17arm 33:023f57d52b1c 28 1,1,1,
el17arm 33:023f57d52b1c 29 0,1,0,
el17arm 33:023f57d52b1c 30 1,1,1,
el17arm 33:023f57d52b1c 31 1,1,1,
el17arm 33:023f57d52b1c 32 0,1,0,
el17arm 33:023f57d52b1c 33 1,1,0,
el17arm 33:023f57d52b1c 34 };
el17arm 49:9bea7089b657 35 // enemy bitmap
el17arm 33:023f57d52b1c 36 const int enemy[15] = {
el17arm 33:023f57d52b1c 37
el17arm 33:023f57d52b1c 38 1,1,1,
el17arm 33:023f57d52b1c 39 1,0,1,
el17arm 33:023f57d52b1c 40 1,1,1,
el17arm 33:023f57d52b1c 41 0,1,0,
el17arm 33:023f57d52b1c 42 1,1,1,
el17arm 33:023f57d52b1c 43 };
el17arm 49:9bea7089b657 44 // key bitmap
el17arm 33:023f57d52b1c 45 const int key[12] = {
el17arm 41:0cf320f73424 46
el17arm 33:023f57d52b1c 47 1,1,0,0,
el17arm 33:023f57d52b1c 48 1,0,1,1,
el17arm 33:023f57d52b1c 49 1,1,0,1,
el17arm 33:023f57d52b1c 50 };
el17arm 49:9bea7089b657 51 // blank bitmap to show key collected
el17arm 33:023f57d52b1c 52 const int key_collected[12] = {
el17arm 33:023f57d52b1c 53
el17arm 33:023f57d52b1c 54 0,0,0,0,
el17arm 33:023f57d52b1c 55 0,0,0,0,
el17arm 33:023f57d52b1c 56 0,0,0,0,
el17arm 33:023f57d52b1c 57 };
el17arm 49:9bea7089b657 58 // trap bitmap
el17arm 33:023f57d52b1c 59 const int spike[9] = {
el17arm 33:023f57d52b1c 60
el17arm 34:c5a042973e0c 61 1,0,1,
el17arm 33:023f57d52b1c 62 0,1,0,
el17arm 34:c5a042973e0c 63 1,0,1,
el17arm 33:023f57d52b1c 64 };
el17arm 49:9bea7089b657 65 // solid block bitmap
el17arm 34:c5a042973e0c 66 const int solid_block[18] = {
el17arm 33:023f57d52b1c 67
el17arm 34:c5a042973e0c 68 1,1,1,1,1,1,
el17arm 34:c5a042973e0c 69 1,0,1,1,0,1,
el17arm 34:c5a042973e0c 70 1,1,1,1,1,1,
el17arm 33:023f57d52b1c 71 };
el17arm 49:9bea7089b657 72 // level exit bitmap
el17arm 33:023f57d52b1c 73 const int door[30] = {
el17arm 33:023f57d52b1c 74
el17arm 33:023f57d52b1c 75 1,1,1,1,1,
el17arm 33:023f57d52b1c 76 1,0,1,0,1,
el17arm 33:023f57d52b1c 77 1,1,0,1,1,
el17arm 33:023f57d52b1c 78 1,0,1,0,1,
el17arm 33:023f57d52b1c 79 1,1,0,1,1,
el17arm 33:023f57d52b1c 80 1,0,1,0,1,
el17arm 33:023f57d52b1c 81 };
el17arm 38:55bb9da08a52 82
el17arm 58:4a826093d9e9 83 /////////////Structs for populating up to 6 levels//////////////////
el17arm 50:65ba437510f8 84
el17arm 50:65ba437510f8 85 /** Enemy locations for each level struct */
el17arm 38:55bb9da08a52 86 struct Enemies {
el17arm 49:9bea7089b657 87 double ex[5]; /**< enemy x positions for each level */
el17arm 49:9bea7089b657 88 double ey[5]; /**< enemy y positions for each level */
el17arm 49:9bea7089b657 89 int c[5]; /**< enemy counters for each level */
el17arm 49:9bea7089b657 90 int d[5]; /**< enemy travel distances for each level */
el17arm 49:9bea7089b657 91 double v[5]; /**< varies enemies velocity */
el17arm 38:55bb9da08a52 92 };
el17arm 50:65ba437510f8 93 /** Trap locations for each level struct */
el17arm 38:55bb9da08a52 94 struct Traps {
el17arm 49:9bea7089b657 95 double tx[5]; /**< traps x positions for each level */
el17arm 49:9bea7089b657 96 double ty[5]; /**< traps y positions for each level */
el17arm 38:55bb9da08a52 97 };
el17arm 50:65ba437510f8 98 /** Key locations for each level struct*/
el17arm 38:55bb9da08a52 99 struct Keys {
el17arm 49:9bea7089b657 100 double kx[5]; /**< keys x positions for each level */
el17arm 49:9bea7089b657 101 double ky[5]; /**< keys y positions for each level */
el17arm 38:55bb9da08a52 102 };
el17arm 50:65ba437510f8 103 /** block locations for each level struct*/
el17arm 38:55bb9da08a52 104 struct Solid_blocks {
el17arm 49:9bea7089b657 105 double bx[5]; /**< blocks x positions for each level */
el17arm 49:9bea7089b657 106 double by[5]; /**< blocks y positions for each level */
el17arm 38:55bb9da08a52 107 };
el17arm 50:65ba437510f8 108 /** sinking block locations for each level struct*/
el17arm 38:55bb9da08a52 109 struct Soft_blocks {
el17arm 49:9bea7089b657 110 double sx1[5]; /**< sinking blocks x1 positions for each level */
el17arm 49:9bea7089b657 111 double sy[5]; /**< sinking blocks y positions for each level */
el17arm 49:9bea7089b657 112 int sx2[5]; /**< sinking blocks x2 (length) positions for each level */
el17arm 40:913339e324b8 113 };
el17arm 33:023f57d52b1c 114
el17arm 58:4a826093d9e9 115 ///////////////////////////////////////////////////////////////////////////////
el17arm 52:715791fc08a1 116
el17arm 52:715791fc08a1 117 /** Sprites Class
el17arm 56:8c827d1cae3b 118 @details Draws sprites and sets all collision rules
el17arm 52:715791fc08a1 119 @author Andrew Milner University of Leeds
el17arm 52:715791fc08a1 120 @date April 2019
el17arm 52:715791fc08a1 121 */
el17arm 52:715791fc08a1 122
el17arm 33:023f57d52b1c 123 class Sprites
el17arm 33:023f57d52b1c 124 {
el17arm 33:023f57d52b1c 125
el17arm 33:023f57d52b1c 126 public:
el17arm 53:082c22ac2f9a 127 /** Constructor
el17arm 49:9bea7089b657 128 */
el17arm 33:023f57d52b1c 129 Sprites();
el17arm 53:082c22ac2f9a 130 /** Deconstructor
el17arm 53:082c22ac2f9a 131 */
el17arm 33:023f57d52b1c 132 ~Sprites();
el17arm 53:082c22ac2f9a 133 /** Gets x and y position of player.
el17arm 53:082c22ac2f9a 134 */
el17arm 41:0cf320f73424 135 Vector2D get_pos();
el17arm 53:082c22ac2f9a 136 /** States starting position of player.
el17arm 53:082c22ac2f9a 137 @param miner x position.
el17arm 53:082c22ac2f9a 138 @param miner y position.
el17arm 53:082c22ac2f9a 139 */
el17arm 33:023f57d52b1c 140 void miner_init(int x, int y);
el17arm 53:082c22ac2f9a 141 /** Updates player x position.
el17arm 53:082c22ac2f9a 142 @details Updates x positon depending on direction of joystick. Will only update
el17arm 53:082c22ac2f9a 143 * position if no collision detected. Function also stops player leaving screen
el17arm 53:082c22ac2f9a 144 * at the left and right sides of screen.
el17arm 54:7fa8c07fdea4 145 @param d Direction enum from Gamepad library.
el17arm 53:082c22ac2f9a 146 */
el17arm 45:bad704c546d4 147 void miner_move(Direction d, N5110 &lcd);
el17arm 53:082c22ac2f9a 148 /** Draws sprite facing direction moving.
el17arm 53:082c22ac2f9a 149 @details _direction states if player left or right facing, function draws
el17arm 53:082c22ac2f9a 150 * left or right facing sprite according.
el17arm 53:082c22ac2f9a 151 */
el17arm 33:023f57d52b1c 152 void miner_draw(N5110 &lcd);
el17arm 53:082c22ac2f9a 153 /** States when player is on a platform.
el17arm 53:082c22ac2f9a 154 @details if _jump true then player can jump, this prevents mid-air jumping.
el17arm 53:082c22ac2f9a 155 * Also states conditions for gravity so player will fall unless on top
el17arm 53:082c22ac2f9a 156 * of a platform.
el17arm 53:082c22ac2f9a 157 */
el17arm 53:082c22ac2f9a 158 void miner_land(N5110 &lcd);
el17arm 53:082c22ac2f9a 159 /** Contains jump conditions and updates player position while jumping.
el17arm 53:082c22ac2f9a 160 @details When A button pressed players y position increases until preset value
el17arm 53:082c22ac2f9a 161 * is reached. Jump flag is true while player y is increasing and false all other
el17arm 53:082c22ac2f9a 162 * times, this prevents double jumping.
el17arm 53:082c22ac2f9a 163 */
el17arm 53:082c22ac2f9a 164 void miner_jump(N5110 &lcd, Gamepad &pad);
el17arm 53:082c22ac2f9a 165 /** Player falls if not on platform.
el17arm 53:082c22ac2f9a 166 */
el17arm 33:023f57d52b1c 167 void miner_gravity(N5110 &lcd);
el17arm 53:082c22ac2f9a 168 /** initialises enemies
el17arm 54:7fa8c07fdea4 169 @param index, these will always be 0, 1, 2 so each enemy is treated individually.
el17arm 54:7fa8c07fdea4 170 @param x position.
el17arm 54:7fa8c07fdea4 171 @param y position.
el17arm 53:082c22ac2f9a 172 @param distance in pixels enemy to travel.
el17arm 53:082c22ac2f9a 173 */
el17arm 33:023f57d52b1c 174 void enemy_init(int i, int x, int y, int d);
el17arm 53:082c22ac2f9a 175 /** Updates enemy movement.
el17arm 58:4a826093d9e9 176 @param index, these will always be 0 - 2 so each enemy is treated individually.
el17arm 54:7fa8c07fdea4 177 @param velocity how many pixels enemies will move each loop.
el17arm 53:082c22ac2f9a 178 */
el17arm 33:023f57d52b1c 179 void enemy_move(int i, double v, N5110 &lcd);
el17arm 53:082c22ac2f9a 180 /** States conditions for collision between enemy and player.
el17arm 53:082c22ac2f9a 181 @details uses get_pos() and detects if any overlap between player and enemies.
el17arm 54:7fa8c07fdea4 182 @param index these will always be 0, 1, 2 so each enemy is treated individually.
el17arm 53:082c22ac2f9a 183 @return will return true if collision detected.
el17arm 53:082c22ac2f9a 184 */
el17arm 33:023f57d52b1c 185 bool enemy_collision(int i);
el17arm 53:082c22ac2f9a 186 /** States conditions for drawing and collection of keys.
el17arm 53:082c22ac2f9a 187 @details Each key is displayed while key flag is false, once collected, key is deleted
el17arm 53:082c22ac2f9a 188 * and flag is changed to true.
el17arm 54:7fa8c07fdea4 189 @param index so each key is treated independently
el17arm 54:7fa8c07fdea4 190 @param x key position.
el17arm 54:7fa8c07fdea4 191 @param y key position.
el17arm 53:082c22ac2f9a 192 */
el17arm 33:023f57d52b1c 193 void key_collect(int k, int x, int y, N5110 &lcd, Gamepad &pad);
el17arm 53:082c22ac2f9a 194 /** Counts keys collected.
el17arm 53:082c22ac2f9a 195 @return number of keys collected.
el17arm 53:082c22ac2f9a 196 */
el17arm 40:913339e324b8 197 int keys_collected();
el17arm 53:082c22ac2f9a 198 /** Draws level exit and detects player collision
el17arm 53:082c22ac2f9a 199 @details takes player position from get_pos() and detects if overlap between
el17arm 53:082c22ac2f9a 200 player and the exit sprite.
el17arm 53:082c22ac2f9a 201 @param Exit x position.
el17arm 53:082c22ac2f9a 202 @param Exit y position.
el17arm 53:082c22ac2f9a 203 */
el17arm 53:082c22ac2f9a 204 bool exit_level(int x, int y, N5110 &lcd);
el17arm 53:082c22ac2f9a 205 /** Draws traps and detects player collision
el17arm 53:082c22ac2f9a 206 @details takes player position from get_pos() and detects if overlap between
el17arm 53:082c22ac2f9a 207 player and the trap sprite.
el17arm 54:7fa8c07fdea4 208 @param x trap position.
el17arm 54:7fa8c07fdea4 209 @param y trap position.
el17arm 53:082c22ac2f9a 210 */
el17arm 37:4d525a37d5d2 211 bool trap(int x, int y, N5110 &lcd);
el17arm 53:082c22ac2f9a 212 /** Draws blocks and detects player collision.
el17arm 54:7fa8c07fdea4 213 @param Direction so player can turn around if collision with block.
el17arm 54:7fa8c07fdea4 214 @Param index so collision rules between blocks dont clash, will always be numbered 0 - 4.
el17arm 54:7fa8c07fdea4 215 @param x block position.
el17arm 54:7fa8c07fdea4 216 @param y block position.
el17arm 53:082c22ac2f9a 217 */
el17arm 43:1ec6b6293c6b 218 void blocks(Direction d, int i, int x, int y, N5110 &lcd);
el17arm 53:082c22ac2f9a 219 /** Checks if player has collided with any blocks.
el17arm 54:7fa8c07fdea4 220 @return if player is contact with any block returns true.
el17arm 53:082c22ac2f9a 221 */
el17arm 43:1ec6b6293c6b 222 bool block_collision();
el17arm 53:082c22ac2f9a 223 /** Draws sinking blocks and detects player contact.
el17arm 54:7fa8c07fdea4 224 @param x1 sinking block starting position.
el17arm 54:7fa8c07fdea4 225 @param y sinking block position.
el17arm 54:7fa8c07fdea4 226 @param x2 Sinking block finish position.
el17arm 53:082c22ac2f9a 227 */
el17arm 59:d82d49a7a4d4 228 void soft_blocks(int x1, int y, int x2, N5110 &lcd);
el17arm 33:023f57d52b1c 229
el17arm 58:4a826093d9e9 230 bool _key[5]; /*initialise key flag, will only draw key if false, array identifies keys individually
el17arm 58:4a826093d9e9 231 made public has key_reinit() needs to reset flag at start of each level*/
el17arm 33:023f57d52b1c 232 private:
el17arm 33:023f57d52b1c 233
el17arm 33:023f57d52b1c 234 int _direction;
el17arm 53:082c22ac2f9a 235 bool _gravity;
el17arm 33:023f57d52b1c 236 bool _jump;
el17arm 33:023f57d52b1c 237 int _y;
el17arm 33:023f57d52b1c 238 int _x;
el17arm 33:023f57d52b1c 239 bool _j_flag;
el17arm 33:023f57d52b1c 240 int _j_counter;
el17arm 33:023f57d52b1c 241
el17arm 58:4a826093d9e9 242 double _kx[5]; // key x position
el17arm 58:4a826093d9e9 243 double _ky[5]; // key y position
el17arm 58:4a826093d9e9 244 int _keys; // keeps count of how many keys collected
el17arm 36:203ec93b4cc7 245
el17arm 58:4a826093d9e9 246 bool _eflag[5]; // initialise enemy flag, array identifies each enemy individually
el17arm 58:4a826093d9e9 247 double _ex[5]; // enemy x position
el17arm 58:4a826093d9e9 248 double _ey[5]; // enemy y position
el17arm 58:4a826093d9e9 249 int _counter[5]; // enemy counter, counts pixels moved
el17arm 58:4a826093d9e9 250 int _distance[5];// distance enemy will travel before turning round
el17arm 36:203ec93b4cc7 251
el17arm 58:4a826093d9e9 252 double _bx[5]; // block x position array identifies each block individually
el17arm 58:4a826093d9e9 253 double _by[5]; // block y position array
el17arm 58:4a826093d9e9 254 bool _collision[5]; // collision indicator for each individual block
el17arm 44:e29458976114 255
el17arm 33:023f57d52b1c 256 };
el17arm 33:023f57d52b1c 257 #endif