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:
Fri May 08 14:39:36 2015 +0000
Revision:
10:f2488a0ecab7
Parent:
8:9ac6a428fa26
Child:
13:7ab71c7c311b
Encapsluated PinDetect buttons in InputManager (made private)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Siriagus 0:1f92de30d43e 1 /**
Siriagus 10:f2488a0ecab7 2 * @file main.cpp
Siriagus 10:f2488a0ecab7 3 * @brief Simple platform game developed for ELEC2645 Embedded Systems Project at University of Leeds
Siriagus 10:f2488a0ecab7 4 * @author Andreas Garmannslund
Siriagus 10:f2488a0ecab7 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 10:f2488a0ecab7 36 N5110 *lcd; /// Display
Siriagus 4:d6661b976359 37
Siriagus 10:f2488a0ecab7 38 InputManager *input; /// Responsible for managing user 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 10:f2488a0ecab7 59 void init(); /// Set up initial variables
Siriagus 10:f2488a0ecab7 60 void cleanUp(); /// Frees remaining allocated memory
Siriagus 1:0cfe2255092a 61
Siriagus 5:100d960fc6d5 62 StateManager* fsm;
Siriagus 5:100d960fc6d5 63
Siriagus 1:0cfe2255092a 64 int main()
Siriagus 1:0cfe2255092a 65 {
Siriagus 1:0cfe2255092a 66 init();
Siriagus 1:0cfe2255092a 67
Siriagus 7:678873947b29 68 Timer timer;
Siriagus 7:678873947b29 69 timer.start();
Siriagus 4:d6661b976359 70
Siriagus 0:1f92de30d43e 71 while(true)
Siriagus 7:678873947b29 72 {
Siriagus 8:9ac6a428fa26 73 // We need to call Sleep() repeatedly, because periodic interrupts in InputManager will cause it to wake up every 20 ms.
Siriagus 8:9ac6a428fa26 74 while (timer.read() < 0.08)
Siriagus 8:9ac6a428fa26 75 Sleep();
Siriagus 8:9ac6a428fa26 76
Siriagus 7:678873947b29 77 // update
Siriagus 0:1f92de30d43e 78 lcd->setBrightness(1.0 - ledPot); // Update brightness of screen
Siriagus 7:678873947b29 79 fsm->update(timer.read());
Siriagus 7:678873947b29 80 input->joystick->update();
Siriagus 4:d6661b976359 81
Siriagus 4:d6661b976359 82 // render
Siriagus 5:100d960fc6d5 83 lcd->clear();
Siriagus 7:678873947b29 84 fsm->render();
Siriagus 5:100d960fc6d5 85 lcd->refresh();
Siriagus 1:0cfe2255092a 86
Siriagus 7:678873947b29 87 fsm->processRequest(); // Change the state if requested.
Siriagus 7:678873947b29 88
Siriagus 7:678873947b29 89 timer.reset();
Siriagus 0:1f92de30d43e 90 }
Siriagus 0:1f92de30d43e 91
Siriagus 10:f2488a0ecab7 92 cleanUp(); // Not really reached as the program never terminates. Added for completeness.
Siriagus 0:1f92de30d43e 93
Siriagus 0:1f92de30d43e 94 return 0;
Siriagus 3:4e3f342a135c 95 }
Siriagus 3:4e3f342a135c 96
Siriagus 3:4e3f342a135c 97 void init()
Siriagus 3:4e3f342a135c 98 {
Siriagus 3:4e3f342a135c 99 // Init LCD
Siriagus 3:4e3f342a135c 100 lcd = new N5110(p7, p8, p9, p10, p11, p13, p26);
Siriagus 3:4e3f342a135c 101 lcd->init();
Siriagus 3:4e3f342a135c 102 lcd->normalMode();
Siriagus 3:4e3f342a135c 103 lcd->setBrightness(1.0 - ledPot); // Update brightness of screen
Siriagus 3:4e3f342a135c 104
Siriagus 4:d6661b976359 105 // Input
Siriagus 8:9ac6a428fa26 106 input = new InputManager(BUTTON_A, BUTTON_B, BUTTON_C, JOY_H, JOY_V, JOY_BTN);
Siriagus 3:4e3f342a135c 107
Siriagus 8:9ac6a428fa26 108 fsm = new StateManager(lcd, input, TITLE_SCREEN);
Siriagus 3:4e3f342a135c 109 }
Siriagus 3:4e3f342a135c 110
Siriagus 3:4e3f342a135c 111 void cleanUp()
Siriagus 3:4e3f342a135c 112 {
Siriagus 3:4e3f342a135c 113 delete lcd;
Siriagus 4:d6661b976359 114 delete input;
Siriagus 1:0cfe2255092a 115 }