A retro gaming programme, designed for use on a portable embedded system. Incorporates power saving techniques.
Dependencies: ConfigFile N5110 PowerControl beep mbed
Diff: main.cpp
- Revision:
- 11:6b8416a8ddb3
- Parent:
- 10:947d35365ab8
- Child:
- 12:eedda6554615
--- a/main.cpp Thu Apr 16 16:23:42 2015 +0000 +++ b/main.cpp Thu Apr 16 20:39:57 2015 +0000 @@ -151,74 +151,6 @@ wait(0.6); } -//selection menu/////////////////////////////////////////// -void mainMenu() -{ - //bottom border - lcd.drawRect(0,47,84,0,1); - //top border - lcd.drawRect(0,0,84,2,1); - - //print 'Xtreme Tower' - lcd.printString("Xtreme",4,25); - lcd.printString("Tower",44,25); - - //title outline - lcd.drawRect(3,6,77,10,0); - -////castle //x, y, w, h, fill////////////////////// - - //castle main bulk - lcd.drawRect(59,32,21,8,1); - - //left window bulk - lcd.drawRect(59,22,2,10,1); - //centre left window bulk - lcd.drawRect(65,22,2,10,1); - //centre right window bulk - lcd.drawRect(72,22,2,10,1); - //right window bulk - lcd.drawRect(78,22,2,10,1); - //central window bulk - lcd.drawRect(68,25,3,7,1); - - //central window bulk - lcd.drawRect(75,28,0,0,1); - lcd.drawRect(77,28,0,0,1); - lcd.drawRect(64,28,0,0,1); - lcd.drawRect(62,28,0,0,1); - - //above left window bulk - lcd.drawRect(62,25,3,2,1); - //above right window bulk - lcd.drawRect(75,25,2,2,1); - - //lower right line - lcd.drawRect(71,42,9,0,1); - //upper right line - lcd.drawRect(70,41,10,0,1); - - //upper left line - lcd.drawRect(59,41,10,0,1); - //lower left line - lcd.drawRect(59,42,9,0,1); - - //bottom left bulk - lcd.drawRect(59,43,8,3,1); - //bottom right bulk - lcd.drawRect(72,43,8,3,1); - - //option arrows - lower - lcd.drawRect(27,42,4,0,1); - lcd.drawRect(28,43,2,0,1); - lcd.drawRect(29,44,0,0,1); - - //option arrows - higher - lcd.drawRect(27,29,4,0,1); - lcd.drawRect(28,28,2,0,1); - lcd.drawRect(29,27,0,0,1); -} - // static background void backGround() { @@ -413,6 +345,23 @@ } } +//void writeDataToFile(float data, char dataTwo[30]) +//{ +// leds = 15; // turn on LEDs for feedback +// FILE *fp = fopen("/local/datalog.csv", "a"); // open 'log.txt' for appending +// +// time_t seconds = time(NULL); // get current time +// +// // format time into a string (time and date) +// strftime(dataTwo, 30 , "%R %x", localtime(&seconds)); +// +// // if the file doesn't exist it is created, if it exists, data is appended to the end +// fprintf(fp,"%s, %.2f \n",dataTwo,data); // print string to file +// +// fclose(fp); // close file +// leds = 0; // turn off LEDs to signify file access has finished +//} + // clears old pixels and keeps set pixels void startrek() { @@ -464,17 +413,19 @@ } lcd.refresh(); } + // sound / light when buttonA is closed void actionButton() { buttonA.mode(PullDown); if (buttonA == 1) { ledY = 1; - buzzer.beep(1000,0.2);//frequeny/duration - - serial.printf("buttonA\n");//for debugging + //buzzer.beep(1000,0.2);//frequeny/duration + + serial.printf("buttonA\n");//for debugging } else { - ledY = 0;} + ledY = 0; + } } // sound / light when buttonB is closed @@ -483,27 +434,236 @@ buttonB.mode(PullDown); if (buttonB == 1) { ledY = 1; - buzzer.beep(400,0.2);//frequency/duration - + //buzzer.beep(400,0.2);//frequency/duration + serial.printf("buttonB\n");//for debugging } else { - ledY = 0;} + ledY = 0; + } +} + +// presents main menu options +void mainMenu(int& mainOption) +{ + actionButton();//set audible/light for button + + // joystick selection + if (printFlag) { //if flag set, clear flag and print joystick values to serial port + printFlag = 0; + + // option up + if (joystick.direction == UP) { + serial.printf(" UP\n"); + mainOption = mainOption--; + if (mainOption < 0)mainOption = 0; + } + // option down + if (joystick.direction == DOWN) { + serial.printf(" DOWN\n"); + mainOption = mainOption++; + if (mainOption > 2)mainOption = 2; + } + // Centre / Unknown orientation + if (joystick.direction == CENTRE) + serial.printf(" CENTRE\n"); + if (joystick.direction == UNKNOWN) + serial.printf(" Unsupported direction\n"); + + // 'Play Game' option 1 + if (mainOption == 0) { + lcd.printString("Play Game",3,4); + } + // 'High Scores' option 2 + if (mainOption == 1) { + lcd.printString(" Scores ",3,4); + } + // 'Options' option 3 + if (mainOption == 2) { + lcd.printString(" Options ",3,4); + } + } +} + +// draws main menu +void drawMainMenu() +{ + //bottom border + lcd.drawRect(0,47,84,0,1); + //top border + lcd.drawRect(0,0,84,2,1); + + //print 'Xtreme Tower' + lcd.printString("Xtreme",4,25); + lcd.printString("Tower",44,25); + + //title outline + lcd.drawRect(3,6,77,10,0); + +////castle //x, y, w, h, fill////////////////////// + + //castle main bulk + lcd.drawRect(59,32,21,8,1); + + //left window bulk + lcd.drawRect(59,22,2,10,1); + //centre left window bulk + lcd.drawRect(65,22,2,10,1); + //centre right window bulk + lcd.drawRect(72,22,2,10,1); + //right window bulk + lcd.drawRect(78,22,2,10,1); + //central window bulk + lcd.drawRect(68,25,3,7,1); + + //central window bulk + lcd.drawRect(75,28,0,0,1); + lcd.drawRect(77,28,0,0,1); + lcd.drawRect(64,28,0,0,1); + lcd.drawRect(62,28,0,0,1); + + //above left window bulk + lcd.drawRect(62,25,3,2,1); + //above right window bulk + lcd.drawRect(75,25,2,2,1); + + //lower right line + lcd.drawRect(71,42,9,0,1); + //upper right line + lcd.drawRect(70,41,10,0,1); + + //upper left line + lcd.drawRect(59,41,10,0,1); + //lower left line + lcd.drawRect(59,42,9,0,1); + + //bottom left bulk + lcd.drawRect(59,43,8,3,1); + //bottom right bulk + lcd.drawRect(72,43,8,3,1); + + //option arrows - lower + lcd.drawRect(27,42,4,0,1); + lcd.drawRect(28,43,2,0,1); + lcd.drawRect(29,44,0,0,1); + + //option arrows - higher + lcd.drawRect(27,29,4,0,1); + lcd.drawRect(28,28,2,0,1); + lcd.drawRect(29,27,0,0,1); +} + +// presents exit menu options +void exitMenu(int& exitOption) +{ + + if (printFlag) { //if flag set, clear flag and print joystick values to serial port + printFlag = 0; + + // check joystick direction + if (joystick.direction == LEFT) { + serial.printf(" LEFT\n"); + exitOption--; + if(exitOption < 0)exitOption = 0; + } + if (joystick.direction == RIGHT) { + serial.printf(" RIGHT\n"); + exitOption++; + if(exitOption > 1)exitOption = 1; + } + if (joystick.direction == CENTRE) + serial.printf(" CENTRE\n"); + if (joystick.direction == UNKNOWN) + serial.printf(" Unsupported direction\n"); + } + // draws option cursor + if(exitOption == 0) { + lcd.printString("YES",29,27); + } + if(exitOption == 1) { + lcd.printString(" NO",29,27); + } +} + +// draws exit menu +void drawExitMenu() +{ + // set exit menu + lcd.clear(); + lcd.drawRect(8,6,70,30,0);//title outline + lcd.printString("Exit Game?",10,25); + backGround(); + + // option arrow - right + lcd.drawRect(55,25,0,4,1); + lcd.drawRect(56,26,0,2,1); + lcd.drawRect(57,27,0,0,1); + + // option arrow - left + lcd.drawRect(27,25,0,4,1); + lcd.drawRect(26,26,0,2,1); + lcd.drawRect(25,27,0,0,1); +} + +void optionsMenu(int& option) +{ + // joystick selection + if (printFlag) { //if flag set, clear flag and print joystick values to serial port + printFlag = 0; + + // option up + if (joystick.direction == UP) { + serial.printf(" UP\n"); + option = option--; + if (option < 0)option = 0; + } + // option down + if (joystick.direction == DOWN) { + serial.printf(" DOWN\n"); + option = option++; + if (option > 1)option = 1; + } + // Centre / Unknown orientation + if (joystick.direction == CENTRE) + serial.printf(" CENTRE\n"); + if (joystick.direction == UNKNOWN) + serial.printf(" Unsupported direction\n"); + + // 'Difficulty' option 1 + if (option == 0) { + lcd.drawCircle(72,27,2,1); + refreshCursor3(); + } + // 'Sound FX' option 2 + if (option == 1) { + lcd.drawCircle(72,35,2,1); + refreshCursor2(); + } + } +} + +void drawOptionsMenu() +{ + lcd.clear();//clear screen + backGround(); + lcd.drawRect(3,6,77,10,0);//title outline + lcd.drawRect(0,47,84,0,1);//bottom border + lcd.drawRect(0,0,84,2,1);//top border + lcd.printString("Options",20,7);//title + lcd.printString("Difficulty",3,9); + lcd.printString("Sound FX",3,10); } int main() { - // Power indicator - RED LED - ledR = 1; + ledR = 1;//power LED on - // helps return exit menu to main menu loop - int exitFlag = 0; + int exitFlag = 0;//exit flag - // initialize time seed for psuedo randomaisation - srand (time(NULL)); + srand (time(NULL));//initial seed for randomisation - // generate random x co-ordinates for falling hazards - // (initial values only) - // value between 3 and 76 + // initial random x co-ordinates + // for falling hazards + // (values between 3 and 76) randX1 = rand() % 74 + 5; randX2 = rand() % 74 + 5; randX3 = rand() % 74 + 5; @@ -514,7 +674,6 @@ calibrateJoystick();//get centred values of joystick pollJoystick.attach(&updateJoystick,1.0/10.0);//read joystick 10 times per second - // initialise menu lcd.init();//initialise screen welcome();//welcome screen lcd.clear();//clear pixels @@ -525,58 +684,19 @@ int option = 0;//counter for options menu int subOption = 0;//counter for sub options menu - // loop 1 - Main menu + // loop 1 - mainMenu while(1) { - mainMenu(); - actionButton(); + drawMainMenu();//draws main menu + mainMenu(mainOption);//presents main menu options - // joystick selection - if (printFlag) { //if flag set, clear flag and print joystick values to serial port - printFlag = 0; - - // option up - if (joystick.direction == UP) { - serial.printf(" UP\n"); - mainOption = mainOption--; - if (mainOption < 0)mainOption = 0; - } - // option down - if (joystick.direction == DOWN) { - serial.printf(" DOWN\n"); - mainOption = mainOption++; - if (mainOption > 2)mainOption = 2; - } - // Centre / Unknown orientation - if (joystick.direction == CENTRE) - serial.printf(" CENTRE\n"); - if (joystick.direction == UNKNOWN) - serial.printf(" Unsupported direction\n"); - - // 'Play Game' option 1 - if (mainOption == 0) { - lcd.printString("Play Game",3,4); - } - // 'High Scores' option 2 - if (mainOption == 1) { - lcd.printString(" Scores ",3,4); - } - // 'Options' option 3 - if (mainOption == 2) { - lcd.printString(" Options ",3,4); - } - } - -//////////// Game Loop ///////////////////////////////////////////////////////////// - - // 'Play Game' selected + // if 'Play Game' selected if ((mainOption == 0)&&(buttonA == 1)) { - lcd.clear(); - actionButton(); backButton(); - backGround(); + lcd.clear();//clears screen + backGround();//draw background // loop 3 - Game loop while(1) { @@ -589,7 +709,6 @@ actionButton(); backButton(); - pixelNinja();//set character hazards();//initiates hazards hazardFall();//increments hazards towards floor @@ -662,50 +781,11 @@ if(buttonB == 1) { - // set exit menu - lcd.clear(); - lcd.drawRect(8,6,70,30,0);//title outline - lcd.printString("Exit Game?",10,25); - backGround(); - - // option arrow - right - lcd.drawRect(55,25,0,4,1); - lcd.drawRect(56,26,0,2,1); - lcd.drawRect(57,27,0,0,1); - - // option arrow - left - lcd.drawRect(27,25,0,4,1); - lcd.drawRect(26,26,0,2,1); - lcd.drawRect(25,27,0,0,1); + drawExitMenu();//draws the escape menu while(1) { - if (printFlag) { //if flag set, clear flag and print joystick values to serial port - printFlag = 0; - - // check joystick direction - if (joystick.direction == LEFT) { - serial.printf(" LEFT\n"); - exitOption--; - if(exitOption < 0)exitOption = 0; - } - if (joystick.direction == RIGHT) { - serial.printf(" RIGHT\n"); - exitOption++; - if(exitOption > 1)exitOption = 1; - } - if (joystick.direction == CENTRE) - serial.printf(" CENTRE\n"); - if (joystick.direction == UNKNOWN) - serial.printf(" Unsupported direction\n"); - } - // draws option cursor - if(exitOption == 0) { - lcd.printString("YES",29,27); - } - if(exitOption == 1) { - lcd.printString(" NO",29,27); - } + exitMenu(exitOption);//presents exit options // 'exit' option YES if((buttonA == 1)&&(exitOption == 0)) { //returns to menu @@ -778,145 +858,105 @@ actionButton(); backButton(); - - lcd.clear();//clear screen - - backGround(); - lcd.drawRect(3,6,77,10,0);//title outline - lcd.drawRect(0,47,84,0,1);//bottom border - lcd.drawRect(0,0,84,2,1);//top border - lcd.printString("Options",20,7);//title - lcd.printString("Difficulty",3,9); - lcd.printString("Sound FX",3,10); + drawOptionsMenu();//draws options menu while(1) { actionButton(); backButton(); - // refreshCursor(); - - // joystick selection - if (printFlag) { //if flag set, clear flag and print joystick values to serial port - printFlag = 0; - - // option up - if (joystick.direction == UP) { - serial.printf(" UP\n"); - option = option--; - if (option < 0)option = 0; - } - // option down - if (joystick.direction == DOWN) { - serial.printf(" DOWN\n"); - option = option++; - if (option > 1)option = 1; - } - // Centre / Unknown orientation - if (joystick.direction == CENTRE) - serial.printf(" CENTRE\n"); - if (joystick.direction == UNKNOWN) - serial.printf(" Unsupported direction\n"); - - // 'Difficulty' option 1 - if (option == 0) { - lcd.drawCircle(72,27,2,1); - refreshCursor3(); - } - // 'Sound FX' option 2 - if (option == 1) { - lcd.drawCircle(72,35,2,1); - refreshCursor2(); - } + optionsMenu(option);//presents options ////////////////////// difficulty settings //////////////////////////////////// - if ((option == 0)&&(buttonA == 1)) { + if ((option == 0)&&(buttonA == 1)) { + + actionButton(); + backButton(); + + lcd.clear(); + backGround(); + lcd.drawRect(0,47,84,0,1);//bottom border + lcd.drawRect(0,0,84,2,1);//top border + lcd.printString("*Difficulty*",5,7);//title + lcd.printString("Easy",5,8);//title + lcd.printString("Normal",5,9);//title + lcd.printString("Forget It",5,10);//title + + while(1) { actionButton(); backButton(); - lcd.clear(); - backGround(); - lcd.drawRect(0,47,84,0,1);//bottom border - lcd.drawRect(0,0,84,2,1);//top border - lcd.printString("*Difficulty*",5,7);//title - lcd.printString("Easy",5,8);//title - lcd.printString("Normal",5,9);//title - lcd.printString("Forget It",5,10);//title - - - while(1) { - - actionButton(); - backButton(); + // joystick selection + if (printFlag) {//if flag set, clear flag,print joystick values + printFlag = 0; - // joystick selection - if (printFlag) {//if flag set, clear flag,print joystick values - printFlag = 0; + // option up + if (joystick.direction == UP) { + serial.printf(" UP\n"); + subOption = subOption--; + if (subOption < 0)subOption = 0; + } + // option down + if (joystick.direction == DOWN) { + serial.printf(" DOWN\n"); + subOption = subOption++; + if (subOption > 2)subOption = 2; + } + // Centre / Unknown orientation + if (joystick.direction == CENTRE) + serial.printf(" CENTRE\n"); + if (joystick.direction == UNKNOWN) + serial.printf(" Unsupported direction\n"); - // option up - if (joystick.direction == UP) { - serial.printf(" UP\n"); - subOption = subOption--; - if (subOption < 0)subOption = 0; - } - // option down - if (joystick.direction == DOWN) { - serial.printf(" DOWN\n"); - subOption = subOption++; - if (subOption > 2)subOption = 2; + // 'Easy' option 1 + if (subOption == 0) { + lcd.drawCircle(72,19,2,1); + refreshCursor2(); + refreshCursor3(); + if(buttonA ==1) { //select easy + fall = 1; } - // Centre / Unknown orientation - if (joystick.direction == CENTRE) - serial.printf(" CENTRE\n"); - if (joystick.direction == UNKNOWN) - serial.printf(" Unsupported direction\n"); + } + // 'Normal' option 2 + if (subOption == 1) { + lcd.drawCircle(72,27,2,1); + refreshCursor1(); + refreshCursor3(); - // 'Easy' option 1 - if (subOption == 0) { - lcd.drawCircle(72,19,2,1); - refreshCursor2(); - refreshCursor3(); - if(buttonA ==1){//select easy - fall = 1;} + if(buttonA == 1) { //select normal + fall = 2; } - // 'Normal' option 2 - if (subOption == 1) { - lcd.drawCircle(72,27,2,1); - refreshCursor1(); - refreshCursor3(); - - if(buttonA == 1){//select normal - fall = 2;} + } + // 'Forget It' option 3 + if (subOption == 2) { + lcd.drawCircle(72,35,2,1); + refreshCursor1(); + refreshCursor2(); + + if(buttonA == 1) { //select difficult + fall = 3; } - // 'Forget It' option 3 - if (subOption == 2) { - lcd.drawCircle(72,35,2,1); - refreshCursor1(); - refreshCursor2(); - - if(buttonA == 1){//select difficult - fall = 3;} - - } - if(buttonB == 1) { - lcd.clear(); - break; - } + + } + if(buttonB == 1) { + lcd.clear(); + break; } } } + } - // back to menu - if(buttonB == 1) { - lcd.clear(); - break; - } + // back to menu + if(buttonB == 1) { + lcd.clear(); + break; } } } } } + // read default positions of the joystick to calibrate later readings void calibrateJoystick() {