James Cummins / Mbed 2 deprecated el17jnc

Dependencies:   mbed

Committer:
JamesCummins
Date:
Wed Apr 17 09:36:29 2019 +0000
Revision:
19:deddb013a8e8
Parent:
18:08046153e6ad
Child:
20:4a39a1a2be51
Brickbreaker mode and menus all working. Functions all 20 lines or less

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 17:5104ecef5bd0 27 StartOption 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 17:5104ecef5bd0 32 ////////////////Main Function/////////////////
JamesCummins 8:4e306b16a941 33
JamesCummins 8:4e306b16a941 34
JamesCummins 0:7c96d84b673e 35 int main(){
JamesCummins 19:deddb013a8e8 36 int fps = 15;
JamesCummins 10:40c77d69e83c 37 init();
JamesCummins 7:6eb9cade57ab 38 startscreen();
JamesCummins 16:e846864778c4 39 while(1){
JamesCummins 17:5104ecef5bd0 40 StartOption choice_selected = menu();
JamesCummins 17:5104ecef5bd0 41 if(choice_selected == CLASSIC){ engine.classic_mode(accelerometer, gamepad, lcd, fps);}
JamesCummins 17:5104ecef5bd0 42 if(choice_selected == BRICKBREAKER){ engine.brickbreaker_mode(accelerometer, gamepad, lcd, randnoise, fps);}
JamesCummins 17:5104ecef5bd0 43 if(choice_selected == OPTIONS){ 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 18:08046153e6ad 56 accelerometer.init();
JamesCummins 10:40c77d69e83c 57 wait(1);
JamesCummins 10:40c77d69e83c 58 }
JamesCummins 0:7c96d84b673e 59
JamesCummins 7:6eb9cade57ab 60 void startscreen() {
JamesCummins 1:99d524f81566 61 lcd.clear();
JamesCummins 5:7e8f5fad7b6b 62 char gamename[] = {'L', 'A', 'B', 'Y', 'R', 'I', 'N', 'T', 'H', ' ', ' ', '\0'};
JamesCummins 3:f2e5ffd2b94c 63 int i = 0;
JamesCummins 5:7e8f5fad7b6b 64 for(int a = 0; a < 35; a++){
JamesCummins 4:2f01b85e57f9 65 lcd.clear();
JamesCummins 4:2f01b85e57f9 66 lcd.drawCircle(24+2*a, 21, 3, FILL_BLACK);
JamesCummins 4:2f01b85e57f9 67 for (i = 0; i < a/3; i++) {
JamesCummins 4:2f01b85e57f9 68 lcd.printChar(gamename[i], 15+i*6, 2);
JamesCummins 4:2f01b85e57f9 69 lcd.refresh();
JamesCummins 4:2f01b85e57f9 70 }
JamesCummins 15:1564bd6b713d 71 wait_ms(50);
JamesCummins 4:2f01b85e57f9 72 }
JamesCummins 5:7e8f5fad7b6b 73 lcd.printString("Press start", 9, 4);
JamesCummins 5:7e8f5fad7b6b 74 lcd.printString("to play >", 15, 5);
JamesCummins 6:952ac12c7f00 75 lcd.refresh();
JamesCummins 6:952ac12c7f00 76 bool advance = false;
JamesCummins 6:952ac12c7f00 77 while (!advance){
JamesCummins 6:952ac12c7f00 78 if (gamepad.check_event(gamepad.START_PRESSED)){
JamesCummins 6:952ac12c7f00 79 lcd.clear();
JamesCummins 6:952ac12c7f00 80 lcd.refresh();
JamesCummins 6:952ac12c7f00 81 advance = true;
JamesCummins 6:952ac12c7f00 82 }
JamesCummins 6:952ac12c7f00 83 else { advance = false; }
JamesCummins 6:952ac12c7f00 84 }
JamesCummins 0:7c96d84b673e 85 }
JamesCummins 7:6eb9cade57ab 86
JamesCummins 17:5104ecef5bd0 87 StartOption menu(){
JamesCummins 15:1564bd6b713d 88 StartSelection fsm[3] = {
JamesCummins 14:108052b6222b 89 {0,{OPTIONS,BRICKBREAKER,CLASSIC}},
JamesCummins 14:108052b6222b 90 {2,{CLASSIC,OPTIONS,BRICKBREAKER}},
JamesCummins 14:108052b6222b 91 {4,{BRICKBREAKER,CLASSIC,OPTIONS}}
JamesCummins 7:6eb9cade57ab 92 };
JamesCummins 14:108052b6222b 93 StartOption state = CLASSIC; //start with the arrow on the top option
JamesCummins 7:6eb9cade57ab 94 int next = 2; //next_state = 2 so that by default it doesn't change arrow position
JamesCummins 14:108052b6222b 95 while(!(gamepad.get_direction() == E)){ //select choice by pushing joystick to the right
JamesCummins 7:6eb9cade57ab 96 state = fsm[state].next_state[next];
JamesCummins 7:6eb9cade57ab 97 lcd.clear();
JamesCummins 7:6eb9cade57ab 98 if(gamepad.get_direction() == N){ next = 0;}
JamesCummins 7:6eb9cade57ab 99 else if(gamepad.get_direction() == S){ next = 1;}
JamesCummins 7:6eb9cade57ab 100 else {next = 2;}
JamesCummins 15:1564bd6b713d 101 print_start_menu(fsm[state].output);
JamesCummins 7:6eb9cade57ab 102 lcd.refresh();
JamesCummins 7:6eb9cade57ab 103 wait(0.25);
JamesCummins 7:6eb9cade57ab 104 }
JamesCummins 7:6eb9cade57ab 105 lcd.clear();
JamesCummins 7:6eb9cade57ab 106 lcd.refresh();
JamesCummins 7:6eb9cade57ab 107 return state;
JamesCummins 15:1564bd6b713d 108 }
JamesCummins 15:1564bd6b713d 109
JamesCummins 15:1564bd6b713d 110 void print_start_menu(int output){
JamesCummins 15:1564bd6b713d 111 lcd.printString(">", 0, output);
JamesCummins 15:1564bd6b713d 112 lcd.printString("Classic", 36, 0);
JamesCummins 15:1564bd6b713d 113 lcd.printString("BrickBreak", 18, 2);
JamesCummins 15:1564bd6b713d 114 lcd.printString("Options", 36, 4);
JamesCummins 15:1564bd6b713d 115 lcd.printString("(Joy R>>)", 30, 5);
JamesCummins 7:6eb9cade57ab 116 }