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: N5110 PinDetect PowerControl mbed
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::init() 00038 { 00039 MainMenu::currentState = SELECT_PLAY; 00040 input->addBtnPressInterrupt(Input::ButtonA, &btnAPress); 00041 input->addBtnPressInterrupt(Input::ButtonB, &btnBPress); 00042 input->addBtnPressInterrupt(Input::ButtonC, &btnCPress); 00043 } 00044 00045 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. 00046 00047 void MainMenu::render() 00048 { 00049 for (int i = 0; i < HEIGHT/3; ++i) 00050 { 00051 drawImage(Image::Pattern3, 0, 3*i); // left border 00052 drawImage(Image::Pattern3, (WIDTH-3), 3*i); // right border 00053 } 00054 00055 for (int j = 0; j < WIDTH/3; ++j) 00056 { 00057 drawImage(Image::Pattern3, 3 * j, (HEIGHT-3)); // bottom border 00058 drawImage(Image::Pattern3, 3 * j, 0); // top border 00059 } 00060 00061 // Check sate 00062 int xMargin = 8; 00063 switch (currentState) 00064 { 00065 case SELECT_PLAY: 00066 lcd->printString(">Play", xMargin, 1); 00067 lcd->printString("High Scores", xMargin, 2); 00068 lcd->printString("Controls", xMargin, 3); 00069 break; 00070 00071 case SELECT_HIGHSCORES: 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_CONTROLS: 00078 lcd->printString("Play", xMargin, 1); 00079 lcd->printString("High Scores", xMargin, 2); 00080 lcd->printString(">Controls", xMargin, 3); 00081 break; 00082 00083 case HIGHSCORES: 00084 00085 for (int i = 0; i < 3; ++i) 00086 { 00087 std::stringstream ss; 00088 ss << Global::highscores[i].initials << " " << Global::highscores[i].score; 00089 lcd->printString(ss.str().c_str(), xMargin, i+1); 00090 } 00091 00092 00093 lcd->printString(">Back", xMargin, 4); 00094 break; 00095 00096 case CONTROLS: 00097 lcd->printString("A: Jump", xMargin, 1); 00098 lcd->printString("B: Shoot", xMargin, 2); 00099 lcd->printString("C: Pause", xMargin, 3); 00100 lcd->printString(">Back", xMargin, 4); 00101 break; 00102 00103 case LOAD_GAME: 00104 lcd->printString("Loading...", xMargin, 2); 00105 requestStateChange(GAME); 00106 break; 00107 00108 default: 00109 ; 00110 //error("MainMenu: Invalid internal state"); 00111 00112 } 00113 }
Generated on Tue Jul 12 2022 21:59:47 by
1.7.2