![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Adam Baker 201166301
Dependencies: mbed Gamepad N5110
main.cpp@37:23b6312c8315, 2019-05-05 (annotated)
- Committer:
- adambakerwa
- Date:
- Sun May 05 17:34:55 2019 +0000
- Revision:
- 37:23b6312c8315
- Parent:
- 36:6f452777b9ce
- Child:
- 38:51ed5820ffe5
menu success!!!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
adambakerwa | 1:a3cce487dffe | 1 | #include "mbed.h" |
adambakerwa | 1:a3cce487dffe | 2 | #include "Gamepad.h" |
adambakerwa | 1:a3cce487dffe | 3 | #include "N5110.h" |
adambakerwa | 1:a3cce487dffe | 4 | #include "Runner.h" |
adambakerwa | 6:cef9c2853315 | 5 | #include "Levels.h" |
adambakerwa | 9:ddeafaadf984 | 6 | #include "Animation.h" |
adambakerwa | 25:230e4163cb6b | 7 | #include "BlockheadEngine.h" |
adambakerwa | 36:6f452777b9ce | 8 | #include "Menu.h" |
adambakerwa | 1:a3cce487dffe | 9 | |
adambakerwa | 1:a3cce487dffe | 10 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
adambakerwa | 1:a3cce487dffe | 11 | Gamepad pad; |
adambakerwa | 25:230e4163cb6b | 12 | BlockheadEngine blockhead; |
adambakerwa | 13:35a459a33bbd | 13 | Ticker ticker; |
adambakerwa | 36:6f452777b9ce | 14 | Menu menu; |
adambakerwa | 13:35a459a33bbd | 15 | |
adambakerwa | 13:35a459a33bbd | 16 | volatile int timer_flag = 0; |
adambakerwa | 13:35a459a33bbd | 17 | |
adambakerwa | 13:35a459a33bbd | 18 | void timer_isr(); |
adambakerwa | 31:bf765e3961f1 | 19 | void init(); |
adambakerwa | 36:6f452777b9ce | 20 | |
adambakerwa | 37:23b6312c8315 | 21 | void intro(N5110 &lcd, Gamepad &pad); |
adambakerwa | 26:3319ddd5111d | 22 | void main_menu(N5110 &lcd, Gamepad &pad); |
adambakerwa | 36:6f452777b9ce | 23 | int select_menu_item(Gamepad &pad, N5110 &lcd); |
adambakerwa | 36:6f452777b9ce | 24 | void go_to_main_menu_item(N5110 &lcd, Gamepad &pad, int input); |
adambakerwa | 31:bf765e3961f1 | 25 | |
adambakerwa | 26:3319ddd5111d | 26 | void menu_playgame(N5110 &lcd, Gamepad &pad); |
adambakerwa | 36:6f452777b9ce | 27 | void menu_highscore(N5110 &lcd, Gamepad &pad); |
adambakerwa | 36:6f452777b9ce | 28 | void menu_settings(N5110 &lcd, Gamepad &pad); |
adambakerwa | 36:6f452777b9ce | 29 | void menu_quit(N5110 &lcd, Gamepad &pad); |
adambakerwa | 6:cef9c2853315 | 30 | |
adambakerwa | 31:bf765e3961f1 | 31 | void select_continue_menu_item(N5110 &lcd, Gamepad &pad, int input); |
adambakerwa | 36:6f452777b9ce | 32 | void print_continue_menu(N5110 &lcd); // |
adambakerwa | 31:bf765e3961f1 | 33 | void menu_continue(N5110 &lcd, Gamepad &pad); |
adambakerwa | 31:bf765e3961f1 | 34 | |
adambakerwa | 31:bf765e3961f1 | 35 | |
adambakerwa | 13:35a459a33bbd | 36 | int main() |
adambakerwa | 13:35a459a33bbd | 37 | { |
adambakerwa | 13:35a459a33bbd | 38 | |
adambakerwa | 18:0a0976faedfb | 39 | int fps = 6; //6 |
adambakerwa | 31:bf765e3961f1 | 40 | init(); |
adambakerwa | 31:bf765e3961f1 | 41 | ticker.attach(&timer_isr,1.0f/fps); |
adambakerwa | 36:6f452777b9ce | 42 | |
adambakerwa | 17:ecbafe932c19 | 43 | lcd.setContrast(0.55); |
adambakerwa | 24:f5dd1f3db693 | 44 | |
adambakerwa | 37:23b6312c8315 | 45 | intro(lcd, pad); |
adambakerwa | 37:23b6312c8315 | 46 | |
adambakerwa | 26:3319ddd5111d | 47 | main_menu(lcd, pad); |
adambakerwa | 13:35a459a33bbd | 48 | |
adambakerwa | 13:35a459a33bbd | 49 | } |
adambakerwa | 13:35a459a33bbd | 50 | |
adambakerwa | 37:23b6312c8315 | 51 | |
adambakerwa | 13:35a459a33bbd | 52 | void timer_isr() |
adambakerwa | 13:35a459a33bbd | 53 | { |
adambakerwa | 13:35a459a33bbd | 54 | |
adambakerwa | 36:6f452777b9ce | 55 | timer_flag = 1; // set flag in ISR |
adambakerwa | 1:a3cce487dffe | 56 | } |
adambakerwa | 1:a3cce487dffe | 57 | |
adambakerwa | 31:bf765e3961f1 | 58 | void init() |
adambakerwa | 31:bf765e3961f1 | 59 | { |
adambakerwa | 36:6f452777b9ce | 60 | pad.init(); //intialise Gamepad class variables |
adambakerwa | 37:23b6312c8315 | 61 | lcd.init(); |
adambakerwa | 36:6f452777b9ce | 62 | menu.init(); //intialise N5110 class variables |
adambakerwa | 31:bf765e3961f1 | 63 | } |
adambakerwa | 31:bf765e3961f1 | 64 | |
adambakerwa | 37:23b6312c8315 | 65 | void intro(N5110 &lcd, Gamepad &pad) |
adambakerwa | 37:23b6312c8315 | 66 | { |
adambakerwa | 37:23b6312c8315 | 67 | menu.title_intro(lcd, pad); |
adambakerwa | 37:23b6312c8315 | 68 | int start = 0; |
adambakerwa | 37:23b6312c8315 | 69 | |
adambakerwa | 37:23b6312c8315 | 70 | do { |
adambakerwa | 37:23b6312c8315 | 71 | if (timer_flag == true) { //only run when timer flag is true (6fps) |
adambakerwa | 37:23b6312c8315 | 72 | |
adambakerwa | 37:23b6312c8315 | 73 | timer_flag = 0; |
adambakerwa | 37:23b6312c8315 | 74 | |
adambakerwa | 37:23b6312c8315 | 75 | start = menu.press_start(lcd, pad); |
adambakerwa | 37:23b6312c8315 | 76 | |
adambakerwa | 37:23b6312c8315 | 77 | } else { |
adambakerwa | 37:23b6312c8315 | 78 | |
adambakerwa | 37:23b6312c8315 | 79 | sleep(); //sleep when timer_flag not true in order to conserve energy |
adambakerwa | 37:23b6312c8315 | 80 | |
adambakerwa | 37:23b6312c8315 | 81 | } |
adambakerwa | 37:23b6312c8315 | 82 | |
adambakerwa | 37:23b6312c8315 | 83 | |
adambakerwa | 37:23b6312c8315 | 84 | } while (start == 0); |
adambakerwa | 37:23b6312c8315 | 85 | |
adambakerwa | 37:23b6312c8315 | 86 | menu.init(); |
adambakerwa | 37:23b6312c8315 | 87 | } |
adambakerwa | 37:23b6312c8315 | 88 | |
adambakerwa | 26:3319ddd5111d | 89 | void main_menu(N5110 &lcd, Gamepad &pad) |
adambakerwa | 26:3319ddd5111d | 90 | { |
adambakerwa | 37:23b6312c8315 | 91 | |
adambakerwa | 36:6f452777b9ce | 92 | blockhead.init(); //intialise blockhead engine variables for new game |
adambakerwa | 36:6f452777b9ce | 93 | int input = select_menu_item(pad, lcd); //reads input and prints the main menu |
adambakerwa | 36:6f452777b9ce | 94 | go_to_main_menu_item(lcd, pad, input); //peforms what ever input is chosen |
adambakerwa | 26:3319ddd5111d | 95 | } |
adambakerwa | 26:3319ddd5111d | 96 | |
adambakerwa | 26:3319ddd5111d | 97 | |
adambakerwa | 36:6f452777b9ce | 98 | |
adambakerwa | 26:3319ddd5111d | 99 | |
adambakerwa | 36:6f452777b9ce | 100 | int select_menu_item(Gamepad &pad, N5110 &lcd) |
adambakerwa | 36:6f452777b9ce | 101 | { |
adambakerwa | 37:23b6312c8315 | 102 | int input = 0; |
adambakerwa | 37:23b6312c8315 | 103 | do { |
adambakerwa | 37:23b6312c8315 | 104 | |
adambakerwa | 37:23b6312c8315 | 105 | if (timer_flag == true) { //only run when timer flag is true (6fps) |
adambakerwa | 37:23b6312c8315 | 106 | |
adambakerwa | 37:23b6312c8315 | 107 | timer_flag = 0; |
adambakerwa | 37:23b6312c8315 | 108 | //ADD TRICKR AND ANIMATION |
adambakerwa | 37:23b6312c8315 | 109 | input = menu.select_input(pad, lcd); |
adambakerwa | 37:23b6312c8315 | 110 | |
adambakerwa | 37:23b6312c8315 | 111 | } else { |
adambakerwa | 37:23b6312c8315 | 112 | |
adambakerwa | 37:23b6312c8315 | 113 | sleep(); |
adambakerwa | 37:23b6312c8315 | 114 | |
adambakerwa | 37:23b6312c8315 | 115 | } //prints menu and toggles cursor depending on input, |
adambakerwa | 36:6f452777b9ce | 116 | } while (input == 0); //repeats untill an input is chosen |
adambakerwa | 26:3319ddd5111d | 117 | |
adambakerwa | 25:230e4163cb6b | 118 | return input; |
adambakerwa | 25:230e4163cb6b | 119 | } |
adambakerwa | 25:230e4163cb6b | 120 | |
adambakerwa | 36:6f452777b9ce | 121 | void go_to_main_menu_item(N5110 &lcd, Gamepad &pad, int input) |
adambakerwa | 26:3319ddd5111d | 122 | { |
adambakerwa | 36:6f452777b9ce | 123 | switch (input) { //depending on input, performes following menu items |
adambakerwa | 26:3319ddd5111d | 124 | case 1: |
adambakerwa | 26:3319ddd5111d | 125 | menu_playgame(lcd, pad); |
adambakerwa | 26:3319ddd5111d | 126 | break; |
adambakerwa | 26:3319ddd5111d | 127 | case 2: |
adambakerwa | 36:6f452777b9ce | 128 | menu_highscore(lcd, pad); |
adambakerwa | 26:3319ddd5111d | 129 | break; |
adambakerwa | 36:6f452777b9ce | 130 | case 3: |
adambakerwa | 36:6f452777b9ce | 131 | menu_settings(lcd, pad); |
adambakerwa | 36:6f452777b9ce | 132 | case 4: |
adambakerwa | 36:6f452777b9ce | 133 | menu_quit(lcd, pad); |
adambakerwa | 26:3319ddd5111d | 134 | default: |
adambakerwa | 26:3319ddd5111d | 135 | exit(1); |
adambakerwa | 26:3319ddd5111d | 136 | break; |
adambakerwa | 26:3319ddd5111d | 137 | } |
adambakerwa | 25:230e4163cb6b | 138 | } |
adambakerwa | 25:230e4163cb6b | 139 | |
adambakerwa | 26:3319ddd5111d | 140 | void menu_playgame(N5110 &lcd, Gamepad &pad) |
adambakerwa | 26:3319ddd5111d | 141 | { |
adambakerwa | 26:3319ddd5111d | 142 | int gameover = 0; |
adambakerwa | 31:bf765e3961f1 | 143 | |
adambakerwa | 26:3319ddd5111d | 144 | do { |
adambakerwa | 36:6f452777b9ce | 145 | if (timer_flag == true) { //only run when timer flag is true (6fps) |
adambakerwa | 26:3319ddd5111d | 146 | |
adambakerwa | 36:6f452777b9ce | 147 | timer_flag = 0; //if it has, clear the flag |
adambakerwa | 26:3319ddd5111d | 148 | |
adambakerwa | 36:6f452777b9ce | 149 | gameover = blockhead.playgame(lcd, pad); //run game untill gameover |
adambakerwa | 26:3319ddd5111d | 150 | |
adambakerwa | 26:3319ddd5111d | 151 | } else { |
adambakerwa | 26:3319ddd5111d | 152 | |
adambakerwa | 36:6f452777b9ce | 153 | sleep(); //sleep when timer_flag not true in order to conserve energy |
adambakerwa | 26:3319ddd5111d | 154 | |
adambakerwa | 26:3319ddd5111d | 155 | } |
adambakerwa | 26:3319ddd5111d | 156 | } while (gameover == 0); |
adambakerwa | 26:3319ddd5111d | 157 | |
adambakerwa | 36:6f452777b9ce | 158 | menu_continue(lcd, pad); //once gameover occurs, go to continue menu (LETS TRY GET LIVES INVOLVED MAYBE!!!))) |
adambakerwa | 26:3319ddd5111d | 159 | |
adambakerwa | 26:3319ddd5111d | 160 | } |
adambakerwa | 26:3319ddd5111d | 161 | |
adambakerwa | 36:6f452777b9ce | 162 | void menu_highscore(N5110 &lcd, Gamepad &pad) |
adambakerwa | 25:230e4163cb6b | 163 | { |
adambakerwa | 25:230e4163cb6b | 164 | |
adambakerwa | 26:3319ddd5111d | 165 | int goback = 0; |
adambakerwa | 36:6f452777b9ce | 166 | |
adambakerwa | 26:3319ddd5111d | 167 | do { |
adambakerwa | 25:230e4163cb6b | 168 | |
adambakerwa | 26:3319ddd5111d | 169 | if (timer_flag == true) { |
adambakerwa | 26:3319ddd5111d | 170 | |
adambakerwa | 26:3319ddd5111d | 171 | timer_flag = 0; |
adambakerwa | 26:3319ddd5111d | 172 | |
adambakerwa | 36:6f452777b9ce | 173 | int highscore = blockhead.highscore(); |
adambakerwa | 36:6f452777b9ce | 174 | |
adambakerwa | 26:3319ddd5111d | 175 | lcd.clear(); |
adambakerwa | 26:3319ddd5111d | 176 | |
adambakerwa | 36:6f452777b9ce | 177 | lcd.printString(" Highscore.. ", 0,1); |
adambakerwa | 36:6f452777b9ce | 178 | |
adambakerwa | 36:6f452777b9ce | 179 | char buffer[14]; |
adambakerwa | 36:6f452777b9ce | 180 | sprintf(buffer,"%i", highscore); |
adambakerwa | 36:6f452777b9ce | 181 | lcd.printString(buffer,35,5); |
adambakerwa | 26:3319ddd5111d | 182 | |
adambakerwa | 26:3319ddd5111d | 183 | lcd.refresh(); |
adambakerwa | 26:3319ddd5111d | 184 | |
adambakerwa | 29:b2f63d8c1268 | 185 | if (pad.check_event(Gamepad::B_PRESSED)) { |
adambakerwa | 26:3319ddd5111d | 186 | goback = 1; |
adambakerwa | 26:3319ddd5111d | 187 | } |
adambakerwa | 26:3319ddd5111d | 188 | |
adambakerwa | 26:3319ddd5111d | 189 | } else { |
adambakerwa | 26:3319ddd5111d | 190 | |
adambakerwa | 26:3319ddd5111d | 191 | sleep(); |
adambakerwa | 26:3319ddd5111d | 192 | |
adambakerwa | 26:3319ddd5111d | 193 | } |
adambakerwa | 26:3319ddd5111d | 194 | } while (goback == 0); |
adambakerwa | 37:23b6312c8315 | 195 | |
adambakerwa | 36:6f452777b9ce | 196 | main_menu(lcd, pad); |
adambakerwa | 36:6f452777b9ce | 197 | } |
adambakerwa | 26:3319ddd5111d | 198 | |
adambakerwa | 36:6f452777b9ce | 199 | void menu_settings(N5110 &lcd, Gamepad &pad) |
adambakerwa | 36:6f452777b9ce | 200 | { |
adambakerwa | 36:6f452777b9ce | 201 | |
adambakerwa | 36:6f452777b9ce | 202 | int goback = 0; |
adambakerwa | 36:6f452777b9ce | 203 | |
adambakerwa | 36:6f452777b9ce | 204 | do { |
adambakerwa | 36:6f452777b9ce | 205 | |
adambakerwa | 36:6f452777b9ce | 206 | if (timer_flag == true) { |
adambakerwa | 36:6f452777b9ce | 207 | |
adambakerwa | 36:6f452777b9ce | 208 | timer_flag = 0; |
adambakerwa | 36:6f452777b9ce | 209 | |
adambakerwa | 36:6f452777b9ce | 210 | lcd.clear(); |
adambakerwa | 36:6f452777b9ce | 211 | |
adambakerwa | 36:6f452777b9ce | 212 | lcd.printString(" settings ", 0,1); |
adambakerwa | 36:6f452777b9ce | 213 | |
adambakerwa | 36:6f452777b9ce | 214 | lcd.refresh(); |
adambakerwa | 36:6f452777b9ce | 215 | |
adambakerwa | 36:6f452777b9ce | 216 | if (pad.check_event(Gamepad::B_PRESSED)) { |
adambakerwa | 36:6f452777b9ce | 217 | goback = 1; |
adambakerwa | 36:6f452777b9ce | 218 | } |
adambakerwa | 36:6f452777b9ce | 219 | |
adambakerwa | 36:6f452777b9ce | 220 | } else { |
adambakerwa | 36:6f452777b9ce | 221 | |
adambakerwa | 36:6f452777b9ce | 222 | sleep(); |
adambakerwa | 36:6f452777b9ce | 223 | |
adambakerwa | 36:6f452777b9ce | 224 | } |
adambakerwa | 36:6f452777b9ce | 225 | } while (goback == 0); |
adambakerwa | 26:3319ddd5111d | 226 | main_menu(lcd, pad); |
adambakerwa | 26:3319ddd5111d | 227 | } |
adambakerwa | 25:230e4163cb6b | 228 | |
adambakerwa | 36:6f452777b9ce | 229 | void menu_quit(N5110 &lcd, Gamepad &pad) |
adambakerwa | 36:6f452777b9ce | 230 | { |
adambakerwa | 36:6f452777b9ce | 231 | lcd.turnOff(); |
adambakerwa | 36:6f452777b9ce | 232 | sleep(); |
adambakerwa | 37:23b6312c8315 | 233 | |
adambakerwa | 36:6f452777b9ce | 234 | } |
adambakerwa | 36:6f452777b9ce | 235 | |
adambakerwa | 25:230e4163cb6b | 236 | |
adambakerwa | 31:bf765e3961f1 | 237 | void select_continue_menu_item(N5110 &lcd, Gamepad &pad, int input) |
adambakerwa | 31:bf765e3961f1 | 238 | { |
adambakerwa | 31:bf765e3961f1 | 239 | switch (input) { |
adambakerwa | 31:bf765e3961f1 | 240 | case 1: |
adambakerwa | 31:bf765e3961f1 | 241 | menu_playgame(lcd, pad); |
adambakerwa | 31:bf765e3961f1 | 242 | break; |
adambakerwa | 31:bf765e3961f1 | 243 | case 2: |
adambakerwa | 31:bf765e3961f1 | 244 | main_menu(lcd, pad); |
adambakerwa | 31:bf765e3961f1 | 245 | break; |
adambakerwa | 31:bf765e3961f1 | 246 | default: |
adambakerwa | 31:bf765e3961f1 | 247 | exit(1); |
adambakerwa | 31:bf765e3961f1 | 248 | break; |
adambakerwa | 31:bf765e3961f1 | 249 | } |
adambakerwa | 31:bf765e3961f1 | 250 | } |
adambakerwa | 31:bf765e3961f1 | 251 | |
adambakerwa | 31:bf765e3961f1 | 252 | void print_menu_continue(N5110 &lcd) |
adambakerwa | 31:bf765e3961f1 | 253 | { |
adambakerwa | 31:bf765e3961f1 | 254 | lcd.clear(); |
adambakerwa | 31:bf765e3961f1 | 255 | |
adambakerwa | 31:bf765e3961f1 | 256 | lcd.printString("Continue??",0,0); |
adambakerwa | 31:bf765e3961f1 | 257 | lcd.printString("A for hell yeh",0,1); |
adambakerwa | 31:bf765e3961f1 | 258 | lcd.printString("B for back",0,2); |
adambakerwa | 31:bf765e3961f1 | 259 | lcd.refresh(); |
adambakerwa | 31:bf765e3961f1 | 260 | |
adambakerwa | 31:bf765e3961f1 | 261 | } |
adambakerwa | 31:bf765e3961f1 | 262 | |
adambakerwa | 31:bf765e3961f1 | 263 | void menu_continue(N5110 &lcd, Gamepad &pad) |
adambakerwa | 31:bf765e3961f1 | 264 | { |
adambakerwa | 31:bf765e3961f1 | 265 | blockhead.continueInit(); |
adambakerwa | 36:6f452777b9ce | 266 | |
adambakerwa | 31:bf765e3961f1 | 267 | print_menu_continue(lcd); |
adambakerwa | 37:23b6312c8315 | 268 | |
adambakerwa | 36:6f452777b9ce | 269 | int input = 0; |
adambakerwa | 37:23b6312c8315 | 270 | do { |
adambakerwa | 37:23b6312c8315 | 271 | |
adambakerwa | 36:6f452777b9ce | 272 | if (pad.check_event(Gamepad::A_PRESSED)) { |
adambakerwa | 37:23b6312c8315 | 273 | input = 1; |
adambakerwa | 37:23b6312c8315 | 274 | } |
adambakerwa | 37:23b6312c8315 | 275 | |
adambakerwa | 36:6f452777b9ce | 276 | if (pad.check_event(Gamepad::B_PRESSED)) { |
adambakerwa | 37:23b6312c8315 | 277 | input = 2; |
adambakerwa | 37:23b6312c8315 | 278 | } |
adambakerwa | 37:23b6312c8315 | 279 | |
adambakerwa | 37:23b6312c8315 | 280 | } while (input ==0); |
adambakerwa | 37:23b6312c8315 | 281 | select_continue_menu_item(lcd, pad, input); |
adambakerwa | 31:bf765e3961f1 | 282 | } |
adambakerwa | 31:bf765e3961f1 | 283 | |
adambakerwa | 1:a3cce487dffe | 284 | |
adambakerwa | 13:35a459a33bbd | 285 | //rtos |
adambakerwa | 24:f5dd1f3db693 | 286 | /** |
adambakerwa | 24:f5dd1f3db693 | 287 | char buffer[14]; |
adambakerwa | 24:f5dd1f3db693 | 288 | sprintf(buffer,"%i", gameover); |
adambakerwa | 24:f5dd1f3db693 | 289 | lcd.printString(buffer,0,0); |
adambakerwa | 24:f5dd1f3db693 | 290 | */ |
adambakerwa | 26:3319ddd5111d | 291 | //NEED TO RESET POS CORDS EACH NEW LEVEL TO PREVENT UNNECERSARRY GAME OVER (have fun x) |