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
Diff: main.cpp
- Revision:
- 4:d6661b976359
- Parent:
- 3:4e3f342a135c
- Child:
- 5:100d960fc6d5
--- a/main.cpp Tue Apr 28 15:42:22 2015 +0000 +++ b/main.cpp Fri May 01 00:38:59 2015 +0000 @@ -8,16 +8,16 @@ #include "N5110.h" #include "PowerControl.h" #include "PinDetect.h" +#include <string> +#include <ctime> #include "Joystick.h" -#include <string> #include "State.h" -#include "MainMenu.h" -#include "map.h" #include "images.h" +#include "InputManager.h" -#include <ctime> + // Redefine pin names for simple access. #define JOY_H p17 @@ -30,25 +30,24 @@ #define BUTTON_B p27 #define BUTTON_C p29 -// Components +// Input and Output N5110 *lcd; // VCC, SCE, RST, D/C, MOSI, SCLK and LED -Joystick *joystick; + +InputManager *input; + +// Replaced by InputManager +/*Joystick *joystick; +PinDetect *btnA; +PinDetect *btnB; +PinDetect *btnC;*/ // 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]) { @@ -62,34 +61,10 @@ 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(); @@ -98,56 +73,19 @@ { init(); + time_t dt = time(NULL); + while(true) { lcd->clear(); - joystick->update(); + input->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; - - } + // update + + // render + lcd->refresh(); Sleep(); @@ -158,6 +96,25 @@ return 0; } +void ledToggle() +{ + leds[0] = !leds[0]; +} + +int ctr = 0; +void ledToggle4() {leds[3] = !leds[3];} +void ledToggle2() +{ + leds[1] = !leds[1]; + + if (++ctr > 4) + input->addBtnPressInterrupt(input->btnB, ledToggle4); + +} + + +void ledToggle3() {leds[2] = !leds[2];} + void init() { // Init LCD @@ -166,25 +123,18 @@ lcd->normalMode(); lcd->setBrightness(1.0 - ledPot); // Update brightness of screen - // Init joystick - joystick = new Joystick(JOY_H, JOY_V, JOY_BTN); - joystick->calibrate(); + // Input + input = new InputManager(BUTTON_A, BUTTON_B, BUTTON_C, JOY_V, JOY_H, JOY_BTN); + input->addBtnPressInterrupt(input->btnA, ledToggle); + input->addBtnPressInterrupt(input->btnB, ledToggle2); + input->addBtnPressInterrupt(input->btnC, ledToggle3); - // 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; + delete input; } \ No newline at end of file