Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: N5110 PinDetect PowerControl mbed
Revision 18:709ea375b0df, committed 2015-05-11
- Comitter:
- Siriagus
- Date:
- Mon May 11 04:40:23 2015 +0000
- Parent:
- 17:d6a3b29cab31
- Commit message:
- Fixed some formatting errors in documentation.
Changed in this revision
--- a/Enemy.h Mon May 11 03:52:18 2015 +0000 +++ b/Enemy.h Mon May 11 04:40:23 2015 +0000 @@ -9,17 +9,22 @@ class Enemy : public Entity { public: - enum Type{SIMPLE, JUMPER, RUNNER}; /// Different type of enemies + /// Different type of enemies + enum Type{SIMPLE, JUMPER, RUNNER}; public: Enemy(int x, int y, bool facingLeft, Type type = SIMPLE) : Entity(x,y), type(type) {setup();} - Type type; /// What type - //bool dead; /// True if enemy has been shot by player - int difficulty; /// Multiplier used for giving more points - int jumpRate; // Probability (in percent) of trying to jump if at ground. + /// What type of enemy it is. + Type type; + + /// Multiplier used for giving more points + int difficulty; + + /// Probability (in percent) of trying to jump if at ground. + int jumpRate; private: - void setup(); + void setup(); }; #endif \ No newline at end of file
--- a/Entity.h Mon May 11 03:52:18 2015 +0000 +++ b/Entity.h Mon May 11 04:40:23 2015 +0000 @@ -13,18 +13,31 @@ Entity() {x = y = width = height = vx = vy = 0; facingLeft = true; onGround = false; dead = false;} Entity(int x, int y, int w = 0, int h = 0) : x(x), y(y), width(w), height(h) {vx = vy = 0; facingLeft = true; onGround = false; dead = false;} - int x, y; /// Position of entity (origin: left upper corner) - int vx, vy; /// Velocity of entity - int width; /// Width of entity - int height; /// Height of entity + /// Position of entity (origin: left upper corner) + int x, y; + + /// Velocity of entity + int vx, vy; + + /// Width of entity + int width; - bool facingLeft; /// True if the entity is facing left - bool onGround; /// True if entity is standing on the ground. + /// Height of entity + int height; + + /// True if the entity is facing left + bool facingLeft; + /// True if entity is standing on the ground. + bool onGround; + + /// True if enemy is dead. bool dead; - int getRight() {return x + width - 1;} /// Returns x-position of the right edge - int getBottom() {return y + height - 1;} /// Returns y-position of the bottom edge + /// Returns x-position of the right edge + int getRight() {return x + width - 1;} + /// Returns y-position of the bottom edge + int getBottom() {return y + height - 1;} }; #endif \ No newline at end of file
--- a/Game.h Mon May 11 03:52:18 2015 +0000 +++ b/Game.h Mon May 11 04:40:23 2015 +0000 @@ -6,7 +6,6 @@ */ #include "State.h" -#include "Resources.h" #include "Entity.h" #include "Enemy.h" #include "map.h" @@ -37,27 +36,27 @@ private: - void init(); /// Sets some initial values - void spawnEnemy(); /// Spawns a new enemy - void moveEnemies(); /// Movement and AI for all enemies - void moveWithCollisionTest(Entity* entity, const int map[HEIGHT][WIDTH]); /// Moves entity in map. If collision occurs, entity can not move further. - bool hitTestRect(Rectangle r1, Rectangle r2); /// Returns true if two rectangles overlap - bool bulletHitMap(Rectangle &bulletColRect, const int map[HEIGHT][WIDTH]); /// Help function for detecting collision between moving bullet and map. - void renderScore(); /// Draws the current score in upper right corner - void respawnPlayer(); /// Respawns player at start position + void init(); // Sets some initial values + void spawnEnemy(); // Spawns a new enemy + void moveEnemies(); // Movement and AI for all enemies + void moveWithCollisionTest(Entity* entity, const int map[HEIGHT][WIDTH]); // Moves entity in map. If collision occurs, entity can not move further. + bool hitTestRect(Rectangle r1, Rectangle r2); // Returns true if two rectangles overlap @see https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection#Axis-Aligned_Bounding_Box + bool bulletHitMap(Rectangle &bulletColRect, const int map[HEIGHT][WIDTH]); // Help function for detecting collision between moving bullet and map. + void renderScore(); // Draws the current score in upper right corner + void respawnPlayer(); // Respawns player at start position - int livesLeft; /// The number of lives left - bool paused; // True if the game is paused + int livesLeft; // The number of lives left + bool paused; // True if the game is paused - int spawnRate; /// Probability of enemy spawning in a single frame/update. - static const int spawnPoints[3][2]; /// Positions where enemies can spawn. + int spawnRate; // Probability of enemy spawning in a single frame/update. + static const int spawnPoints[3][2]; // Positions where enemies can spawn. - Entity player; /// Player object - std::vector<Point*> bullets; /// Container for bullets - std::vector<Enemy*> enemies; /// Container for enemies + Entity player; // Player object + std::vector<Point*> bullets; // Container for bullets + std::vector<Enemy*> enemies; // Container for enemies - bool releasedBtnB; /// True if button B has been released after being pressed down - bool releasedBtnC; /// True if button C has been released after being pressed down + bool releasedBtnB; // True if button B has been released after being pressed down + bool releasedBtnC; // True if button C has been released after being pressed down }; #endif
--- a/GameOver.cpp Mon May 11 03:52:18 2015 +0000 +++ b/GameOver.cpp Mon May 11 04:40:23 2015 +0000 @@ -45,8 +45,22 @@ void GameOver::render() { + // Draw border + for (int i = 0; i < HEIGHT/3; ++i) + { + drawImage(Image::Pattern3, 0, 3*i); // left border + drawImage(Image::Pattern3, (WIDTH-3), 3*i); // right border + } + + for (int j = 0; j < WIDTH/3; ++j) + { + drawImage(Image::Pattern3, 3 * j, (HEIGHT-3)); // bottom border + drawImage(Image::Pattern3, 3 * j, 0); // top border + } + + // Draw text int xMargin = 8; - lcd->printString("Game Over", xMargin, 1); + lcd->printString("Game Over!", xMargin, 1); switch (currentState) {
--- a/GameOver.h Mon May 11 03:52:18 2015 +0000 +++ b/GameOver.h Mon May 11 04:40:23 2015 +0000 @@ -13,21 +13,32 @@ class GameOver : public State { public: - + /// Create a new GameOver object. GameOver(StateManager* fsm, N5110 *lcd, InputManager* input, Sound* sound) : State(fsm, lcd, input, sound) {init();} - virtual void update(float dt); /// Update logic - virtual void render(); /// Draw to lcd + /// Update logic + virtual void update(float dt); + + /// Draw to lcd + virtual void render(); private: + /// Setup initial configuration. void init(); - static void btnAPress(); /// Interrupt callback function when button A is pressed - static void btnCPress(); /// Interrupt callback function when button C is pressed + + /// Interrupt callback function when button A is pressed. + static void btnAPress(); + + /// Interrupt callback function when button C is pressed. + static void btnCPress(); private: - enum GameOverState {SELECT_PLAY, SELECT_MAIN_MENU, LOAD_GAME, LOAD_MAIN_MENU}; // Internal states - static int currentState; /// Current internal state + /// Internal states + enum GameOverState {SELECT_PLAY, SELECT_MAIN_MENU, LOAD_GAME, LOAD_MAIN_MENU}; + + /// Current internal state + static int currentState; }; #endif \ No newline at end of file
--- a/Global.h Mon May 11 03:52:18 2015 +0000 +++ b/Global.h Mon May 11 04:40:23 2015 +0000 @@ -7,6 +7,7 @@ /// @file Global.h /// @brief Contains global variables and functions +/// A highscore element consists of initials and a score. struct Highscore { std::string initials; @@ -15,9 +16,14 @@ namespace Global { - extern int score; /// Score in last game - extern Highscore highscores[3]; /// List showing the three all time highest score achieved. Sorted from highest to lowest. - void clearHighscoreList(); /// Clears the highscore list + /// Score in last game + extern int score; + + /// List showing the three all time highest score achieved. Sorted from highest to lowest. + extern Highscore highscores[3]; + + /// Clears the highscore list + void clearHighscoreList(); } #endif \ No newline at end of file
--- a/InputManager.h Mon May 11 03:52:18 2015 +0000 +++ b/InputManager.h Mon May 11 04:40:23 2015 +0000 @@ -56,8 +56,7 @@ * @param button The requested button. * @return Pointer to the button. */ - PinDetect* getBtnPtr(Input::Button button); - + PinDetect* getBtnPtr(Input::Button button); }; #endif
--- a/MainMenu.cpp Mon May 11 03:52:18 2015 +0000 +++ b/MainMenu.cpp Mon May 11 04:40:23 2015 +0000 @@ -56,9 +56,6 @@ { drawImage(Image::Pattern3, 3 * j, (HEIGHT-3)); // bottom border drawImage(Image::Pattern3, 3 * j, 0); // top border - -// if (currentState != HIGHSCORES && currentState != CONTROLS) - } // Check sate
--- a/MainMenu.h Mon May 11 03:52:18 2015 +0000 +++ b/MainMenu.h Mon May 11 04:40:23 2015 +0000 @@ -7,7 +7,6 @@ */ #include "State.h" -#include "Resources.h" #include "Global.h" #include <string> #include <sstream> @@ -20,20 +19,25 @@ MainMenu(StateManager* fsm, N5110 *lcd, InputManager* input, Sound *sound) : State(fsm, lcd, input, sound) {init();} - virtual void update(float dt); /// Update logic - virtual void render(); /// Draw MainMenu to screen + /// Update logic + virtual void update(float dt); + + /// Draw MainMenu to screen + virtual void render(); private: void init(); - static void btnAPress(); /// Interrupt callback function when button A is pressed - static void btnBPress(); /// Interrupt callback function when button B is pressed - static void btnCPress(); /// Interrupt callback function when button C is pressed + static void btnAPress(); // Interrupt callback function when button A is pressed + static void btnBPress(); // Interrupt callback function when button B is pressed + static void btnCPress(); // Interrupt callback function when button C is pressed // Variables private: /// States for the main menu's internal finite state machine enum MenuState {SELECT_PLAY, SELECT_HIGHSCORES, SELECT_CONTROLS, LOAD_GAME, HIGHSCORES, CONTROLS}; - static int currentState; /// Current state of the internal finite state machine + + /// Current state of the internal finite state machine + static int currentState; /** Transition table for internal fsm * Each row corresponds to a state
--- a/Sound.h Mon May 11 03:52:18 2015 +0000 +++ b/Sound.h Mon May 11 04:40:23 2015 +0000 @@ -4,6 +4,7 @@ /// @file Sound.h #include "mbed.h" +#include "Resources.h" /// A note is given by its frequency and beat. struct Note @@ -22,9 +23,11 @@ */ Sound(PinName buzzerPin); - ~Sound(); /// Destructor + /// Destructor + ~Sound(); - void playNote(Note ¬e); /// Plays the given note. @param note The note to be played. + /// Plays the given note. @param note The note to be played. + void playNote(Note ¬e); private: void start() {*buzzer = 0.5;} // Set duty cycle to 50% @@ -32,8 +35,8 @@ // Variables private: - PwmOut *buzzer; /// Piezo buzzer. - Timeout ticker; /// Used for stopping sound after the given beat. + PwmOut *buzzer; // Piezo buzzer. + Timeout ticker; // Used for stopping sound after the given beat. }; /// Sound effects. Commonly used notes.
--- a/SubmitHighscore.cpp Mon May 11 03:52:18 2015 +0000 +++ b/SubmitHighscore.cpp Mon May 11 04:40:23 2015 +0000 @@ -165,10 +165,6 @@ case SEL_SUBMIT: lcd->printString(">",25-6 , 4); break; - - } - } - - + } } \ No newline at end of file
--- a/SubmitHighscore.h Mon May 11 03:52:18 2015 +0000 +++ b/SubmitHighscore.h Mon May 11 04:40:23 2015 +0000 @@ -18,8 +18,10 @@ : State(fsm, lcd, input, sound) {init();} void init(); - virtual void update(float dt); /// Update logic - virtual void render(); /// Draw to screen + /// Update logic + virtual void update(float dt); + /// Draw to screen + virtual void render(); private: static void btnAPress(); /// Interrupt callback function when button A is pressed @@ -29,12 +31,14 @@ private: enum SubmitHighscoreState{LETTER1, LETTER2, LETTER3, SEL_SUBMIT, WRITE_TO_FILE, LOAD_GAME_OVER}; + static int currentState; /** Changes the current selected letter. * @param index The index of the letter to be changed (0, 1 or 2) * @param next Goes to the next letter in the alphabet if true. Goes to the previous letter if false. */ static void changeLetter(int index, bool next); + static int letters[3]; };
--- a/TitleScreen.h Mon May 11 03:52:18 2015 +0000 +++ b/TitleScreen.h Mon May 11 04:40:23 2015 +0000 @@ -11,7 +11,7 @@ public: TitleScreen(StateManager* fsm, N5110 *lcd, InputManager* input, Sound* sound) : State(fsm, lcd, input, sound) {init();} - + virtual void update(float dt); virtual void render();
--- a/main.cpp Mon May 11 03:52:18 2015 +0000 +++ b/main.cpp Mon May 11 04:40:23 2015 +0000 @@ -32,27 +32,38 @@ #define BUTTON_C p29 // Input and Output -N5110 *lcd; /// Display -Sound *sound; // Sound: Piezo buzzer +/// Display +N5110 *lcd; -InputManager *input; /// Responsible for managing user input +/// Sound: Piezo buzzer +Sound *sound; -// Brightness potentiometer -AnalogIn ledPot(LED_POT); +/// Responsible for managing user input +InputManager *input; -void init(); /// Set up initial variables -void cleanUp(); /// Frees remaining allocated memory - -StateManager* fsm; /// Finite state machine +/// Brightness potentiometer +AnalogIn ledPot(LED_POT); AnalogIn randomPin(p18); // Unconnected pin => noise, used for generating a random seed. AnalogIn randomPin2(p19); // Unconnected pin -LocalFileSystem local("local"); /// Local file system +/// Set up initial variables +void init(); + +/// Frees remaining allocated memory +void cleanUp(); + +/// Finite state machine +StateManager* fsm; + +/// Local file system +LocalFileSystem local("local"); /// 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(); + +/// Read and load the high score file. void readHighscoreFile(); int main() @@ -146,7 +157,9 @@ delete sound; } -/// Get a random seed based on unconnected analog input pins +/** Get a random seed based on unconnected analog input pins + * @see https://developer.mbed.org/questions/2886/Why-is-the-rand-function-not-the-least-b/ + */ unsigned int getRandSeed() { unsigned int randNum = 0;