James Cummins / Mbed 2 deprecated el17jnc

Dependencies:   mbed

Committer:
JamesCummins
Date:
Mon Apr 15 08:14:13 2019 +0000
Revision:
16:e846864778c4
Parent:
15:1564bd6b713d
Child:
17:5104ecef5bd0
Brickbreaker mode and pause menu working. Needs small added features (eg intro screen) to make more user friendly

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JamesCummins 0:7c96d84b673e 1 /*
JamesCummins 0:7c96d84b673e 2 ELEC2645 Embedded Systems Project
JamesCummins 0:7c96d84b673e 3 School of Electronic & Electrical Engineering
JamesCummins 0:7c96d84b673e 4 University of Leeds
JamesCummins 0:7c96d84b673e 5 Name: James Nathan Cummins
JamesCummins 0:7c96d84b673e 6 Username: el17jnc
JamesCummins 0:7c96d84b673e 7 Student ID Number: 201096364
JamesCummins 0:7c96d84b673e 8 Date: 22/03/19
JamesCummins 0:7c96d84b673e 9 */
JamesCummins 0:7c96d84b673e 10
JamesCummins 0:7c96d84b673e 11 #include "Gamepad.h"
JamesCummins 0:7c96d84b673e 12 #include "mbed.h"
JamesCummins 1:99d524f81566 13 #include "N5110.h"
JamesCummins 12:9982239b7906 14 #include "GameEngine.h"
JamesCummins 13:e5a36fbd48ae 15 #define RADIUS 3
JamesCummins 0:7c96d84b673e 16
JamesCummins 11:2cf0d4ce8677 17
JamesCummins 11:2cf0d4ce8677 18 //Objects
JamesCummins 6:952ac12c7f00 19 Gamepad gamepad;
JamesCummins 0:7c96d84b673e 20 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
JamesCummins 11:2cf0d4ce8677 21 GameEngine engine;
JamesCummins 11:2cf0d4ce8677 22 AnalogIn randnoise(PTB0);
JamesCummins 12:9982239b7906 23 FXOS8700CQ accelerometer(I2C_SDA,I2C_SCL);
JamesCummins 11:2cf0d4ce8677 24
JamesCummins 11:2cf0d4ce8677 25 //Methods
JamesCummins 7:6eb9cade57ab 26 void startscreen();
JamesCummins 7:6eb9cade57ab 27 int menu();
JamesCummins 12:9982239b7906 28 void init();
JamesCummins 15:1564bd6b713d 29 void print_start_menu(int output);
JamesCummins 8:4e306b16a941 30
JamesCummins 11:2cf0d4ce8677 31
JamesCummins 11:2cf0d4ce8677 32 ////////////////Main Function//////////////
JamesCummins 8:4e306b16a941 33
JamesCummins 8:4e306b16a941 34
JamesCummins 0:7c96d84b673e 35 int main(){
JamesCummins 15:1564bd6b713d 36 int fps = 30;
JamesCummins 10:40c77d69e83c 37 init();
JamesCummins 7:6eb9cade57ab 38 startscreen();
JamesCummins 16:e846864778c4 39 while(1){
JamesCummins 16:e846864778c4 40 int choice_selected = menu();
JamesCummins 16:e846864778c4 41 if(choice_selected == 0){ engine.classic_mode(accelerometer, gamepad, lcd, fps);}
JamesCummins 16:e846864778c4 42 if(choice_selected == 1){ engine.brickbreaker_mode(accelerometer, gamepad, lcd, randnoise, fps);}
JamesCummins 16:e846864778c4 43 if(choice_selected == 2){ engine.options_menu(gamepad, lcd);}
JamesCummins 16:e846864778c4 44 }
JamesCummins 0:7c96d84b673e 45 }
JamesCummins 8:4e306b16a941 46
JamesCummins 8:4e306b16a941 47
JamesCummins 11:2cf0d4ce8677 48
JamesCummins 8:4e306b16a941 49 //////////////Start up functions///////////////////
JamesCummins 11:2cf0d4ce8677 50
JamesCummins 10:40c77d69e83c 51 void init(){
JamesCummins 10:40c77d69e83c 52 gamepad.init();
JamesCummins 10:40c77d69e83c 53 lcd.init();
JamesCummins 10:40c77d69e83c 54 lcd.setContrast(0.55);
JamesCummins 13:e5a36fbd48ae 55 engine.init(RADIUS);
JamesCummins 10:40c77d69e83c 56 wait(1);
JamesCummins 10:40c77d69e83c 57 }
JamesCummins 0:7c96d84b673e 58
JamesCummins 7:6eb9cade57ab 59 void startscreen() {
JamesCummins 1:99d524f81566 60 lcd.clear();
JamesCummins 5:7e8f5fad7b6b 61 char gamename[] = {'L', 'A', 'B', 'Y', 'R', 'I', 'N', 'T', 'H', ' ', ' ', '\0'};
JamesCummins 3:f2e5ffd2b94c 62 int i = 0;
JamesCummins 5:7e8f5fad7b6b 63 for(int a = 0; a < 35; a++){
JamesCummins 4:2f01b85e57f9 64 lcd.clear();
JamesCummins 4:2f01b85e57f9 65 lcd.drawCircle(24+2*a, 21, 3, FILL_BLACK);
JamesCummins 4:2f01b85e57f9 66 for (i = 0; i < a/3; i++) {
JamesCummins 4:2f01b85e57f9 67 lcd.printChar(gamename[i], 15+i*6, 2);
JamesCummins 4:2f01b85e57f9 68 lcd.refresh();
JamesCummins 4:2f01b85e57f9 69 }
JamesCummins 15:1564bd6b713d 70 wait_ms(50);
JamesCummins 4:2f01b85e57f9 71 }
JamesCummins 5:7e8f5fad7b6b 72 lcd.printString("Press start", 9, 4);
JamesCummins 5:7e8f5fad7b6b 73 lcd.printString("to play >", 15, 5);
JamesCummins 6:952ac12c7f00 74 lcd.refresh();
JamesCummins 6:952ac12c7f00 75 bool advance = false;
JamesCummins 6:952ac12c7f00 76 while (!advance){
JamesCummins 6:952ac12c7f00 77 if (gamepad.check_event(gamepad.START_PRESSED)){
JamesCummins 6:952ac12c7f00 78 lcd.clear();
JamesCummins 6:952ac12c7f00 79 lcd.refresh();
JamesCummins 6:952ac12c7f00 80 advance = true;
JamesCummins 6:952ac12c7f00 81 }
JamesCummins 6:952ac12c7f00 82 else { advance = false; }
JamesCummins 6:952ac12c7f00 83 }
JamesCummins 0:7c96d84b673e 84 }
JamesCummins 7:6eb9cade57ab 85
JamesCummins 14:108052b6222b 86 int menu(){
JamesCummins 15:1564bd6b713d 87 StartSelection fsm[3] = {
JamesCummins 14:108052b6222b 88 {0,{OPTIONS,BRICKBREAKER,CLASSIC}},
JamesCummins 14:108052b6222b 89 {2,{CLASSIC,OPTIONS,BRICKBREAKER}},
JamesCummins 14:108052b6222b 90 {4,{BRICKBREAKER,CLASSIC,OPTIONS}}
JamesCummins 7:6eb9cade57ab 91 };
JamesCummins 14:108052b6222b 92 StartOption state = CLASSIC; //start with the arrow on the top option
JamesCummins 7:6eb9cade57ab 93 int next = 2; //next_state = 2 so that by default it doesn't change arrow position
JamesCummins 14:108052b6222b 94 while(!(gamepad.get_direction() == E)){ //select choice by pushing joystick to the right
JamesCummins 7:6eb9cade57ab 95 state = fsm[state].next_state[next];
JamesCummins 7:6eb9cade57ab 96 lcd.clear();
JamesCummins 7:6eb9cade57ab 97 if(gamepad.get_direction() == N){ next = 0;}
JamesCummins 7:6eb9cade57ab 98 else if(gamepad.get_direction() == S){ next = 1;}
JamesCummins 7:6eb9cade57ab 99 else {next = 2;}
JamesCummins 15:1564bd6b713d 100 print_start_menu(fsm[state].output);
JamesCummins 7:6eb9cade57ab 101 lcd.refresh();
JamesCummins 7:6eb9cade57ab 102 wait(0.25);
JamesCummins 7:6eb9cade57ab 103 }
JamesCummins 7:6eb9cade57ab 104 lcd.clear();
JamesCummins 7:6eb9cade57ab 105 lcd.refresh();
JamesCummins 7:6eb9cade57ab 106 return state;
JamesCummins 15:1564bd6b713d 107 }
JamesCummins 15:1564bd6b713d 108
JamesCummins 15:1564bd6b713d 109 void print_start_menu(int output){
JamesCummins 15:1564bd6b713d 110 lcd.printString(">", 0, output);
JamesCummins 15:1564bd6b713d 111 lcd.printString("Classic", 36, 0);
JamesCummins 15:1564bd6b713d 112 lcd.printString("BrickBreak", 18, 2);
JamesCummins 15:1564bd6b713d 113 lcd.printString("Options", 36, 4);
JamesCummins 15:1564bd6b713d 114 lcd.printString("(Joy R>>)", 30, 5);
JamesCummins 7:6eb9cade57ab 115 }