Stick_Runner
Dependencies: FXOS8700CQ Gamepad N5110 SDFileSystem mbed
main.cpp@0:12cfe63faa6a, 2017-04-28 (annotated)
- Committer:
- el15ss
- Date:
- Fri Apr 28 09:00:21 2017 +0000
- Revision:
- 0:12cfe63faa6a
- Child:
- 1:db9ff66f67c8
Version1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el15ss | 0:12cfe63faa6a | 1 | ///////// pre-processor directives //////// |
el15ss | 0:12cfe63faa6a | 2 | #include "mbed.h" |
el15ss | 0:12cfe63faa6a | 3 | #include "Gamepad.h" |
el15ss | 0:12cfe63faa6a | 4 | #include "N5110.h" |
el15ss | 0:12cfe63faa6a | 5 | #include "Character.h" |
el15ss | 0:12cfe63faa6a | 6 | #include "Obstacles.h" |
el15ss | 0:12cfe63faa6a | 7 | #include "Gems.h" |
el15ss | 0:12cfe63faa6a | 8 | #include <iostream> |
el15ss | 0:12cfe63faa6a | 9 | |
el15ss | 0:12cfe63faa6a | 10 | #define OBS 8 |
el15ss | 0:12cfe63faa6a | 11 | #define GEMS 4 |
el15ss | 0:12cfe63faa6a | 12 | |
el15ss | 0:12cfe63faa6a | 13 | int i,j; |
el15ss | 0:12cfe63faa6a | 14 | |
el15ss | 0:12cfe63faa6a | 15 | /////////////// structs ///////////////// |
el15ss | 0:12cfe63faa6a | 16 | struct UserInput { |
el15ss | 0:12cfe63faa6a | 17 | Direction d; |
el15ss | 0:12cfe63faa6a | 18 | float mag; |
el15ss | 0:12cfe63faa6a | 19 | }; |
el15ss | 0:12cfe63faa6a | 20 | /////////////// objects /////////////// |
el15ss | 0:12cfe63faa6a | 21 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
el15ss | 0:12cfe63faa6a | 22 | Gamepad pad; |
el15ss | 0:12cfe63faa6a | 23 | Character c; |
el15ss | 0:12cfe63faa6a | 24 | Obstacles obstacle[OBS]; |
el15ss | 0:12cfe63faa6a | 25 | Gems gems[GEMS]; |
el15ss | 0:12cfe63faa6a | 26 | |
el15ss | 0:12cfe63faa6a | 27 | |
el15ss | 0:12cfe63faa6a | 28 | |
el15ss | 0:12cfe63faa6a | 29 | ///////////// prototypes /////////////// |
el15ss | 0:12cfe63faa6a | 30 | void init(); |
el15ss | 0:12cfe63faa6a | 31 | void update_game(UserInput input); |
el15ss | 0:12cfe63faa6a | 32 | void render(); |
el15ss | 0:12cfe63faa6a | 33 | void welcome(); |
el15ss | 0:12cfe63faa6a | 34 | void menu(); |
el15ss | 0:12cfe63faa6a | 35 | void over(); |
el15ss | 0:12cfe63faa6a | 36 | void Instructions(); |
el15ss | 0:12cfe63faa6a | 37 | ///////////// functions //////////////// |
el15ss | 0:12cfe63faa6a | 38 | int main() |
el15ss | 0:12cfe63faa6a | 39 | { |
el15ss | 0:12cfe63faa6a | 40 | int fps = 8; // frames per second |
el15ss | 0:12cfe63faa6a | 41 | |
el15ss | 0:12cfe63faa6a | 42 | init(); |
el15ss | 0:12cfe63faa6a | 43 | welcome(); |
el15ss | 0:12cfe63faa6a | 44 | wait(1.0f/fps); |
el15ss | 0:12cfe63faa6a | 45 | |
el15ss | 0:12cfe63faa6a | 46 | |
el15ss | 0:12cfe63faa6a | 47 | |
el15ss | 0:12cfe63faa6a | 48 | render(); // draw initial frame |
el15ss | 0:12cfe63faa6a | 49 | wait(1.0f/fps); |
el15ss | 0:12cfe63faa6a | 50 | |
el15ss | 0:12cfe63faa6a | 51 | // game loop - read input, update the game state and render the display |
el15ss | 0:12cfe63faa6a | 52 | while (1) { |
el15ss | 0:12cfe63faa6a | 53 | |
el15ss | 0:12cfe63faa6a | 54 | |
el15ss | 0:12cfe63faa6a | 55 | |
el15ss | 0:12cfe63faa6a | 56 | c.update(pad.get_direction(),pad.get_mag()); |
el15ss | 0:12cfe63faa6a | 57 | if(pad.check_event(Gamepad::BACK_PRESSED)) |
el15ss | 0:12cfe63faa6a | 58 | { |
el15ss | 0:12cfe63faa6a | 59 | lcd.clear(); |
el15ss | 0:12cfe63faa6a | 60 | lcd.refresh(); |
el15ss | 0:12cfe63faa6a | 61 | //lcd.printString(" Game Paused! ",0,1); |
el15ss | 0:12cfe63faa6a | 62 | //lcd.printString("Press Start to continue ",0,4); |
el15ss | 0:12cfe63faa6a | 63 | //lcd.refresh(); |
el15ss | 0:12cfe63faa6a | 64 | // welcome(); |
el15ss | 0:12cfe63faa6a | 65 | menu(); |
el15ss | 0:12cfe63faa6a | 66 | } |
el15ss | 0:12cfe63faa6a | 67 | |
el15ss | 0:12cfe63faa6a | 68 | for(i=0;i<OBS;i++) |
el15ss | 0:12cfe63faa6a | 69 | { |
el15ss | 0:12cfe63faa6a | 70 | obstacle[i].Obstacles_Status(obstacle[i].get_pos()); |
el15ss | 0:12cfe63faa6a | 71 | |
el15ss | 0:12cfe63faa6a | 72 | if(!obstacle[i].get_status()) |
el15ss | 0:12cfe63faa6a | 73 | { |
el15ss | 0:12cfe63faa6a | 74 | obstacle[i].init(); |
el15ss | 0:12cfe63faa6a | 75 | } |
el15ss | 0:12cfe63faa6a | 76 | c.Character_Status(obstacle[i].get_pos()); |
el15ss | 0:12cfe63faa6a | 77 | } |
el15ss | 0:12cfe63faa6a | 78 | |
el15ss | 0:12cfe63faa6a | 79 | |
el15ss | 0:12cfe63faa6a | 80 | for(j=0;j<GEMS;j++) |
el15ss | 0:12cfe63faa6a | 81 | { |
el15ss | 0:12cfe63faa6a | 82 | gems[j].Gems_Status(gems[i].get_pos()); |
el15ss | 0:12cfe63faa6a | 83 | |
el15ss | 0:12cfe63faa6a | 84 | if(!gems[j].get_status()) |
el15ss | 0:12cfe63faa6a | 85 | { |
el15ss | 0:12cfe63faa6a | 86 | gems[j].init(); |
el15ss | 0:12cfe63faa6a | 87 | } |
el15ss | 0:12cfe63faa6a | 88 | gems[j].Gems_Score(gems[j].get_pos()); |
el15ss | 0:12cfe63faa6a | 89 | } |
el15ss | 0:12cfe63faa6a | 90 | i =0; |
el15ss | 0:12cfe63faa6a | 91 | |
el15ss | 0:12cfe63faa6a | 92 | for(i=0;i<OBS;i++) |
el15ss | 0:12cfe63faa6a | 93 | { |
el15ss | 0:12cfe63faa6a | 94 | obstacle[i].update(); |
el15ss | 0:12cfe63faa6a | 95 | } |
el15ss | 0:12cfe63faa6a | 96 | |
el15ss | 0:12cfe63faa6a | 97 | |
el15ss | 0:12cfe63faa6a | 98 | j =0; |
el15ss | 0:12cfe63faa6a | 99 | |
el15ss | 0:12cfe63faa6a | 100 | for(j=0;j<GEMS;j++) |
el15ss | 0:12cfe63faa6a | 101 | { |
el15ss | 0:12cfe63faa6a | 102 | gems[j].update(); |
el15ss | 0:12cfe63faa6a | 103 | } |
el15ss | 0:12cfe63faa6a | 104 | |
el15ss | 0:12cfe63faa6a | 105 | render(); |
el15ss | 0:12cfe63faa6a | 106 | |
el15ss | 0:12cfe63faa6a | 107 | wait(1.0f/fps); |
el15ss | 0:12cfe63faa6a | 108 | } |
el15ss | 0:12cfe63faa6a | 109 | } |
el15ss | 0:12cfe63faa6a | 110 | |
el15ss | 0:12cfe63faa6a | 111 | void init() |
el15ss | 0:12cfe63faa6a | 112 | { |
el15ss | 0:12cfe63faa6a | 113 | // need to initialise LCD and Gamepad |
el15ss | 0:12cfe63faa6a | 114 | lcd.init(); |
el15ss | 0:12cfe63faa6a | 115 | pad.init(); |
el15ss | 0:12cfe63faa6a | 116 | c.init(); |
el15ss | 0:12cfe63faa6a | 117 | |
el15ss | 0:12cfe63faa6a | 118 | for(i=0;i<OBS;i++) |
el15ss | 0:12cfe63faa6a | 119 | { |
el15ss | 0:12cfe63faa6a | 120 | obstacle[i].init(); |
el15ss | 0:12cfe63faa6a | 121 | } |
el15ss | 0:12cfe63faa6a | 122 | for(j=0;j<GEMS;j++) |
el15ss | 0:12cfe63faa6a | 123 | { |
el15ss | 0:12cfe63faa6a | 124 | gems[j].init(); |
el15ss | 0:12cfe63faa6a | 125 | } |
el15ss | 0:12cfe63faa6a | 126 | |
el15ss | 0:12cfe63faa6a | 127 | |
el15ss | 0:12cfe63faa6a | 128 | |
el15ss | 0:12cfe63faa6a | 129 | } |
el15ss | 0:12cfe63faa6a | 130 | |
el15ss | 0:12cfe63faa6a | 131 | void render() |
el15ss | 0:12cfe63faa6a | 132 | { |
el15ss | 0:12cfe63faa6a | 133 | // clear screen, re-draw and refresh |
el15ss | 0:12cfe63faa6a | 134 | lcd.clear(); |
el15ss | 0:12cfe63faa6a | 135 | if(!c.get_status()) |
el15ss | 0:12cfe63faa6a | 136 | { |
el15ss | 0:12cfe63faa6a | 137 | over(); |
el15ss | 0:12cfe63faa6a | 138 | } |
el15ss | 0:12cfe63faa6a | 139 | if(c.get_status()) |
el15ss | 0:12cfe63faa6a | 140 | { |
el15ss | 0:12cfe63faa6a | 141 | c.draw(lcd); |
el15ss | 0:12cfe63faa6a | 142 | } |
el15ss | 0:12cfe63faa6a | 143 | //obstacle[i].draw(lcd); |
el15ss | 0:12cfe63faa6a | 144 | |
el15ss | 0:12cfe63faa6a | 145 | for(i=0;i<OBS;i++) |
el15ss | 0:12cfe63faa6a | 146 | { |
el15ss | 0:12cfe63faa6a | 147 | if(obstacle[i].get_status()) |
el15ss | 0:12cfe63faa6a | 148 | { |
el15ss | 0:12cfe63faa6a | 149 | obstacle[i].draw(lcd); |
el15ss | 0:12cfe63faa6a | 150 | } |
el15ss | 0:12cfe63faa6a | 151 | |
el15ss | 0:12cfe63faa6a | 152 | } |
el15ss | 0:12cfe63faa6a | 153 | |
el15ss | 0:12cfe63faa6a | 154 | for(j=0;j<GEMS;j++) |
el15ss | 0:12cfe63faa6a | 155 | { |
el15ss | 0:12cfe63faa6a | 156 | if(gems[j].get_status()) |
el15ss | 0:12cfe63faa6a | 157 | { |
el15ss | 0:12cfe63faa6a | 158 | gems[j].draw(lcd); |
el15ss | 0:12cfe63faa6a | 159 | } |
el15ss | 0:12cfe63faa6a | 160 | |
el15ss | 0:12cfe63faa6a | 161 | } |
el15ss | 0:12cfe63faa6a | 162 | lcd.refresh(); |
el15ss | 0:12cfe63faa6a | 163 | } |
el15ss | 0:12cfe63faa6a | 164 | |
el15ss | 0:12cfe63faa6a | 165 | void welcome() { |
el15ss | 0:12cfe63faa6a | 166 | |
el15ss | 0:12cfe63faa6a | 167 | lcd.printString("Stick Runner! ",0,1); |
el15ss | 0:12cfe63faa6a | 168 | lcd.printString(" Press Start ",0,4); |
el15ss | 0:12cfe63faa6a | 169 | lcd.refresh(); |
el15ss | 0:12cfe63faa6a | 170 | pad.tone(1500.0,0.5); |
el15ss | 0:12cfe63faa6a | 171 | pad.tone(1500.0,0.5); |
el15ss | 0:12cfe63faa6a | 172 | |
el15ss | 0:12cfe63faa6a | 173 | |
el15ss | 0:12cfe63faa6a | 174 | // wait flashing LEDs until start button is pressed |
el15ss | 0:12cfe63faa6a | 175 | while ( pad.check_event(Gamepad::START_PRESSED) == false) { |
el15ss | 0:12cfe63faa6a | 176 | pad.leds_on(); |
el15ss | 0:12cfe63faa6a | 177 | wait(0.1); |
el15ss | 0:12cfe63faa6a | 178 | pad.leds_off(); |
el15ss | 0:12cfe63faa6a | 179 | wait(0.1); |
el15ss | 0:12cfe63faa6a | 180 | |
el15ss | 0:12cfe63faa6a | 181 | } |
el15ss | 0:12cfe63faa6a | 182 | menu(); |
el15ss | 0:12cfe63faa6a | 183 | } |
el15ss | 0:12cfe63faa6a | 184 | |
el15ss | 0:12cfe63faa6a | 185 | void over() { |
el15ss | 0:12cfe63faa6a | 186 | lcd.clear(); |
el15ss | 0:12cfe63faa6a | 187 | lcd.printString(" GAME ",0,1); |
el15ss | 0:12cfe63faa6a | 188 | lcd.printString(" OVER!!!!! ",0,2); |
el15ss | 0:12cfe63faa6a | 189 | lcd.printString(" PRESS START ",0,4); |
el15ss | 0:12cfe63faa6a | 190 | |
el15ss | 0:12cfe63faa6a | 191 | lcd.refresh(); |
el15ss | 0:12cfe63faa6a | 192 | |
el15ss | 0:12cfe63faa6a | 193 | // wait flashing LEDs until start button is pressed |
el15ss | 0:12cfe63faa6a | 194 | while ( pad.check_event(Gamepad::START_PRESSED) == false) { |
el15ss | 0:12cfe63faa6a | 195 | pad.leds_on(); |
el15ss | 0:12cfe63faa6a | 196 | pad.tone(1000.0,0.5); |
el15ss | 0:12cfe63faa6a | 197 | wait(0.1); |
el15ss | 0:12cfe63faa6a | 198 | pad.leds_off(); |
el15ss | 0:12cfe63faa6a | 199 | pad.tone(1000.0,0.5); |
el15ss | 0:12cfe63faa6a | 200 | wait(0.1); |
el15ss | 0:12cfe63faa6a | 201 | if( pad.check_event(Gamepad::START_PRESSED)) { |
el15ss | 0:12cfe63faa6a | 202 | main(); |
el15ss | 0:12cfe63faa6a | 203 | wait(1); |
el15ss | 0:12cfe63faa6a | 204 | } |
el15ss | 0:12cfe63faa6a | 205 | } |
el15ss | 0:12cfe63faa6a | 206 | |
el15ss | 0:12cfe63faa6a | 207 | } |
el15ss | 0:12cfe63faa6a | 208 | |
el15ss | 0:12cfe63faa6a | 209 | void menu() { |
el15ss | 0:12cfe63faa6a | 210 | int fps =8; |
el15ss | 0:12cfe63faa6a | 211 | bool i = true; |
el15ss | 0:12cfe63faa6a | 212 | while(i == true) |
el15ss | 0:12cfe63faa6a | 213 | { |
el15ss | 0:12cfe63faa6a | 214 | lcd.printString(" Menu ",0,1); |
el15ss | 0:12cfe63faa6a | 215 | lcd.printString("A)New Game ",0,2); |
el15ss | 0:12cfe63faa6a | 216 | lcd.printString("B)Continue ",0,3); |
el15ss | 0:12cfe63faa6a | 217 | lcd.printString("X)Instructions ",0,4); |
el15ss | 0:12cfe63faa6a | 218 | |
el15ss | 0:12cfe63faa6a | 219 | lcd.refresh(); |
el15ss | 0:12cfe63faa6a | 220 | |
el15ss | 0:12cfe63faa6a | 221 | // wait flashing LEDs until start button is pressed |
el15ss | 0:12cfe63faa6a | 222 | if( pad.check_event(Gamepad::A_PRESSED) ) { |
el15ss | 0:12cfe63faa6a | 223 | pad.tone(1000.0,0.5); |
el15ss | 0:12cfe63faa6a | 224 | i = false; |
el15ss | 0:12cfe63faa6a | 225 | lcd.clear(); |
el15ss | 0:12cfe63faa6a | 226 | lcd.refresh(); |
el15ss | 0:12cfe63faa6a | 227 | |
el15ss | 0:12cfe63faa6a | 228 | //break; |
el15ss | 0:12cfe63faa6a | 229 | } |
el15ss | 0:12cfe63faa6a | 230 | |
el15ss | 0:12cfe63faa6a | 231 | else if( pad.check_event(Gamepad::B_PRESSED) ) { |
el15ss | 0:12cfe63faa6a | 232 | //lcd.clear(); |
el15ss | 0:12cfe63faa6a | 233 | pad.tone(1000.0,0.5); |
el15ss | 0:12cfe63faa6a | 234 | i = false; |
el15ss | 0:12cfe63faa6a | 235 | lcd.refresh(); |
el15ss | 0:12cfe63faa6a | 236 | |
el15ss | 0:12cfe63faa6a | 237 | |
el15ss | 0:12cfe63faa6a | 238 | } |
el15ss | 0:12cfe63faa6a | 239 | |
el15ss | 0:12cfe63faa6a | 240 | else if( pad.check_event(Gamepad::X_PRESSED) ) { |
el15ss | 0:12cfe63faa6a | 241 | pad.tone(1000.0,0.5); |
el15ss | 0:12cfe63faa6a | 242 | Instructions(); |
el15ss | 0:12cfe63faa6a | 243 | wait(100.0f/fps); |
el15ss | 0:12cfe63faa6a | 244 | i = false; |
el15ss | 0:12cfe63faa6a | 245 | } |
el15ss | 0:12cfe63faa6a | 246 | |
el15ss | 0:12cfe63faa6a | 247 | |
el15ss | 0:12cfe63faa6a | 248 | } |
el15ss | 0:12cfe63faa6a | 249 | } |
el15ss | 0:12cfe63faa6a | 250 | |
el15ss | 0:12cfe63faa6a | 251 | void Instructions() |
el15ss | 0:12cfe63faa6a | 252 | { |
el15ss | 0:12cfe63faa6a | 253 | bool i = true; |
el15ss | 0:12cfe63faa6a | 254 | lcd.clear(); |
el15ss | 0:12cfe63faa6a | 255 | lcd.printString("INSTURCTIONS: ",0,1); |
el15ss | 0:12cfe63faa6a | 256 | lcd.printString("Collect the ",0,2); |
el15ss | 0:12cfe63faa6a | 257 | lcd.printString("gems to get ",0,3); |
el15ss | 0:12cfe63faa6a | 258 | lcd.printString("points ",0,4); |
el15ss | 0:12cfe63faa6a | 259 | lcd.refresh(); |
el15ss | 0:12cfe63faa6a | 260 | |
el15ss | 0:12cfe63faa6a | 261 | while(i == true){ |
el15ss | 0:12cfe63faa6a | 262 | |
el15ss | 0:12cfe63faa6a | 263 | if( pad.check_event(Gamepad::BACK_PRESSED) ) { |
el15ss | 0:12cfe63faa6a | 264 | pad.tone(1000.0,0.5); |
el15ss | 0:12cfe63faa6a | 265 | i = false; |
el15ss | 0:12cfe63faa6a | 266 | menu(); |
el15ss | 0:12cfe63faa6a | 267 | } |
el15ss | 0:12cfe63faa6a | 268 | } |
el15ss | 0:12cfe63faa6a | 269 | |
el15ss | 0:12cfe63faa6a | 270 | } |