Adam Baker 201166301

Dependencies:   mbed Gamepad N5110

Committer:
adambakerwa
Date:
Tue May 07 18:07:39 2019 +0000
Revision:
40:f53c70793975
Parent:
38:51ed5820ffe5
Child:
41:4b20f909bbcb
menu fin

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