ELEC2645 (2018/19) / Mbed 2 deprecated el17cd

Dependencies:   mbed

Game/Game.h

Committer:
el17cd
Date:
2019-04-04
Revision:
28:f8ff7c8c1627
Parent:
27:e46af658c67a
Child:
29:4a02f0bae202

File content as of revision 28:f8ff7c8c1627:

#include <vector>
#ifndef FACE_H
#define FACE_H
#include "Face.h"
#endif
#include "Rasturizer.h"
#ifndef CUBE_H
#define CUBE_H
#include "Cube.h"
#endif
#include "Gamepad.h"
#include "mbed.h"

/** Game class
*@brief A class used to instantiate a cube object, this is the obstacle in the game
*@author Christopher Doel
*@date April, 2019
*/

struct Input{
    float x;
    bool yButton;
    bool aButton;
    bool bButton;
    bool yCooldown;
    bool aCooldown;
    bool bCooldown;
};

class Game {
  private:
    Input input;
    int noOfCubes;
    
    bool playing;
    int score;
    int highScore;
    
    bool inHomeMenu;
    int help;
    int homeSelection;
    bool deathMenuSelection;
    FILE *filePointer;
    
    Vector2D coord;
    Cube cubeArray[25];
    Face faceArray[150];

    Ticker disableA;
    Ticker disableB;
    Ticker disableY;
    Gamepad gamepad;
    Rasturizer renderer;
    
    int readHighScore();
    /** @brief Reads the highscore stored in the SD card
    *@returns the highscore as an integer
    */
    void writeHighScore(int score);
    /** @brief Writes the new highscore to the SD card
    *@param the highscore as an integer
    */
    void resetScene();
    /** @brief generates initial positions for all cubes
    */
    void addScore();
    /** @brief Increments the score by 1
    */
    void resetScore();
    /** @brief Resets the score to 0
    */
    void checkDespawn(Cube *cube);
    /** @brief Checks whether a cube needs to be despawned, if it does then the cube will be translated to the far side of the map
    *@param A pointer to a cube object
    */
    void checkDeath(Cube *cube);
    /** @brief Checks whether a cube is too close to the user and therefore a collision has occured, the game will be stopped if true
    *@param A pointer to a cube object
    */
    void cubeToBeRendered(Cube *cube, int cubeIndex);
    /** @brief Adds the cubes faces to the array of faces to be passed to the renderer
    *@param A pointer to a cube object
    *@param The integer index of the cubes position in the cube array
    */
    void moveCubes(Cube *cube);
    /** @brief Translates the cube in the z axis towards the user (speed dependant on score) and left and right depending on the joystick location
    *@param A pointer to a cube object
    */
    void displayDeathMenu();
    /** @brief Displays the menu screen if the game has stopeed propting the user to either restart or go to the home menu
    */
    void deathButtonSelections();
    /** @brief Determines the action to be taken depending on the button input once the game has ended
    */
    void homeButtonSelections();
    /** @brief Determines the action to be taken depending on the button input at the home screen
    */
    void disableAButton(bool a);
    /** @brief Disables the A button for 300 milliseconds after being pressed to prevent erroneous input from switch bouncing
    *@param a boolean indicating whether the button has been pressed
    */
    void disableYButton(bool y);
    /** @brief Disables the Y button for 300 milliseconds after being pressed to prevent erroneous input from switch bouncing
    *@param a boolean indicating whether the button has been pressed
    */
    void disableBButton(bool b);
    /** @brief Disables the B button for 300 milliseconds after being pressed to prevent erroneous input from switch bouncing
    *@param a boolean indicating whether the button has been pressed
    */
    void enableA();
    /** @brief Is called using a ticker 300 milliseconds after the A button is pressed to re-enable it
    */
    void enableY();
    /** @brief Is called using a ticker 300 milliseconds after the Y button is pressed to re-enable it
    */
    void enableB();
    /** @brief Is called using a ticker 300 milliseconds after the B button is pressed to re-enable it
    */
    void processInput();
    /** @brief Process the joystick and Y, B and A button inputs and store their values in a structure
    */
    void play();
    /** @brief Begin the execution of the game
    */
    void helpScreen();
    /** @brief Display the help screens
    */
    void checkNextHelpScreen();
    /** @brief Check whether the user has advanced to the next help screen by pressing the A button
    */
  public:
   Game();
    /**brief The constructor of the Face class which instantiates the game object.
    */
   void run();
    /** @brief Executes the game loop
    */
   void homeScreen();
    /** @brief Executed the home screen loop
    */
};