My platformer project

Dependencies:   Finalproject N5110 mbed

Committer:
lion152
Date:
Fri May 05 15:00:33 2017 +0000
Revision:
0:5dd225e2621d
Finished in one go

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lion152 0:5dd225e2621d 1 #include "Character.h"
lion152 0:5dd225e2621d 2 #include "N5110.h"
lion152 0:5dd225e2621d 3 #include "mbed.h"
lion152 0:5dd225e2621d 4 #include "Enemy.h"
lion152 0:5dd225e2621d 5 //Serial pc(USBTX, USBRX);
lion152 0:5dd225e2621d 6
lion152 0:5dd225e2621d 7 //Constructor
lion152 0:5dd225e2621d 8 Character::Character(int x, int y)
lion152 0:5dd225e2621d 9 {
lion152 0:5dd225e2621d 10 this->x=x;
lion152 0:5dd225e2621d 11 this->y=y;
lion152 0:5dd225e2621d 12 width=8;
lion152 0:5dd225e2621d 13 height=10;
lion152 0:5dd225e2621d 14 force=0.0f;
lion152 0:5dd225e2621d 15 floatY=0.0f;
lion152 0:5dd225e2621d 16 }
lion152 0:5dd225e2621d 17
lion152 0:5dd225e2621d 18 //Destructor
lion152 0:5dd225e2621d 19 Character::~Character()
lion152 0:5dd225e2621d 20 {
lion152 0:5dd225e2621d 21
lion152 0:5dd225e2621d 22 }
lion152 0:5dd225e2621d 23
lion152 0:5dd225e2621d 24 //////////////DRAW - CHARACTER//////////////////////////////////////////////////
lion152 0:5dd225e2621d 25 /**
lion152 0:5dd225e2621d 26 @details Handles character drawing on the screen
lion152 0:5dd225e2621d 27 */
lion152 0:5dd225e2621d 28 void Character::draw(N5110 &lcd, int absoluteCoord, bool white )
lion152 0:5dd225e2621d 29 {
lion152 0:5dd225e2621d 30 white = !white;
lion152 0:5dd225e2621d 31 //pc.printf("%d\n",x);
lion152 0:5dd225e2621d 32 //pc.printf("%d\n",y);
lion152 0:5dd225e2621d 33 //head
lion152 0:5dd225e2621d 34 lcd.setPixel(x-absoluteCoord,y-9, white);
lion152 0:5dd225e2621d 35 lcd.setPixel(x+1-absoluteCoord,y-9, white);
lion152 0:5dd225e2621d 36 lcd.setPixel(x+2-absoluteCoord,y-9, white);
lion152 0:5dd225e2621d 37 lcd.setPixel(x+3-absoluteCoord,y-9, white);
lion152 0:5dd225e2621d 38 lcd.setPixel(x+4-absoluteCoord,y-9, white);
lion152 0:5dd225e2621d 39 lcd.setPixel(x+1-absoluteCoord,y-8, white);
lion152 0:5dd225e2621d 40 lcd.setPixel(x+2-absoluteCoord,y-8, white);
lion152 0:5dd225e2621d 41 lcd.setPixel(x+4-absoluteCoord,y-8, white);
lion152 0:5dd225e2621d 42 lcd.setPixel(x+2-absoluteCoord,y-7, white);
lion152 0:5dd225e2621d 43 lcd.setPixel(x+3-absoluteCoord,y-7, white);
lion152 0:5dd225e2621d 44 lcd.setPixel(x+4-absoluteCoord,y-7, white);
lion152 0:5dd225e2621d 45
lion152 0:5dd225e2621d 46 //body
lion152 0:5dd225e2621d 47 lcd.setPixel(x+1-absoluteCoord,y-6, white);
lion152 0:5dd225e2621d 48 lcd.setPixel(x+2-absoluteCoord,y-6, white);
lion152 0:5dd225e2621d 49 lcd.setPixel(x+3-absoluteCoord,y-6, white);
lion152 0:5dd225e2621d 50 lcd.setPixel(x+5-absoluteCoord,y-6, white);
lion152 0:5dd225e2621d 51 lcd.setPixel(x+6-absoluteCoord,y-6, white);
lion152 0:5dd225e2621d 52 lcd.setPixel(x+7-absoluteCoord,y-6, white);
lion152 0:5dd225e2621d 53 lcd.setPixel(x+1-absoluteCoord,y-5, white);
lion152 0:5dd225e2621d 54 lcd.setPixel(x+2-absoluteCoord,y-5, white);
lion152 0:5dd225e2621d 55 lcd.setPixel(x+3-absoluteCoord,y-5, white);
lion152 0:5dd225e2621d 56 lcd.setPixel(x+4-absoluteCoord,y-5, white);
lion152 0:5dd225e2621d 57 lcd.setPixel(x+5-absoluteCoord,y-5, white);
lion152 0:5dd225e2621d 58 lcd.setPixel(x+2-absoluteCoord,y-4, white);
lion152 0:5dd225e2621d 59 lcd.setPixel(x+3-absoluteCoord,y-4, white);
lion152 0:5dd225e2621d 60 lcd.setPixel(x+2-absoluteCoord,y-3, white);
lion152 0:5dd225e2621d 61 lcd.setPixel(x+3-absoluteCoord,y-3, white);
lion152 0:5dd225e2621d 62
lion152 0:5dd225e2621d 63 //legs
lion152 0:5dd225e2621d 64 lcd.setPixel(x+1-absoluteCoord,y-2, white);
lion152 0:5dd225e2621d 65 lcd.setPixel(x+4-absoluteCoord,y-2, white);
lion152 0:5dd225e2621d 66 lcd.setPixel(x+1-absoluteCoord,y-1, white);
lion152 0:5dd225e2621d 67 lcd.setPixel(x+4-absoluteCoord,y-1, white);
lion152 0:5dd225e2621d 68 lcd.setPixel(x+1-absoluteCoord,y, white);
lion152 0:5dd225e2621d 69 lcd.setPixel(x+2-absoluteCoord,y, white);
lion152 0:5dd225e2621d 70 lcd.setPixel(x+4-absoluteCoord,y, white);
lion152 0:5dd225e2621d 71 lcd.setPixel(x+5-absoluteCoord,y, white);
lion152 0:5dd225e2621d 72 }
lion152 0:5dd225e2621d 73 //////////////CHARACTERORENEMYDEATH - CHARACTER//////////////////////////////////////////////////
lion152 0:5dd225e2621d 74 /**
lion152 0:5dd225e2621d 75 @details function that decides does enemy or character dies
lion152 0:5dd225e2621d 76 */
lion152 0:5dd225e2621d 77 void Character::characterOrEnemyDeath(deque<Enemy*>* enemyMap)
lion152 0:5dd225e2621d 78 {
lion152 0:5dd225e2621d 79 if(force<0)
lion152 0:5dd225e2621d 80 {
lion152 0:5dd225e2621d 81 deque<Enemy*>::iterator it;
lion152 0:5dd225e2621d 82 //enemy death
lion152 0:5dd225e2621d 83 if((it = collisionEnemyS(enemyMap))!= enemyMap->end())
lion152 0:5dd225e2621d 84 {
lion152 0:5dd225e2621d 85 enemyMap->erase(it);
lion152 0:5dd225e2621d 86 force=0.73;
lion152 0:5dd225e2621d 87 }
lion152 0:5dd225e2621d 88 }
lion152 0:5dd225e2621d 89 //character death
lion152 0:5dd225e2621d 90 if(collisionEnemyW(enemyMap)||collisionEnemyE(enemyMap)||collisionEnemyN(enemyMap))
lion152 0:5dd225e2621d 91 {
lion152 0:5dd225e2621d 92 x=-20;
lion152 0:5dd225e2621d 93 y=48;
lion152 0:5dd225e2621d 94 }
lion152 0:5dd225e2621d 95 }
lion152 0:5dd225e2621d 96 //////////////RISE - CHARACTER//////////////////////////////////////////////////
lion152 0:5dd225e2621d 97 /**
lion152 0:5dd225e2621d 98 @details Function that handles character jumping and acceleration during jump
lion152 0:5dd225e2621d 99 */
lion152 0:5dd225e2621d 100 void Character::rise(deque<Platform*>* levelMap)
lion152 0:5dd225e2621d 101 {
lion152 0:5dd225e2621d 102 if (collisionPlatformN(levelMap))
lion152 0:5dd225e2621d 103 {
lion152 0:5dd225e2621d 104 //pc.printf("%d",y);
lion152 0:5dd225e2621d 105 force=-0.4f;
lion152 0:5dd225e2621d 106 }
lion152 0:5dd225e2621d 107 if(force>0.0f)
lion152 0:5dd225e2621d 108 {
lion152 0:5dd225e2621d 109 floatY-=force;
lion152 0:5dd225e2621d 110 force-=0.11f;
lion152 0:5dd225e2621d 111 y=floor(floatY+0.5f);
lion152 0:5dd225e2621d 112 }
lion152 0:5dd225e2621d 113 }
lion152 0:5dd225e2621d 114
lion152 0:5dd225e2621d 115 //////////////FALL - CHARACTER//////////////////////////////////////////////////
lion152 0:5dd225e2621d 116 /**
lion152 0:5dd225e2621d 117 @details Function that handles character falling after the jump
lion152 0:5dd225e2621d 118 */
lion152 0:5dd225e2621d 119 void Character::fall(deque<Platform*>* levelMap)
lion152 0:5dd225e2621d 120 {
lion152 0:5dd225e2621d 121 if (collisionPlatformS(levelMap))
lion152 0:5dd225e2621d 122 {
lion152 0:5dd225e2621d 123 force=0.0f;
lion152 0:5dd225e2621d 124 }
lion152 0:5dd225e2621d 125 if(force<0.0f)
lion152 0:5dd225e2621d 126 {
lion152 0:5dd225e2621d 127 floatY-=force;
lion152 0:5dd225e2621d 128 if(force>-1)
lion152 0:5dd225e2621d 129 {
lion152 0:5dd225e2621d 130 force-=0.11f;
lion152 0:5dd225e2621d 131 }
lion152 0:5dd225e2621d 132 y=floor(floatY+0.5f);
lion152 0:5dd225e2621d 133 }
lion152 0:5dd225e2621d 134 }
lion152 0:5dd225e2621d 135
lion152 0:5dd225e2621d 136 //////////////RISE - CHARACTER//////////////////////////////////////////////////
lion152 0:5dd225e2621d 137 /**
lion152 0:5dd225e2621d 138 @details Function that handles character movement
lion152 0:5dd225e2621d 139 *in addition it increases absolute coordinate of the screen
lion152 0:5dd225e2621d 140 */
lion152 0:5dd225e2621d 141 void Character::movement(Direction d, int* absoluteCoord, deque<Platform*>* levelMap, deque<Enemy*>* enemyMap)
lion152 0:5dd225e2621d 142 {
lion152 0:5dd225e2621d 143 //pc.printf("%d\n",*absoluteCoord);
lion152 0:5dd225e2621d 144 //pc.printf("move right \n");
lion152 0:5dd225e2621d 145 if ((d==E)||(d==NE))
lion152 0:5dd225e2621d 146 {
lion152 0:5dd225e2621d 147 //pc.printf("move right \n");
lion152 0:5dd225e2621d 148 if (!collisionPlatformE(levelMap))
lion152 0:5dd225e2621d 149 {
lion152 0:5dd225e2621d 150 x++;
lion152 0:5dd225e2621d 151 if((x-(*absoluteCoord))>(28-width/2))
lion152 0:5dd225e2621d 152 {
lion152 0:5dd225e2621d 153 (*absoluteCoord)++;
lion152 0:5dd225e2621d 154 //pc.printf("%d\n", (*absoluteCoord));
lion152 0:5dd225e2621d 155 }
lion152 0:5dd225e2621d 156 }
lion152 0:5dd225e2621d 157 }
lion152 0:5dd225e2621d 158 else if (((d==W)||(d==NW))&&((x-*absoluteCoord)>0))
lion152 0:5dd225e2621d 159 {
lion152 0:5dd225e2621d 160 if (!collisionPlatformW(levelMap))
lion152 0:5dd225e2621d 161 {
lion152 0:5dd225e2621d 162 x--;
lion152 0:5dd225e2621d 163 }
lion152 0:5dd225e2621d 164 }
lion152 0:5dd225e2621d 165 if(force==0.0f)
lion152 0:5dd225e2621d 166 {
lion152 0:5dd225e2621d 167 if ((d==NW)||(d==N)||(d==NE))
lion152 0:5dd225e2621d 168 {
lion152 0:5dd225e2621d 169 force=1.5f;
lion152 0:5dd225e2621d 170 floatY=y;
lion152 0:5dd225e2621d 171 }
lion152 0:5dd225e2621d 172 }
lion152 0:5dd225e2621d 173 noPlatformFall(levelMap);
lion152 0:5dd225e2621d 174 rise(levelMap);
lion152 0:5dd225e2621d 175 fall(levelMap);
lion152 0:5dd225e2621d 176 characterOrEnemyDeath(enemyMap);
lion152 0:5dd225e2621d 177 }
lion152 0:5dd225e2621d 178
lion152 0:5dd225e2621d 179 //////////////NOPLATFORMFALL - CHARACTER//////////////////////////////////////////////////
lion152 0:5dd225e2621d 180 /**
lion152 0:5dd225e2621d 181 @details implements falling donw when character walks off the platform
lion152 0:5dd225e2621d 182 */
lion152 0:5dd225e2621d 183 void Character::noPlatformFall(deque<Platform*>* levelMap)
lion152 0:5dd225e2621d 184 {
lion152 0:5dd225e2621d 185 if((!collisionPlatformS(levelMap)) && (force==0.0f))
lion152 0:5dd225e2621d 186 {
lion152 0:5dd225e2621d 187 force=-0.04f;
lion152 0:5dd225e2621d 188 floatY=y;
lion152 0:5dd225e2621d 189 }
lion152 0:5dd225e2621d 190 }
lion152 0:5dd225e2621d 191
lion152 0:5dd225e2621d 192 //////////////COLLISIONPLATFORME - CHARACTER//////////////////////////////////////////////////
lion152 0:5dd225e2621d 193 /**
lion152 0:5dd225e2621d 194 @details Function that checks collision to the right of the character with each platform
lion152 0:5dd225e2621d 195 */
lion152 0:5dd225e2621d 196 bool Character::collisionPlatformE(deque<Platform*>* levelMap)
lion152 0:5dd225e2621d 197 {
lion152 0:5dd225e2621d 198 for(deque<Platform*>::iterator it=levelMap->begin(); it !=levelMap->end();)
lion152 0:5dd225e2621d 199 {
lion152 0:5dd225e2621d 200 Platform* p=*it;
lion152 0:5dd225e2621d 201 if (collisionLeftUpE(*p))
lion152 0:5dd225e2621d 202 {
lion152 0:5dd225e2621d 203 return true;
lion152 0:5dd225e2621d 204 }
lion152 0:5dd225e2621d 205 it++;
lion152 0:5dd225e2621d 206 }
lion152 0:5dd225e2621d 207 return false;
lion152 0:5dd225e2621d 208 }
lion152 0:5dd225e2621d 209
lion152 0:5dd225e2621d 210 //////////////COLLISIONPLATFORMW - CHARACTER//////////////////////////////////////////////////
lion152 0:5dd225e2621d 211 /**
lion152 0:5dd225e2621d 212 @details Function that checks collision to the left of the character with each platform
lion152 0:5dd225e2621d 213 */
lion152 0:5dd225e2621d 214 bool Character::collisionPlatformW(deque<Platform*>* levelMap)
lion152 0:5dd225e2621d 215 {
lion152 0:5dd225e2621d 216 for(deque<Platform*>::iterator it=levelMap->begin(); it !=levelMap->end();)
lion152 0:5dd225e2621d 217 {
lion152 0:5dd225e2621d 218 Platform* p=*it;
lion152 0:5dd225e2621d 219 if (collisionLeftUpW(*p))
lion152 0:5dd225e2621d 220 {
lion152 0:5dd225e2621d 221 return true;
lion152 0:5dd225e2621d 222 }
lion152 0:5dd225e2621d 223 it++;
lion152 0:5dd225e2621d 224 }
lion152 0:5dd225e2621d 225 return false;
lion152 0:5dd225e2621d 226 }
lion152 0:5dd225e2621d 227
lion152 0:5dd225e2621d 228 //////////////COLLISIONPLATFORMS - CHARACTER//////////////////////////////////////////////////
lion152 0:5dd225e2621d 229 /**
lion152 0:5dd225e2621d 230 @details Function that checks collision bellow the character with each platform
lion152 0:5dd225e2621d 231 */
lion152 0:5dd225e2621d 232 bool Character::collisionPlatformS(deque<Platform*>* levelMap)
lion152 0:5dd225e2621d 233 {
lion152 0:5dd225e2621d 234 for(deque<Platform*>::iterator it=levelMap->begin(); it !=levelMap->end();)
lion152 0:5dd225e2621d 235 {
lion152 0:5dd225e2621d 236 Platform* p=*it;
lion152 0:5dd225e2621d 237 if (collisionLeftUpS(*p))
lion152 0:5dd225e2621d 238 {
lion152 0:5dd225e2621d 239 //pc.printf("ychar - %d\n", y);
lion152 0:5dd225e2621d 240 //pc.printf("y-heightplatf - %d", p->getY() - p->getHeight());
lion152 0:5dd225e2621d 241 return true;
lion152 0:5dd225e2621d 242 }
lion152 0:5dd225e2621d 243 it++;
lion152 0:5dd225e2621d 244 }
lion152 0:5dd225e2621d 245 return false;
lion152 0:5dd225e2621d 246 }
lion152 0:5dd225e2621d 247
lion152 0:5dd225e2621d 248 //////////////COLLISIONPLATFORMN - CHARACTER//////////////////////////////////////////////////
lion152 0:5dd225e2621d 249 /**
lion152 0:5dd225e2621d 250 @details Function that checks collision above the character with each platform
lion152 0:5dd225e2621d 251 */
lion152 0:5dd225e2621d 252 bool Character::collisionPlatformN(deque<Platform*>* levelMap)
lion152 0:5dd225e2621d 253 {
lion152 0:5dd225e2621d 254 for(deque<Platform*>::iterator it=levelMap->begin(); it !=levelMap->end();)
lion152 0:5dd225e2621d 255 {
lion152 0:5dd225e2621d 256 Platform* p=*it;
lion152 0:5dd225e2621d 257 if (collisionLeftUpN(*p))
lion152 0:5dd225e2621d 258 {
lion152 0:5dd225e2621d 259 return true;
lion152 0:5dd225e2621d 260 }
lion152 0:5dd225e2621d 261 it++;
lion152 0:5dd225e2621d 262 }
lion152 0:5dd225e2621d 263 return false;
lion152 0:5dd225e2621d 264 }
lion152 0:5dd225e2621d 265
lion152 0:5dd225e2621d 266 //////////////COLLISIONENEMYE - CHARACTER//////////////////////////////////////////////////
lion152 0:5dd225e2621d 267 /**
lion152 0:5dd225e2621d 268 @details Function that checks collision to the right of the character with each enemy
lion152 0:5dd225e2621d 269 */
lion152 0:5dd225e2621d 270 bool Character::collisionEnemyE(deque<Enemy*>* enemyMap)
lion152 0:5dd225e2621d 271 {
lion152 0:5dd225e2621d 272 for(deque<Enemy*>::iterator it=enemyMap->begin(); it !=enemyMap->end();)
lion152 0:5dd225e2621d 273 {
lion152 0:5dd225e2621d 274 Enemy* e=*it;
lion152 0:5dd225e2621d 275 if (touchLeftDownE(*e))
lion152 0:5dd225e2621d 276 {
lion152 0:5dd225e2621d 277 return true;
lion152 0:5dd225e2621d 278 }
lion152 0:5dd225e2621d 279 it++;
lion152 0:5dd225e2621d 280 }
lion152 0:5dd225e2621d 281 return false;
lion152 0:5dd225e2621d 282 }
lion152 0:5dd225e2621d 283
lion152 0:5dd225e2621d 284 //////////////COLLISIONENEMYW - CHARACTER//////////////////////////////////////////////////
lion152 0:5dd225e2621d 285 /**
lion152 0:5dd225e2621d 286 @details Function that checks collision to the left of the character with each enemy
lion152 0:5dd225e2621d 287 */
lion152 0:5dd225e2621d 288 bool Character::collisionEnemyW(deque<Enemy*>* enemyMap)
lion152 0:5dd225e2621d 289 {
lion152 0:5dd225e2621d 290 for(deque<Enemy*>::iterator it=enemyMap->begin(); it !=enemyMap->end();)
lion152 0:5dd225e2621d 291 {
lion152 0:5dd225e2621d 292 Enemy* e=*it;
lion152 0:5dd225e2621d 293 if (touchLeftDownW(*e))
lion152 0:5dd225e2621d 294 {
lion152 0:5dd225e2621d 295 return true;
lion152 0:5dd225e2621d 296 }
lion152 0:5dd225e2621d 297 it++;
lion152 0:5dd225e2621d 298 }
lion152 0:5dd225e2621d 299 return false;
lion152 0:5dd225e2621d 300 }
lion152 0:5dd225e2621d 301
lion152 0:5dd225e2621d 302 //////////////COLLISIONENEMYS - CHARACTER//////////////////////////////////////////////////
lion152 0:5dd225e2621d 303 /**
lion152 0:5dd225e2621d 304 @details Function that checks collision bellow the character with each enemy
lion152 0:5dd225e2621d 305 */
lion152 0:5dd225e2621d 306 deque<Enemy*>::iterator Character::collisionEnemyS(deque<Enemy*>* enemyMap)
lion152 0:5dd225e2621d 307 {
lion152 0:5dd225e2621d 308 for(deque<Enemy*>::iterator it=enemyMap->begin(); it !=enemyMap->end();)
lion152 0:5dd225e2621d 309 {
lion152 0:5dd225e2621d 310 Enemy* e=*it;
lion152 0:5dd225e2621d 311 if (touchLeftDownS(*e))
lion152 0:5dd225e2621d 312 {
lion152 0:5dd225e2621d 313 return it;
lion152 0:5dd225e2621d 314 }
lion152 0:5dd225e2621d 315 it++;
lion152 0:5dd225e2621d 316 }
lion152 0:5dd225e2621d 317 return enemyMap->end();
lion152 0:5dd225e2621d 318 }
lion152 0:5dd225e2621d 319
lion152 0:5dd225e2621d 320 //////////////COLLISIONENEMYN - CHARACTER//////////////////////////////////////////////////
lion152 0:5dd225e2621d 321 /**
lion152 0:5dd225e2621d 322 @details Function that checks collision above the character with each enemy
lion152 0:5dd225e2621d 323 */
lion152 0:5dd225e2621d 324 bool Character::collisionEnemyN(deque<Enemy*>* enemyMap)
lion152 0:5dd225e2621d 325 {
lion152 0:5dd225e2621d 326 for(deque<Enemy*>::iterator it=enemyMap->begin(); it !=enemyMap->end();)
lion152 0:5dd225e2621d 327 {
lion152 0:5dd225e2621d 328 Enemy* e=*it;
lion152 0:5dd225e2621d 329 if (touchLeftDownN(*e))
lion152 0:5dd225e2621d 330 {
lion152 0:5dd225e2621d 331 return true;
lion152 0:5dd225e2621d 332 }
lion152 0:5dd225e2621d 333 it++;
lion152 0:5dd225e2621d 334 }
lion152 0:5dd225e2621d 335 return false;
lion152 0:5dd225e2621d 336 }