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:
1:0cfe2255092a
Parent:
0:1f92de30d43e
Child:
2:0ae5ac8b0cac
--- a/main.cpp	Sun Apr 26 17:20:09 2015 +0000
+++ b/main.cpp	Tue Apr 28 12:46:37 2015 +0000
@@ -6,40 +6,67 @@
 
 #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(p20);
+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 static map layout.
-void clearAndRedrawMap()
+
+// @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] = map[i][j];
+            lcd->buffer[j][i] = img[i][j];
         }
     }
     lcd->refresh();
 }
 
-int main()
+State *stateObj; // current state object
+void init()
 {
     // Init LCD
     lcd = new N5110(p7, p8, p9, p10, p11, p13, p26);
@@ -48,25 +75,57 @@
     lcd->setBrightness(1.0 - ledPot); // Update brightness of screen
     
     // Init joystick
-    joystick = new Joystick(p17, p16, p15);
+    joystick = new Joystick(JOY_H, JOY_V, JOY_BTN);
     joystick->calibrate();
     
-    // Game loop
+    // 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)
     {   
-        clearAndRedrawMap();
+        lcd->clear();
         
+        //stateObj->run();
+    
         joystick->update();
-        pc.printf("Joystick direction: %d\n", joystick->getDirection());
-        
         lcd->setBrightness(1.0 - ledPot); // Update brightness of screen
         
-        wait (0.1);
+        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
     }
     
-    delete lcd;
-    delete joystick;
+    cleanUp();
     
     return 0;
-}
-
+}
\ No newline at end of file