A complex 2D-dungeon game on LPC1768 in SWJTU-Leeds Joint School XJEL2645 project. Referenced from the framework contributed by https://os.mbed.com/users/Siriagus/code/SimplePlatformGame/
Dependencies: mbed N5110 ShiftReg PinDetect
main.cpp
- Committer:
- Siriagus
- Date:
- 2015-04-28
- Revision:
- 3:4e3f342a135c
- Parent:
- 2:0ae5ac8b0cac
- Child:
- 4:d6661b976359
File content as of revision 3:4e3f342a135c:
/** @brief Simple platform game developed for ELEC2645 Embedded Systems Project at University of Leeds @author Andreas Garmannslund **/ #include "mbed.h" #include "N5110.h" #include "PowerControl.h" #include "PinDetect.h" #include "Joystick.h" #include <string> #include "State.h" #include "MainMenu.h" #include "map.h" #include "images.h" #include <ctime> // Redefine pin names for simple access. #define JOY_H p17 #define JOY_V p16 #define JOY_BTN p15 #define LED_POT p20 #define BUTTON_A p28 #define BUTTON_B p27 #define BUTTON_C p29 // Components N5110 *lcd; // VCC, SCE, RST, D/C, MOSI, SCLK and LED Joystick *joystick; // Brightness potentiometer AnalogIn ledPot(LED_POT); /* // Buttons DigitalIn btnA(p27); DigitalIn btnB(p28); DigitalIn btnC(p29); */ // Debugging Serial pc(USBTX, USBRX); BusOut leds(LED1, LED2, LED3, LED4); // @brief Clears the screen and fill it with the image in the argument. void clearAndDrawImage(const int img[BANKS][WIDTH]) { for (int i = 0; i < BANKS; ++i) { for (int j = 0; j < WIDTH; ++j) { lcd->buffer[j][i] = img[i][j]; } } lcd->refresh(); } //State *stateObj; // current state object // States //enum MenuState {SELECT_MENU, HIGH_SCORES, CONTROLS, LOAD_GAME}; enum MenuState {SELECT_PLAY, SELECT_HIGHSCORES, SELECT_CONTROLS, LOAD_GAME, HIGHSCORES, CONTROLS}; int currentState; // current state enum NewMenuState; // fsm[state][input] where input are 0, 1, 2 corresponding to buttons A, B, C int fsm[6][3] = { {LOAD_GAME, SELECT_PLAY, SELECT_HIGHSCORES}, // State: SELECT_PLAY {HIGHSCORES, SELECT_HIGHSCORES, SELECT_CONTROLS}, // State: SELECT_HIGHSCORES {CONTROLS, SELECT_CONTROLS, SELECT_PLAY}, // State: SELECT_CONTROLS {LOAD_GAME, LOAD_GAME, LOAD_GAME}, // State: LOAD_GAME {SELECT_HIGHSCORES, SELECT_HIGHSCORES, HIGHSCORES}, // State: HIGHSCORES {SELECT_CONTROLS, SELECT_CONTROLS, CONTROLS} // State: CONTROLS }; PinDetect btnA(BUTTON_A); PinDetect btnB(BUTTON_B); PinDetect btnC(BUTTON_C); void btnAPressed() {currentState = fsm[currentState][0];} void btnBPressed() {currentState = fsm[currentState][1];} void btnCPressed() {currentState = fsm[currentState][2];} void init(); void cleanUp(); int main() { init(); while(true) { lcd->clear(); joystick->update(); lcd->setBrightness(1.0 - ledPot); // Update brightness of screen // Update switch (currentState) { case SELECT_PLAY: lcd->printString(">Play", 10, 1); lcd->printString("High Scores", 10, 2); lcd->printString("Controls", 10, 3); break; case SELECT_HIGHSCORES: lcd->printString("Play", 10, 1); lcd->printString(">High Scores", 10, 2); lcd->printString("Controls", 10, 3); break; case SELECT_CONTROLS: lcd->printString("Play", 10, 1); lcd->printString("High Scores", 10, 2); lcd->printString(">Controls", 10, 3); break; case HIGHSCORES: // Placeholder TODO: Actually high scores lcd->printString("High Scores", 10, 0); lcd->printString("AND 1000000", 10, 1); lcd->printString("AND 500000", 10, 2); lcd->printString("AND 100", 10, 3); lcd->printString(">Back", 10, 4); break; case CONTROLS: lcd->printString("Controls", 10, 0); lcd->printString("A: Jump", 10, 1); lcd->printString("B: Shoot", 10, 2); lcd->printString("C: Pause", 10, 3); lcd->printString(">Back", 10, 4); break; case LOAD_GAME: clearAndDrawImage(logo); break; } lcd->refresh(); Sleep(); } cleanUp(); return 0; } void init() { // Init LCD lcd = new N5110(p7, p8, p9, p10, p11, p13, p26); lcd->init(); lcd->normalMode(); lcd->setBrightness(1.0 - ledPot); // Update brightness of screen // Init joystick joystick = new Joystick(JOY_H, JOY_V, JOY_BTN); joystick->calibrate(); // Init buttons btnA.attach_asserted(&btnAPressed); btnB.attach_asserted(&btnBPressed); btnC.attach_asserted(&btnCPressed); btnA.setSampleFrequency(); btnB.setSampleFrequency(); btnC.setSampleFrequency(); // Set initial state currentState = SELECT_PLAY; } void cleanUp() { delete lcd; delete joystick; }