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:
- 1:0cfe2255092a
- Parent:
- 0:1f92de30d43e
- Child:
- 2:0ae5ac8b0cac
File content as of revision 1:0cfe2255092a:
/** @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 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(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 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(); // 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) { lcd->clear(); //stateObj->run(); joystick->update(); lcd->setBrightness(1.0 - ledPot); // Update brightness of screen 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 } cleanUp(); return 0; }