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:
- 1:0cfe2255092a
- Parent:
- 0:1f92de30d43e
- Child:
- 2:0ae5ac8b0cac
--- a/main.cpp Sun Apr 26 17:20:09 2015 +0000 +++ b/main.cpp Tue Apr 28 12:46:37 2015 +0000 @@ -6,40 +6,67 @@ #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 p27 +#define BUTTON_B p28 +#define BUTTON_C p29 + +enum MainState {MENU, GAME}; +MainState currentState; // current state + // Components N5110 *lcd; // VCC, SCE, RST, D/C, MOSI, SCLK and LED Joystick *joystick; // Brightness potentiometer -AnalogIn ledPot(p20); +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 static map layout. -void clearAndRedrawMap() + +// @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] = map[i][j]; + lcd->buffer[j][i] = img[i][j]; } } lcd->refresh(); } -int main() +State *stateObj; // current state object +void init() { // Init LCD lcd = new N5110(p7, p8, p9, p10, p11, p13, p26); @@ -48,25 +75,57 @@ lcd->setBrightness(1.0 - ledPot); // Update brightness of screen // Init joystick - joystick = new Joystick(p17, p16, p15); + joystick = new Joystick(JOY_H, JOY_V, JOY_BTN); joystick->calibrate(); - // Game loop + // Set initial state +// currentState = MENU; +// stateObj = new MainMenu(lcd, BUTTON_A, BUTTON_B, BUTTON_C); +} + +void cleanUp() +{ + delete lcd; + delete joystick; + delete stateObj; +} + +const int NUM_CHOICES = 3; +std::string choices[NUM_CHOICES] = {"Play", "High Score", "Controls"}; +int selectedChoice = 0; + +PinDetect btnC(BUTTON_C); +void nextChoice() { selectedChoice = (selectedChoice + 1) % NUM_CHOICES;} + +int main() +{ + init(); + + // button + btnC.attach_asserted(&nextChoice); + btnC.setSampleFrequency(); + + // Game loop, fixed-time step, updates game logic with regular intervals, rendering happens as fast as possible while(true) { - clearAndRedrawMap(); + lcd->clear(); + //stateObj->run(); + joystick->update(); - pc.printf("Joystick direction: %d\n", joystick->getDirection()); - lcd->setBrightness(1.0 - ledPot); // Update brightness of screen - wait (0.1); + for (int i = 0; i < 3; ++i) + { + std::string str = (selectedChoice == i) ? ("> " + choices[i]) : choices[i]; + lcd->printString(str.c_str(), 10, i+1); + } + + lcd->refresh(); + Sleep(); // Wait for button interrupt } - delete lcd; - delete joystick; + cleanUp(); return 0; -} - +} \ No newline at end of file