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

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?

UserRevisionLine numberNew 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 }