Adam Baker 201166301

Dependencies:   mbed Gamepad N5110

Committer:
adambakerwa
Date:
Mon May 06 14:08:31 2019 +0000
Revision:
38:51ed5820ffe5
Parent:
37:23b6312c8315
Child:
40:f53c70793975
commenting and doxygen work

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