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:
17:d6a3b29cab31
Parent:
14:b4fed570abaf
Child:
18:709ea375b0df
--- a/main.cpp	Sun May 10 13:14:33 2015 +0000
+++ b/main.cpp	Mon May 11 03:52:18 2015 +0000
@@ -2,24 +2,23 @@
 * @file main.cpp
 * @brief Simple platform game developed for ELEC2645 Embedded Systems Project at University of Leeds
 * @author Andreas Garmannslund
+* @date April/May 2015
 */
 
 #include "mbed.h"
 #include "N5110.h"
-#include "PowerControl.h"
+#include "PowerControl/PowerControl.h"
+#include "PowerControl/EthernetPowerControl.h"
 #include "PinDetect.h"
 #include <string>
 #include <sstream>
 #include <ctime>
 
 #include "Joystick.h"
-
 #include "StateManager.h"
 #include "State.h"
-#include "images.h"
 #include "InputManager.h"
-
-
+#include "Sound.h"
 
 // Redefine pin names for simple access.
 #define JOY_H p17
@@ -34,43 +33,27 @@
 
 // Input and Output
 N5110 *lcd; /// Display
+Sound *sound; // Sound: Piezo buzzer
 
 InputManager *input; /// Responsible for managing user input
 
 // Brightness potentiometer
 AnalogIn ledPot(LED_POT);
 
-// Debugging
-BusOut leds(LED1, LED2, LED3, LED4);
-
 void init(); /// Set up initial variables
 void cleanUp(); /// Frees remaining allocated memory
 
-StateManager* fsm;
+StateManager* fsm;  /// Finite state machine
 
 AnalogIn randomPin(p18); // Unconnected pin => noise, used for generating a random seed.
 AnalogIn randomPin2(p19); // Unconnected pin
 
+LocalFileSystem local("local"); /// Local file system
+
 /// Function for generating a random seed by using a unconnected analog input pin
-// Problem: Not trully random as pin is fairly stable. It is unfortunately connected to the ground layer (often returning 0). Would be better to connect it to a "loose wire"/bad connection
-unsigned int getRandSeed()
-{
-    unsigned int randNum = 0;
-    unsigned int lsb; // least significant bit
-    
-    for (unsigned int i = 0; i < 16; ++i)
-    {
-        lsb = 1 & (randomPin.read_u16()); // Read least significant bit in randomInput - value depends on noise
-        randNum |= (lsb << i);              // Set bit nr.i to lsb in randomInput
-        
-        lsb = 1 & (randomPin2.read_u16());
-        randNum |= (lsb << (16+i));
-    }
-    
-    return randNum;
-}
-
-Serial term(USBTX, USBRX); // TO DELETE - DEBUGGING ONLY
+// Problem: Not trully random as pin is fairly stable. It is unfortunately connected to the ground layer (often returning 0). Would be better to connect it to a "loose wire"/bad connection-
+unsigned int getRandSeed();
+void readHighscoreFile();
 
 int main()
 {    
@@ -102,13 +85,16 @@
         timer.reset();
     }
     
-    cleanUp(); // Not really reached as the program never terminates. Added for completeness.
+    cleanUp();  // Not really reached as the program never terminates. Added for completeness.
     
     return 0;
 }
 
 void init()
 {
+    // Disable ethernet to save power
+    PHY_PowerDown();
+    
     // Init LCD
     lcd = new N5110(p7, p8, p9, p10, p11, p13, p26);
     lcd->init();
@@ -118,11 +104,62 @@
     // Input
     input = new InputManager(BUTTON_A, BUTTON_B, BUTTON_C, JOY_H, JOY_V, JOY_BTN);
     
-    fsm = new StateManager(lcd, input, TITLE_SCREEN);
+    // Sound
+    sound = new Sound(p21);
+
+    // Finite state machine
+    fsm = new StateManager(lcd, input, sound, TITLE_SCREEN);
+    
+    readHighscoreFile(); // load highscores from file system
+    
+    sound->playNote(SFX::RESTART);
+}
+
+void readHighscoreFile()
+{    
+     FILE *fp = fopen("/local/highscores.txt", "r");    // read from local file
+     
+     if (!fp)       // if file is not created yet the highscores will default values as defined in Global.cpp
+        return;
+        
+     char initials[4];
+     char scoreStr[8];
+
+     for (int i = 0; i < 3; ++i)
+     {   
+         fscanf(fp, "%s %s", initials, scoreStr);   // read from file
+         
+         int score = atoi(scoreStr);    // convert to int
+         
+         // update global highscore table
+         Global::highscores[i].initials = initials;
+         Global::highscores[i].score = score;
+     }
+        
+     fclose(fp);
 }
 
 void cleanUp()
 {
     delete lcd;
     delete input;
+    delete sound;
+}
+
+/// Get a random seed based on unconnected analog input pins
+unsigned int getRandSeed()
+{
+    unsigned int randNum = 0;
+    unsigned int lsb; // least significant bit
+    
+    for (unsigned int i = 0; i < 16; ++i)
+    {
+        lsb = 1 & (randomPin.read_u16()); // Read least significant bit in randomInput - value depends on noise
+        randNum |= (lsb << i);              // Set bit nr.i to lsb in randomInput
+        
+        lsb = 1 & (randomPin2.read_u16());
+        randNum |= (lsb << (16+i));
+    }
+    
+    return randNum;
 }
\ No newline at end of file