Adam Baker 201166301

Dependencies:   mbed Gamepad N5110

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?

UserRevisionLine numberNew 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)