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@8:9ac6a428fa26, 2015-05-02 (annotated)
- Committer:
- Siriagus
- Date:
- Sat May 02 00:22:43 2015 +0000
- Revision:
- 8:9ac6a428fa26
- Parent:
- 7:678873947b29
- Child:
- 10:f2488a0ecab7
Added Splash/Title Screen + Prototyping player movement
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Siriagus | 0:1f92de30d43e | 1 | /** |
Siriagus | 0:1f92de30d43e | 2 | @brief Simple platform game developed for ELEC2645 Embedded Systems Project at University of Leeds |
Siriagus | 0:1f92de30d43e | 3 | |
Siriagus | 0:1f92de30d43e | 4 | @author Andreas Garmannslund |
Siriagus | 0:1f92de30d43e | 5 | **/ |
Siriagus | 0:1f92de30d43e | 6 | |
Siriagus | 0:1f92de30d43e | 7 | #include "mbed.h" |
Siriagus | 0:1f92de30d43e | 8 | #include "N5110.h" |
Siriagus | 1:0cfe2255092a | 9 | #include "PowerControl.h" |
Siriagus | 1:0cfe2255092a | 10 | #include "PinDetect.h" |
Siriagus | 4:d6661b976359 | 11 | #include <string> |
Siriagus | 7:678873947b29 | 12 | #include <sstream> |
Siriagus | 4:d6661b976359 | 13 | #include <ctime> |
Siriagus | 1:0cfe2255092a | 14 | |
Siriagus | 0:1f92de30d43e | 15 | #include "Joystick.h" |
Siriagus | 1:0cfe2255092a | 16 | |
Siriagus | 5:100d960fc6d5 | 17 | #include "StateManager.h" |
Siriagus | 1:0cfe2255092a | 18 | #include "State.h" |
Siriagus | 1:0cfe2255092a | 19 | #include "images.h" |
Siriagus | 4:d6661b976359 | 20 | #include "InputManager.h" |
Siriagus | 1:0cfe2255092a | 21 | |
Siriagus | 4:d6661b976359 | 22 | |
Siriagus | 0:1f92de30d43e | 23 | |
Siriagus | 1:0cfe2255092a | 24 | // Redefine pin names for simple access. |
Siriagus | 1:0cfe2255092a | 25 | #define JOY_H p17 |
Siriagus | 1:0cfe2255092a | 26 | #define JOY_V p16 |
Siriagus | 1:0cfe2255092a | 27 | #define JOY_BTN p15 |
Siriagus | 1:0cfe2255092a | 28 | |
Siriagus | 1:0cfe2255092a | 29 | #define LED_POT p20 |
Siriagus | 1:0cfe2255092a | 30 | |
Siriagus | 2:0ae5ac8b0cac | 31 | #define BUTTON_A p28 |
Siriagus | 2:0ae5ac8b0cac | 32 | #define BUTTON_B p27 |
Siriagus | 1:0cfe2255092a | 33 | #define BUTTON_C p29 |
Siriagus | 1:0cfe2255092a | 34 | |
Siriagus | 4:d6661b976359 | 35 | // Input and Output |
Siriagus | 0:1f92de30d43e | 36 | N5110 *lcd; // VCC, SCE, RST, D/C, MOSI, SCLK and LED |
Siriagus | 4:d6661b976359 | 37 | |
Siriagus | 4:d6661b976359 | 38 | InputManager *input; |
Siriagus | 4:d6661b976359 | 39 | |
Siriagus | 0:1f92de30d43e | 40 | // Brightness potentiometer |
Siriagus | 1:0cfe2255092a | 41 | AnalogIn ledPot(LED_POT); |
Siriagus | 0:1f92de30d43e | 42 | |
Siriagus | 0:1f92de30d43e | 43 | // Debugging |
Siriagus | 0:1f92de30d43e | 44 | BusOut leds(LED1, LED2, LED3, LED4); |
Siriagus | 0:1f92de30d43e | 45 | |
Siriagus | 1:0cfe2255092a | 46 | // @brief Clears the screen and fill it with the image in the argument. |
Siriagus | 1:0cfe2255092a | 47 | void clearAndDrawImage(const int img[BANKS][WIDTH]) |
Siriagus | 0:1f92de30d43e | 48 | { |
Siriagus | 0:1f92de30d43e | 49 | for (int i = 0; i < BANKS; ++i) |
Siriagus | 0:1f92de30d43e | 50 | { |
Siriagus | 0:1f92de30d43e | 51 | for (int j = 0; j < WIDTH; ++j) |
Siriagus | 0:1f92de30d43e | 52 | { |
Siriagus | 1:0cfe2255092a | 53 | lcd->buffer[j][i] = img[i][j]; |
Siriagus | 0:1f92de30d43e | 54 | } |
Siriagus | 0:1f92de30d43e | 55 | } |
Siriagus | 0:1f92de30d43e | 56 | lcd->refresh(); |
Siriagus | 0:1f92de30d43e | 57 | } |
Siriagus | 0:1f92de30d43e | 58 | |
Siriagus | 2:0ae5ac8b0cac | 59 | // States |
Siriagus | 2:0ae5ac8b0cac | 60 | |
Siriagus | 3:4e3f342a135c | 61 | |
Siriagus | 1:0cfe2255092a | 62 | |
Siriagus | 2:0ae5ac8b0cac | 63 | |
Siriagus | 3:4e3f342a135c | 64 | void init(); |
Siriagus | 3:4e3f342a135c | 65 | void cleanUp(); |
Siriagus | 1:0cfe2255092a | 66 | |
Siriagus | 5:100d960fc6d5 | 67 | StateManager* fsm; |
Siriagus | 5:100d960fc6d5 | 68 | |
Siriagus | 1:0cfe2255092a | 69 | int main() |
Siriagus | 1:0cfe2255092a | 70 | { |
Siriagus | 1:0cfe2255092a | 71 | init(); |
Siriagus | 1:0cfe2255092a | 72 | |
Siriagus | 7:678873947b29 | 73 | Timer timer; |
Siriagus | 7:678873947b29 | 74 | timer.start(); |
Siriagus | 4:d6661b976359 | 75 | |
Siriagus | 0:1f92de30d43e | 76 | while(true) |
Siriagus | 7:678873947b29 | 77 | { |
Siriagus | 8:9ac6a428fa26 | 78 | // We need to call Sleep() repeatedly, because periodic interrupts in InputManager will cause it to wake up every 20 ms. |
Siriagus | 8:9ac6a428fa26 | 79 | while (timer.read() < 0.08) |
Siriagus | 8:9ac6a428fa26 | 80 | Sleep(); |
Siriagus | 8:9ac6a428fa26 | 81 | |
Siriagus | 7:678873947b29 | 82 | // update |
Siriagus | 0:1f92de30d43e | 83 | lcd->setBrightness(1.0 - ledPot); // Update brightness of screen |
Siriagus | 7:678873947b29 | 84 | fsm->update(timer.read()); |
Siriagus | 7:678873947b29 | 85 | input->joystick->update(); |
Siriagus | 4:d6661b976359 | 86 | |
Siriagus | 4:d6661b976359 | 87 | // render |
Siriagus | 5:100d960fc6d5 | 88 | lcd->clear(); |
Siriagus | 7:678873947b29 | 89 | fsm->render(); |
Siriagus | 5:100d960fc6d5 | 90 | lcd->refresh(); |
Siriagus | 1:0cfe2255092a | 91 | |
Siriagus | 7:678873947b29 | 92 | fsm->processRequest(); // Change the state if requested. |
Siriagus | 7:678873947b29 | 93 | |
Siriagus | 7:678873947b29 | 94 | timer.reset(); |
Siriagus | 0:1f92de30d43e | 95 | } |
Siriagus | 0:1f92de30d43e | 96 | |
Siriagus | 1:0cfe2255092a | 97 | cleanUp(); |
Siriagus | 0:1f92de30d43e | 98 | |
Siriagus | 0:1f92de30d43e | 99 | return 0; |
Siriagus | 3:4e3f342a135c | 100 | } |
Siriagus | 3:4e3f342a135c | 101 | |
Siriagus | 3:4e3f342a135c | 102 | void init() |
Siriagus | 3:4e3f342a135c | 103 | { |
Siriagus | 3:4e3f342a135c | 104 | // Init LCD |
Siriagus | 3:4e3f342a135c | 105 | lcd = new N5110(p7, p8, p9, p10, p11, p13, p26); |
Siriagus | 3:4e3f342a135c | 106 | lcd->init(); |
Siriagus | 3:4e3f342a135c | 107 | lcd->normalMode(); |
Siriagus | 3:4e3f342a135c | 108 | lcd->setBrightness(1.0 - ledPot); // Update brightness of screen |
Siriagus | 3:4e3f342a135c | 109 | |
Siriagus | 4:d6661b976359 | 110 | // Input |
Siriagus | 8:9ac6a428fa26 | 111 | input = new InputManager(BUTTON_A, BUTTON_B, BUTTON_C, JOY_H, JOY_V, JOY_BTN); |
Siriagus | 3:4e3f342a135c | 112 | |
Siriagus | 8:9ac6a428fa26 | 113 | fsm = new StateManager(lcd, input, TITLE_SCREEN); |
Siriagus | 3:4e3f342a135c | 114 | } |
Siriagus | 3:4e3f342a135c | 115 | |
Siriagus | 3:4e3f342a135c | 116 | void cleanUp() |
Siriagus | 3:4e3f342a135c | 117 | { |
Siriagus | 3:4e3f342a135c | 118 | delete lcd; |
Siriagus | 4:d6661b976359 | 119 | delete input; |
Siriagus | 1:0cfe2255092a | 120 | } |