My platformer project
Dependencies: Finalproject N5110 mbed
main.cpp@0:5dd225e2621d, 2017-05-05 (annotated)
- Committer:
- lion152
- Date:
- Fri May 05 15:00:33 2017 +0000
- Revision:
- 0:5dd225e2621d
Finished in one go
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lion152 | 0:5dd225e2621d | 1 | #include "mbed.h" |
lion152 | 0:5dd225e2621d | 2 | #include "Gamepad.h" |
lion152 | 0:5dd225e2621d | 3 | #include "N5110.h" |
lion152 | 0:5dd225e2621d | 4 | #include <deque> |
lion152 | 0:5dd225e2621d | 5 | #include "Platform.h" |
lion152 | 0:5dd225e2621d | 6 | #include "Map.h" |
lion152 | 0:5dd225e2621d | 7 | #include "Character.h" |
lion152 | 0:5dd225e2621d | 8 | #include "Enemy.h" |
lion152 | 0:5dd225e2621d | 9 | |
lion152 | 0:5dd225e2621d | 10 | //Serial pc(USBTX, USBRX); |
lion152 | 0:5dd225e2621d | 11 | |
lion152 | 0:5dd225e2621d | 12 | //create lcd object |
lion152 | 0:5dd225e2621d | 13 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
lion152 | 0:5dd225e2621d | 14 | //create gamepad object |
lion152 | 0:5dd225e2621d | 15 | Gamepad pad; |
lion152 | 0:5dd225e2621d | 16 | |
lion152 | 0:5dd225e2621d | 17 | //create timer object |
lion152 | 0:5dd225e2621d | 18 | Timer t; |
lion152 | 0:5dd225e2621d | 19 | |
lion152 | 0:5dd225e2621d | 20 | // booleans for win/loose/start conditions |
lion152 | 0:5dd225e2621d | 21 | bool win = false; |
lion152 | 0:5dd225e2621d | 22 | bool loose = false; |
lion152 | 0:5dd225e2621d | 23 | bool start = false; |
lion152 | 0:5dd225e2621d | 24 | |
lion152 | 0:5dd225e2621d | 25 | //function to initialise everything needed |
lion152 | 0:5dd225e2621d | 26 | void init() |
lion152 | 0:5dd225e2621d | 27 | { |
lion152 | 0:5dd225e2621d | 28 | //Initialise gamepad and LCD |
lion152 | 0:5dd225e2621d | 29 | lcd.init(); |
lion152 | 0:5dd225e2621d | 30 | pad.init(); |
lion152 | 0:5dd225e2621d | 31 | } |
lion152 | 0:5dd225e2621d | 32 | |
lion152 | 0:5dd225e2621d | 33 | //function that displays welcoming screen |
lion152 | 0:5dd225e2621d | 34 | void welcome() |
lion152 | 0:5dd225e2621d | 35 | { |
lion152 | 0:5dd225e2621d | 36 | lcd.printString("Welcome",20,1); |
lion152 | 0:5dd225e2621d | 37 | lcd.refresh(); |
lion152 | 0:5dd225e2621d | 38 | pad.leds_on(); |
lion152 | 0:5dd225e2621d | 39 | wait(2.0); |
lion152 | 0:5dd225e2621d | 40 | lcd.clear(); |
lion152 | 0:5dd225e2621d | 41 | } |
lion152 | 0:5dd225e2621d | 42 | |
lion152 | 0:5dd225e2621d | 43 | //function that displays press start |
lion152 | 0:5dd225e2621d | 44 | void pressStart() |
lion152 | 0:5dd225e2621d | 45 | { |
lion152 | 0:5dd225e2621d | 46 | lcd.printString("Press start",10,1); |
lion152 | 0:5dd225e2621d | 47 | lcd.printString("to begin",15,3); |
lion152 | 0:5dd225e2621d | 48 | lcd.refresh(); |
lion152 | 0:5dd225e2621d | 49 | pad.leds_off(); |
lion152 | 0:5dd225e2621d | 50 | } |
lion152 | 0:5dd225e2621d | 51 | |
lion152 | 0:5dd225e2621d | 52 | //function that displays game over screen |
lion152 | 0:5dd225e2621d | 53 | void gameOver() |
lion152 | 0:5dd225e2621d | 54 | { |
lion152 | 0:5dd225e2621d | 55 | lcd.printString("Game Over",17,1); |
lion152 | 0:5dd225e2621d | 56 | lcd.refresh(); |
lion152 | 0:5dd225e2621d | 57 | wait(1.0); |
lion152 | 0:5dd225e2621d | 58 | lcd.clear(); |
lion152 | 0:5dd225e2621d | 59 | } |
lion152 | 0:5dd225e2621d | 60 | |
lion152 | 0:5dd225e2621d | 61 | //function do display win screen |
lion152 | 0:5dd225e2621d | 62 | void winner() |
lion152 | 0:5dd225e2621d | 63 | { |
lion152 | 0:5dd225e2621d | 64 | lcd.printString("You Won",20,1); |
lion152 | 0:5dd225e2621d | 65 | lcd.refresh(); |
lion152 | 0:5dd225e2621d | 66 | wait(4.0); |
lion152 | 0:5dd225e2621d | 67 | lcd.clear(); |
lion152 | 0:5dd225e2621d | 68 | } |
lion152 | 0:5dd225e2621d | 69 | |
lion152 | 0:5dd225e2621d | 70 | // function to create platform list |
lion152 | 0:5dd225e2621d | 71 | deque<Platform*>* createLevel() |
lion152 | 0:5dd225e2621d | 72 | { |
lion152 | 0:5dd225e2621d | 73 | //declare new queue named levelMap |
lion152 | 0:5dd225e2621d | 74 | deque <Platform*>* levelMap = new deque<Platform*>; |
lion152 | 0:5dd225e2621d | 75 | //create new platform |
lion152 | 0:5dd225e2621d | 76 | Platform* p = new Platform(0,44,30,3,FILL_BLACK); |
lion152 | 0:5dd225e2621d | 77 | //insert new platofrm into queue |
lion152 | 0:5dd225e2621d | 78 | levelMap->push_back(p); |
lion152 | 0:5dd225e2621d | 79 | //create new platform |
lion152 | 0:5dd225e2621d | 80 | //p = new Platform(40,37,10,3,FILL_BLACK); |
lion152 | 0:5dd225e2621d | 81 | //insert new platofrm into queue |
lion152 | 0:5dd225e2621d | 82 | //levelMap->push_back(p); |
lion152 | 0:5dd225e2621d | 83 | //create new platform |
lion152 | 0:5dd225e2621d | 84 | p = new Platform(40,35,10,3,FILL_BLACK); |
lion152 | 0:5dd225e2621d | 85 | //insert new platofrm into queue |
lion152 | 0:5dd225e2621d | 86 | levelMap->push_back(p); |
lion152 | 0:5dd225e2621d | 87 | p = new Platform(70,44,40,3,FILL_BLACK); |
lion152 | 0:5dd225e2621d | 88 | //insert new platofrm into queue |
lion152 | 0:5dd225e2621d | 89 | levelMap->push_back(p); |
lion152 | 0:5dd225e2621d | 90 | p = new Platform(70,41,3,3,FILL_BLACK); |
lion152 | 0:5dd225e2621d | 91 | levelMap->push_back(p); |
lion152 | 0:5dd225e2621d | 92 | p = new Platform(130,44,50,3,FILL_BLACK); |
lion152 | 0:5dd225e2621d | 93 | levelMap->push_back(p); |
lion152 | 0:5dd225e2621d | 94 | p = new Platform(130,41,3,3,FILL_BLACK); |
lion152 | 0:5dd225e2621d | 95 | levelMap->push_back(p); |
lion152 | 0:5dd225e2621d | 96 | p = new Platform(177,41,3,3,FILL_BLACK); |
lion152 | 0:5dd225e2621d | 97 | levelMap->push_back(p); |
lion152 | 0:5dd225e2621d | 98 | p = new Platform(190,30,10,3,FILL_BLACK); |
lion152 | 0:5dd225e2621d | 99 | levelMap->push_back(p); |
lion152 | 0:5dd225e2621d | 100 | p = new Platform(230,44,30,3,FILL_BLACK); |
lion152 | 0:5dd225e2621d | 101 | levelMap->push_back(p); |
lion152 | 0:5dd225e2621d | 102 | p = new Platform(260,35,20,3,FILL_BLACK); |
lion152 | 0:5dd225e2621d | 103 | levelMap->push_back(p); |
lion152 | 0:5dd225e2621d | 104 | p = new Platform(290,25,20,3,FILL_BLACK); |
lion152 | 0:5dd225e2621d | 105 | levelMap->push_back(p); |
lion152 | 0:5dd225e2621d | 106 | p = new Platform(230,41,3,3,FILL_BLACK); |
lion152 | 0:5dd225e2621d | 107 | levelMap->push_back(p); |
lion152 | 0:5dd225e2621d | 108 | |
lion152 | 0:5dd225e2621d | 109 | return levelMap; |
lion152 | 0:5dd225e2621d | 110 | } |
lion152 | 0:5dd225e2621d | 111 | |
lion152 | 0:5dd225e2621d | 112 | // function to create enemy list |
lion152 | 0:5dd225e2621d | 113 | deque<Enemy*>* createEnemies() |
lion152 | 0:5dd225e2621d | 114 | { |
lion152 | 0:5dd225e2621d | 115 | //declare new queue named enemyMap |
lion152 | 0:5dd225e2621d | 116 | deque <Enemy*>* enemyMap = new deque<Enemy*>; |
lion152 | 0:5dd225e2621d | 117 | //create new enemy |
lion152 | 0:5dd225e2621d | 118 | Enemy* e = new Enemy(105,43); |
lion152 | 0:5dd225e2621d | 119 | //insert new enemy into queue |
lion152 | 0:5dd225e2621d | 120 | enemyMap->push_back(e); |
lion152 | 0:5dd225e2621d | 121 | //create new enemy |
lion152 | 0:5dd225e2621d | 122 | e = new Enemy(140,43); |
lion152 | 0:5dd225e2621d | 123 | //insert new enemy into queue |
lion152 | 0:5dd225e2621d | 124 | enemyMap->push_back(e); |
lion152 | 0:5dd225e2621d | 125 | e = new Enemy(250,43); |
lion152 | 0:5dd225e2621d | 126 | enemyMap->push_back(e); |
lion152 | 0:5dd225e2621d | 127 | e = new Enemy(270,43); |
lion152 | 0:5dd225e2621d | 128 | enemyMap->push_back(e); |
lion152 | 0:5dd225e2621d | 129 | e = new Enemy(30,43); |
lion152 | 0:5dd225e2621d | 130 | enemyMap->push_back(e); |
lion152 | 0:5dd225e2621d | 131 | |
lion152 | 0:5dd225e2621d | 132 | return enemyMap; |
lion152 | 0:5dd225e2621d | 133 | } |
lion152 | 0:5dd225e2621d | 134 | |
lion152 | 0:5dd225e2621d | 135 | int main() |
lion152 | 0:5dd225e2621d | 136 | { |
lion152 | 0:5dd225e2621d | 137 | init(); |
lion152 | 0:5dd225e2621d | 138 | //clear lcd |
lion152 | 0:5dd225e2621d | 139 | lcd.clear(); |
lion152 | 0:5dd225e2621d | 140 | Direction d; |
lion152 | 0:5dd225e2621d | 141 | int lastAction=-50; |
lion152 | 0:5dd225e2621d | 142 | int monsterMove=-100; |
lion152 | 0:5dd225e2621d | 143 | //reset timer |
lion152 | 0:5dd225e2621d | 144 | t.reset(); |
lion152 | 0:5dd225e2621d | 145 | //start timer |
lion152 | 0:5dd225e2621d | 146 | t.start(); |
lion152 | 0:5dd225e2621d | 147 | //welcome screen |
lion152 | 0:5dd225e2621d | 148 | welcome(); |
lion152 | 0:5dd225e2621d | 149 | while(true) |
lion152 | 0:5dd225e2621d | 150 | { |
lion152 | 0:5dd225e2621d | 151 | pressStart(); |
lion152 | 0:5dd225e2621d | 152 | while(!start) |
lion152 | 0:5dd225e2621d | 153 | { |
lion152 | 0:5dd225e2621d | 154 | if(pad.check_event(pad.START_PRESSED)) |
lion152 | 0:5dd225e2621d | 155 | { |
lion152 | 0:5dd225e2621d | 156 | start=true; |
lion152 | 0:5dd225e2621d | 157 | } |
lion152 | 0:5dd225e2621d | 158 | } |
lion152 | 0:5dd225e2621d | 159 | //create map object |
lion152 | 0:5dd225e2621d | 160 | Map map1(createLevel(), createEnemies(), new Character(5,40)); |
lion152 | 0:5dd225e2621d | 161 | start=false; |
lion152 | 0:5dd225e2621d | 162 | //clear lcd |
lion152 | 0:5dd225e2621d | 163 | lcd.clear(); |
lion152 | 0:5dd225e2621d | 164 | //draw buffer to screen |
lion152 | 0:5dd225e2621d | 165 | lcd.refresh(); |
lion152 | 0:5dd225e2621d | 166 | |
lion152 | 0:5dd225e2621d | 167 | //game loop |
lion152 | 0:5dd225e2621d | 168 | while(!win && !loose) |
lion152 | 0:5dd225e2621d | 169 | { |
lion152 | 0:5dd225e2621d | 170 | if((t.read_ms()-lastAction)>50) |
lion152 | 0:5dd225e2621d | 171 | { |
lion152 | 0:5dd225e2621d | 172 | lastAction=t.read_ms(); |
lion152 | 0:5dd225e2621d | 173 | //get direction from joystick |
lion152 | 0:5dd225e2621d | 174 | d = pad.get_direction(); |
lion152 | 0:5dd225e2621d | 175 | //draw map |
lion152 | 0:5dd225e2621d | 176 | map1.draw(lcd, true); |
lion152 | 0:5dd225e2621d | 177 | //if((t.read_ms()-monsterMove)>100) |
lion152 | 0:5dd225e2621d | 178 | //{ |
lion152 | 0:5dd225e2621d | 179 | monsterMove=t.read_ms(); |
lion152 | 0:5dd225e2621d | 180 | //move all enemies |
lion152 | 0:5dd225e2621d | 181 | map1.moveEnemies(); |
lion152 | 0:5dd225e2621d | 182 | //} |
lion152 | 0:5dd225e2621d | 183 | //mov and draw characters |
lion152 | 0:5dd225e2621d | 184 | map1.getCharacter()->movement(d, map1.getAbsoluteCoord(), map1.getLevelMap(), map1.getEnemyMap()); |
lion152 | 0:5dd225e2621d | 185 | //loosing condition |
lion152 | 0:5dd225e2621d | 186 | if ((map1.getCharacter()->getY()>47) || pad.check_event(pad.BACK_PRESSED)) |
lion152 | 0:5dd225e2621d | 187 | { |
lion152 | 0:5dd225e2621d | 188 | loose=true; |
lion152 | 0:5dd225e2621d | 189 | wait(0.3); |
lion152 | 0:5dd225e2621d | 190 | } |
lion152 | 0:5dd225e2621d | 191 | //clear map |
lion152 | 0:5dd225e2621d | 192 | else |
lion152 | 0:5dd225e2621d | 193 | { |
lion152 | 0:5dd225e2621d | 194 | map1.draw(lcd, false); |
lion152 | 0:5dd225e2621d | 195 | } |
lion152 | 0:5dd225e2621d | 196 | //wining condition |
lion152 | 0:5dd225e2621d | 197 | if (map1.getCharacter()->getX()==300) |
lion152 | 0:5dd225e2621d | 198 | { |
lion152 | 0:5dd225e2621d | 199 | win=true; |
lion152 | 0:5dd225e2621d | 200 | } |
lion152 | 0:5dd225e2621d | 201 | //refresh screen |
lion152 | 0:5dd225e2621d | 202 | lcd.refresh(); |
lion152 | 0:5dd225e2621d | 203 | } |
lion152 | 0:5dd225e2621d | 204 | } |
lion152 | 0:5dd225e2621d | 205 | lcd.clear(); |
lion152 | 0:5dd225e2621d | 206 | lcd.refresh(); |
lion152 | 0:5dd225e2621d | 207 | //display loosing screen |
lion152 | 0:5dd225e2621d | 208 | if (loose) |
lion152 | 0:5dd225e2621d | 209 | { |
lion152 | 0:5dd225e2621d | 210 | gameOver(); |
lion152 | 0:5dd225e2621d | 211 | } |
lion152 | 0:5dd225e2621d | 212 | //display wining screen |
lion152 | 0:5dd225e2621d | 213 | else |
lion152 | 0:5dd225e2621d | 214 | { |
lion152 | 0:5dd225e2621d | 215 | winner(); |
lion152 | 0:5dd225e2621d | 216 | } |
lion152 | 0:5dd225e2621d | 217 | //reset booleans |
lion152 | 0:5dd225e2621d | 218 | win=false; |
lion152 | 0:5dd225e2621d | 219 | loose=false; |
lion152 | 0:5dd225e2621d | 220 | } |
lion152 | 0:5dd225e2621d | 221 | } |