Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Sprites/Sprites.h@59:d82d49a7a4d4, 2019-05-07 (annotated)
- 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?
User | Revision | Line number | New 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 |