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

Revision:
4:d6661b976359
Parent:
3:4e3f342a135c
Child:
5:100d960fc6d5
--- a/main.cpp	Tue Apr 28 15:42:22 2015 +0000
+++ b/main.cpp	Fri May 01 00:38:59 2015 +0000
@@ -8,16 +8,16 @@
 #include "N5110.h"
 #include "PowerControl.h"
 #include "PinDetect.h"
+#include <string>
+#include <ctime>
 
 #include "Joystick.h"
-#include <string>
 
 #include "State.h"
-#include "MainMenu.h"
-#include "map.h"
 #include "images.h"
+#include "InputManager.h"
 
-#include <ctime>
+
 
 // Redefine pin names for simple access.
 #define JOY_H p17
@@ -30,25 +30,24 @@
 #define BUTTON_B p27
 #define BUTTON_C p29
 
-// Components
+// Input and Output
 N5110 *lcd; // VCC, SCE, RST, D/C, MOSI, SCLK and LED
-Joystick *joystick;
+
+InputManager *input;
+
+// Replaced by InputManager
+/*Joystick *joystick;
+PinDetect *btnA;
+PinDetect *btnB;
+PinDetect *btnC;*/
 
 // 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])
 {
@@ -62,34 +61,10 @@
     lcd->refresh();
 }
 
-//State *stateObj; // current state object
-
 // States
 
-//enum MenuState {SELECT_MENU, HIGH_SCORES, CONTROLS, LOAD_GAME};
-
-enum MenuState {SELECT_PLAY, SELECT_HIGHSCORES, SELECT_CONTROLS, LOAD_GAME, HIGHSCORES, CONTROLS};
-int currentState; // current state
-
-enum NewMenuState;
 
-// fsm[state][input] where input are 0, 1, 2 corresponding to buttons A, B, C
-int fsm[6][3] = {
-    {LOAD_GAME, SELECT_PLAY, SELECT_HIGHSCORES},            // State: SELECT_PLAY
-    {HIGHSCORES, SELECT_HIGHSCORES, SELECT_CONTROLS},       // State: SELECT_HIGHSCORES
-    {CONTROLS, SELECT_CONTROLS, SELECT_PLAY},               // State: SELECT_CONTROLS
-    {LOAD_GAME, LOAD_GAME, LOAD_GAME},                      // State: LOAD_GAME
-    {SELECT_HIGHSCORES, SELECT_HIGHSCORES, HIGHSCORES},     // State: HIGHSCORES
-    {SELECT_CONTROLS, SELECT_CONTROLS, CONTROLS}            // State: CONTROLS
-};
 
-PinDetect btnA(BUTTON_A);
-PinDetect btnB(BUTTON_B);
-PinDetect btnC(BUTTON_C);
-
-void btnAPressed() {currentState = fsm[currentState][0];}
-void btnBPressed() {currentState = fsm[currentState][1];}
-void btnCPressed() {currentState = fsm[currentState][2];}
 
 void init();
 void cleanUp();
@@ -98,56 +73,19 @@
 {
     init();
     
+    time_t dt = time(NULL);
+    
     while(true)
     {   
         lcd->clear();
     
-        joystick->update();
+        input->joystick->update();
         lcd->setBrightness(1.0 - ledPot); // Update brightness of screen
         
-        // Update
-        switch (currentState)
-        {        
-            case SELECT_PLAY:
-                lcd->printString(">Play", 10, 1);
-                lcd->printString("High Scores", 10, 2);
-                lcd->printString("Controls", 10, 3);
-            break;
-            
-            case SELECT_HIGHSCORES:
-                lcd->printString("Play", 10, 1);
-                lcd->printString(">High Scores", 10, 2);
-                lcd->printString("Controls", 10, 3);
-            break;
-            
-            case SELECT_CONTROLS:
-                lcd->printString("Play", 10, 1);
-                lcd->printString("High Scores", 10, 2);
-                lcd->printString(">Controls", 10, 3);
-            break;
-            
-            case HIGHSCORES:
-            // Placeholder TODO: Actually high scores
-                lcd->printString("High Scores", 10, 0);
-                lcd->printString("AND 1000000", 10, 1);
-                lcd->printString("AND  500000", 10, 2);
-                lcd->printString("AND     100", 10, 3);
-                lcd->printString(">Back", 10, 4);
-            break;
-            
-            case CONTROLS:
-                lcd->printString("Controls", 10, 0);
-                lcd->printString("A: Jump", 10, 1);
-                lcd->printString("B: Shoot", 10, 2);
-                lcd->printString("C: Pause", 10, 3);
-                lcd->printString(">Back", 10, 4);
-            break;
-            
-            case LOAD_GAME:
-                clearAndDrawImage(logo);
-            break;
-                
-        }
+        // update
+        
+        // render
+        
         
         lcd->refresh();
         Sleep();
@@ -158,6 +96,25 @@
     return 0;
 }
 
+void ledToggle()
+{
+    leds[0] = !leds[0];
+}
+
+int ctr = 0;
+void ledToggle4() {leds[3] = !leds[3];}
+void ledToggle2()
+{
+    leds[1] = !leds[1];
+    
+    if (++ctr > 4)
+        input->addBtnPressInterrupt(input->btnB, ledToggle4);
+        
+}
+
+
+void ledToggle3() {leds[2] = !leds[2];}
+
 void init()
 {
     // Init LCD
@@ -166,25 +123,18 @@
     lcd->normalMode();
     lcd->setBrightness(1.0 - ledPot); // Update brightness of screen
     
-    // Init joystick
-    joystick = new Joystick(JOY_H, JOY_V, JOY_BTN);
-    joystick->calibrate();
+    // Input
+    input = new InputManager(BUTTON_A, BUTTON_B, BUTTON_C, JOY_V, JOY_H, JOY_BTN);
+    input->addBtnPressInterrupt(input->btnA, ledToggle);
+    input->addBtnPressInterrupt(input->btnB, ledToggle2);
+    input->addBtnPressInterrupt(input->btnC, ledToggle3);
     
-    // Init buttons
-    btnA.attach_asserted(&btnAPressed);
-    btnB.attach_asserted(&btnBPressed);
-    btnC.attach_asserted(&btnCPressed);
     
-    btnA.setSampleFrequency();
-    btnB.setSampleFrequency();
-    btnC.setSampleFrequency();
     
-    // Set initial state    
-    currentState = SELECT_PLAY;
 }
 
 void cleanUp()
 {
     delete lcd;
-    delete joystick;
+    delete input;
 }
\ No newline at end of file