Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed N5110 ShiftReg PinDetect
MainMenu.cpp
00001 #include "MainMenu.h " 00002 00003 /// @file MainMenu.cpp 00004 00005 /// States for the Main Menu's internal finite state machine 00006 enum MenuState {SELECT_PLAY, SELECT_HIGHSCORES, SELECT_CONTROLS, LOAD_GAME, HIGHSCORES, CONTROLS}; 00007 00008 /// Static variables for internal fsm. 00009 00010 const int MainMenu::MENU_FSM[6][3] = { 00011 {LOAD_GAME, SELECT_PLAY, SELECT_HIGHSCORES}, // State: SELECT_PLAY 00012 {HIGHSCORES, SELECT_HIGHSCORES, SELECT_CONTROLS}, // State: SELECT_HIGHSCORES 00013 {CONTROLS, SELECT_CONTROLS, SELECT_PLAY}, // State: SELECT_CONTROLS 00014 {LOAD_GAME, LOAD_GAME, LOAD_GAME}, // State: LOAD_GAME 00015 {SELECT_HIGHSCORES, SELECT_HIGHSCORES, HIGHSCORES}, // State: HIGHSCORES 00016 {SELECT_CONTROLS, SELECT_CONTROLS, CONTROLS} // State: CONTROLS 00017 }; 00018 00019 int MainMenu::currentState; /// Current state for the state machine 00020 00021 // Callback functions (needs to be static) 00022 void MainMenu::btnAPress() 00023 { 00024 currentState = MENU_FSM[currentState][0]; 00025 } 00026 00027 void MainMenu::btnBPress() 00028 { 00029 currentState = MENU_FSM[currentState][1]; 00030 } 00031 00032 void MainMenu::btnCPress() 00033 { 00034 currentState = MENU_FSM[currentState][2]; 00035 } 00036 00037 void MainMenu::btnDPress() 00038 { 00039 currentState = MENU_FSM[currentState][2]; 00040 } 00041 00042 void MainMenu::init() 00043 { 00044 MainMenu::currentState = SELECT_PLAY; 00045 input->addBtnPressInterrupt(Input::ButtonA, &btnAPress); 00046 input->addBtnPressInterrupt(Input::ButtonB, &btnBPress); 00047 input->addBtnPressInterrupt(Input::ButtonC, &btnCPress); 00048 input->addBtnPressInterrupt(Input::ButtonD, &btnDPress); 00049 } 00050 00051 void MainMenu::update(float dt) {} // Does not do anything as program flow is controlled by interrupts, but needs to be defined as it is a virtual function. 00052 00053 void MainMenu::render() 00054 { 00055 for (int i = 0; i < HEIGHT/3; ++i) 00056 { 00057 drawImage(Image::Pattern3, 0, 3*i); // left border 00058 drawImage(Image::Pattern3, (WIDTH-3), 3*i); // right border 00059 } 00060 00061 for (int j = 0; j < WIDTH/3; ++j) 00062 { 00063 drawImage(Image::Pattern3, 3 * j, (HEIGHT-3)); // bottom border 00064 drawImage(Image::Pattern3, 3 * j, 0); // top border 00065 } 00066 00067 // Check sate 00068 int xMargin = 8; 00069 switch (currentState) 00070 { 00071 case SELECT_PLAY: 00072 lcd->printString(">Play", xMargin, 1); 00073 lcd->printString("High Scores", xMargin, 2); 00074 lcd->printString("Controls", xMargin, 3); 00075 break; 00076 00077 case SELECT_HIGHSCORES: 00078 lcd->printString("Play", xMargin, 1); 00079 lcd->printString(">High Scores", xMargin, 2); 00080 lcd->printString("Controls", xMargin, 3); 00081 break; 00082 00083 case SELECT_CONTROLS: 00084 lcd->printString("Play", xMargin, 1); 00085 lcd->printString("High Scores", xMargin, 2); 00086 lcd->printString(">Controls", xMargin, 3); 00087 break; 00088 00089 case HIGHSCORES: 00090 00091 for (int i = 0; i < 3; ++i) 00092 { 00093 std::stringstream ss; 00094 ss << Global::highscores[i].initials << " " << Global::highscores[i].score; 00095 lcd->printString(ss.str().c_str(), xMargin, i+1); 00096 } 00097 00098 00099 lcd->printString(">Back", xMargin, 4); 00100 break; 00101 00102 case CONTROLS: 00103 lcd->printString("A: Jump", xMargin, 1); 00104 lcd->printString("B: Shoot", xMargin, 2); 00105 lcd->printString("C: Pause", xMargin, 3); 00106 lcd->printString(">Back", xMargin, 4); 00107 break; 00108 00109 case LOAD_GAME: 00110 lcd->printString("Loading...", xMargin, 2); 00111 requestStateChange(GAME); 00112 break; 00113 00114 default: 00115 ; 00116 //error("MainMenu: Invalid internal state"); 00117 00118 } 00119 }
Generated on Tue Jul 12 2022 21:30:55 by
