Ahmed Adamjee
/
SnakeVSBlock
Snake vs Block Game to be run upon K64F.
Diff: MenuClasses/StartScreen/StartScreen.cpp
- Revision:
- 76:7fa91122907f
- Parent:
- 68:b9cfd27987ac
- Child:
- 80:51ca38c5dcdf
diff -r f00c79f79b6a -r 7fa91122907f MenuClasses/StartScreen/StartScreen.cpp --- a/MenuClasses/StartScreen/StartScreen.cpp Sun May 05 13:04:09 2019 +0000 +++ b/MenuClasses/StartScreen/StartScreen.cpp Sun May 05 15:00:34 2019 +0000 @@ -230,18 +230,19 @@ lcd.clear(); //StartScreen::init(); //pad.init(); - while ((pad.check_event(Gamepad::A_PRESSED) == false)&&(pad.check_event(Gamepad::START_PRESSED) == false)) { //Change this to if button pressed. + while ((pad.check_event(Gamepad::A_PRESSED) == false)&&(pad.check_event(Gamepad::START_PRESSED) == false)) { + //This menu loop won't be skipped unless the player decides to press START/A. + lcd.clear(); StartScreen::mainMenu(lcd, pad); + lcd.refresh(); + } pad.tone(1000.0,0.1); - wait(1/controlSensitivity); StartScreen::nextMenu(lcd, pad); //after all main menu operations have been completed, this function allows us to get to the next menu. } -void StartScreen::mainMenu(N5110 &lcd, Gamepad &pad) +void StartScreen::mainMenu(N5110 &lcd, Gamepad &pad) //Displays the main menu contents, and then allows the user to select the next menu using the selection arrow. { - lcd.clear(); - StartScreen::drawSelectionArrow(lcd, pad); //draws arrow to select menu option. lcd.printString("Snake vs Block",0,0); @@ -249,12 +250,11 @@ lcd.printString("Settings",0,3); lcd.printString("Stats",0,4); lcd.printString("Tutorial",0,5); - lcd.refresh(); - wait(1/controlSensitivity); } void StartScreen::drawSelectionArrow(N5110 &lcd, Gamepad &pad) { + wait(1/controlSensitivity); Direction d = pad.get_direction(); if(((d==N)||(pad.check_event(Gamepad::L_PRESSED) == true))&&(menu_index>16)) { menu_index=menu_index-8; // menu_index is the position of the selection arrow in menu and also the index of the case structure to select the next menu in StartScreen::NextMenu(lcd, pad). @@ -262,15 +262,17 @@ if(((d==S)||(pad.check_event(Gamepad::R_PRESSED) == true))&&(menu_index<40)) { menu_index=menu_index+8; // menu_index is the position of the selection arrow in menu and also the index of the case structure to select the next menu in StartScreen::NextMenu(lcd, pad). } - lcd.drawSprite(65,menu_index,7,9,(int *)arrow); // menu_index is the postion of where the arrow will be drawn and is determined by the above if command using joystick. + lcd.drawSprite(60,menu_index,7,9,(int *)arrow); // menu_index is the postion of where the arrow will be drawn and is determined by the above if command using joystick. } +//////////////////////////////DECIDES THE NEXT MENU PAGE////////////////////////////// + void StartScreen::nextMenu(N5110 &lcd, Gamepad &pad) { switch (menu_index) { //this menu_index saves the value from the coordinates of arrow in main menu, and allows us to select the next menu accordingly. case 16: - game_mode(lcd, pad); //calls game mode - game_speed(lcd, pad); //calls game speed + game_mode(lcd, pad); //calls game mode after play has been pressed. + game_speed(lcd, pad); //calls game speed after the game mode has been selected. return; //This forces us out of the menu class and back into int main(). case 24: float *cs_sc; @@ -290,14 +292,18 @@ } } + +//////////////////////////////GAME MODE SELECTION////////////////////////////// + void StartScreen::game_mode(N5110 &lcd, Gamepad &pad) { lcd.clear(); - wait(2/controlSensitivity); //pad.init(); while ((pad.check_event(Gamepad::A_PRESSED) == false)&&(pad.check_event(Gamepad::START_PRESSED) == false)) { //Change this to if button pressed. - StartScreen::showModeOptions(lcd); //displays to the user what are the mode options - StartScreen::selectMode(pad); //the mode is selected by moving joystick in this function. + + lcd.clear(); + StartScreen::selectMode(lcd, pad); //displays to the user what are the mode options + lcd.refresh(); if (StartScreen::checkBackPressed(pad)) { break; //if back is pressed, the while loop is escaped. @@ -305,15 +311,15 @@ } pad.tone(1000.0,0.1); - + if(_backPressed) { //if back was pressed in the while loop, the previous menu is called. menu(lcd, pad); } } -void StartScreen::showModeOptions(N5110 &lcd) +void StartScreen::selectMode(N5110 &lcd, Gamepad &pad) { - lcd.clear(); + StartScreen::scrollModeSelection(pad); //the mode is selected by moving joystick in this function. switch (g_mode) { case 1: lcd.printString("Joystick",18,1); @@ -328,13 +334,12 @@ break; } - lcd.refresh(); } -void StartScreen::selectMode(Gamepad &pad) +void StartScreen::scrollModeSelection(Gamepad &pad) { Direction d = pad.get_direction(); - wait(1/controlSensitivity); + wait(1/controlSensitivity);//to make the joystick selection's speed inversely proportional to controlSensitivity. if(((d==E)||(d==W)||(pad.check_event(Gamepad::R_PRESSED) == true)||(pad.check_event(Gamepad::L_PRESSED) == true))&&(g_mode==1)) { g_mode=2; } @@ -344,6 +349,8 @@ } } +//////////////////////////////INSTRUCTIONS FOR MOTION CONTROL////////////////////////////// + void StartScreen::motionControlInstructions(N5110 &lcd) { lcd.clear(); @@ -356,14 +363,18 @@ wait(2); } + +//////////////////////////////GAME SPEED SELECTION////////////////////////////// + void StartScreen::game_speed(N5110 &lcd, Gamepad &pad) { lcd.clear(); - wait(2/controlSensitivity); //pad.init(); while ((pad.check_event(Gamepad::A_PRESSED) == false)&&(pad.check_event(Gamepad::START_PRESSED) == false)) { //Change this to if button pressed. - StartScreen::selectSpeedPage(pad); //this swipes through the speed pages, dependent on the joystick input. - StartScreen::showSpeedOptions(lcd); //this displays all the speed options and saves the data obtained (fps) for use in main(). + + lcd.clear(); + StartScreen::selectSpeed(lcd, pad); //this displays all the speed options and saves the data obtained (fps) for use in main(). + lcd.refresh(); if (StartScreen::checkBackPressed(pad)) { break; //if back is pressed, the while loop is escaped. @@ -377,10 +388,36 @@ } -void StartScreen::selectSpeedPage(Gamepad &pad) +void StartScreen::selectSpeed(N5110 &lcd, Gamepad &pad) //decrease code size. +{ + StartScreen::scrollSpeedSelection(pad); //this swipes through the speed pages, dependent on the joystick input. + lcd.drawSprite(10,22,13,8,(int *)navL); //Function used to draw the sprite. + lcd.drawSprite(65,22,13,8,(int *)navR); //Function used to draw the sprite. + lcd.printString("Game Speed",10,1); + switch (speed_index) { + case 1: + lcd.printString("SNAKE",28,3); + fps = 15; + break; + case 2: + lcd.printString("HUMAN",28,3); + fps = 22; + break; + case 3: + lcd.printString("HORSE",28,3); + fps = 26; + break; + case 4: + lcd.printString("CHEETHA",21,3); + fps = 30; + } + +} + +void StartScreen::scrollSpeedSelection(Gamepad &pad) { Direction d = pad.get_direction(); - wait(1/controlSensitivity); + wait(1/controlSensitivity);//to make the joystick selection's speed inversely proportional to controlSensitivity. if(((d==E)||(pad.check_event(Gamepad::R_PRESSED) == true))&&(speed_index==4)) { speed_index=1; } else if(((d==W)||(pad.check_event(Gamepad::L_PRESSED) == true))&&(speed_index==1)) { @@ -391,30 +428,3 @@ speed_index=speed_index-1; } } - -void StartScreen::showSpeedOptions(N5110 &lcd) //decrease code size. -{ - lcd.clear(); - lcd.drawSprite(10,22,13,8,(int *)navL); //Function used to draw the sprite. - lcd.drawSprite(65,22,13,8,(int *)navR); //Function used to draw the sprite. - lcd.printString("Game Speed",10,1); - switch (speed_index) { - case 1: - lcd.printString("SNAKE",28,3); - fps = 12; - break; - case 2: - lcd.printString("HUMAN",28,3); - fps = 18; - break; - case 3: - lcd.printString("HORSE",28,3); - fps = 22; - break; - case 4: - lcd.printString("CHEETHA",21,3); - fps = 27; - } - - lcd.refresh(); -} \ No newline at end of file