contains my game for the embedded systems project 2645

Dependencies:   mbed FXOS8700CQQQ

GameEngine/RocketRacer.h

Committer:
OmarAlebiary
Date:
2019-05-07
Revision:
40:13b8467526d0
Parent:
36:30dde2e7aa11

File content as of revision 40:13b8467526d0:

#ifndef ROCKETRACER_H
#define ROCKETRACER_H
#include "mbed.h"
#include "N5110.h"
#include <cstdlib> 
#include <ctime> 
#include "Gamepad.h"
#include "GameSprites.h"
#include "GameTones.h"
#include "FXOS8700CQ.h"

/** RocketRacer class

@brief University of Leeds,C++ class containing the game methods and the interface

@version 1.0

@author Omar Alebiary

@date April 2019

@code
#include "mbed.h"
#include "N5110.h"
#include "Gamepad.h"
#include "RocketRacer.h"

// objects 
Gamepad pad;
RocketRacer Rocket_Racer;


// prototypes
void setup();

int main(){
    
    //initializes the gamepad and the lcd 
    setup();
    
//  this method displays the game scoresand frames
//  used in the gameplay
    
    Rocket_Racer.Main_Game_Display(lcd);
//  this method checks the accelerometer state
//  if it rolled right prints "its right" else if it rolled 
//  left prints "its left" else prints "centre" 
    Rocket_Racer.accelerometer_position(pad);
    
//  this method checks the joystick position
//  if it's right prints "its right" else if its 
//  left prints "its left" else prints "centre"  
     Rocket_Racer.Joystick_position(pad);
    //this method generates a random number between 1 and 3
    //and prints it to the terminal
     Rocket_Racer.Generate_New_Enemy();
    //this method checks if the rocket collide with the enemy
    //and displays game over screen 
     Rocket_Racer.Check_Enemy_Dead(lcd,pad);
    //main game loop that has all the method calls in it 
    while(1){
        Rocket_Racer.Game_Loop(lcd,pad);
    }
    //method that adds difficulty to the game
    //and has 6 levels of difficulty
     Rocket_Racer.Game_difficulty(pad);
     //this method places the enemy sprite according
     //to the randomly generated number(1->3)& the current phase
     //i added the 2nd and 3rd argument manually for testing
     Rocket_Racer.enemy_position(lcd,2,3);
     //this method places the player sprite
     //according to the postion of the joystick 
     //i added the 2nd argument manually for testing
     Rocket_Racer.player_position(lcd, 3);
     //this method displays the gameover screen
     //and the high score achieved
     Rocket_Racer.End_Game(pad,lcd);


}

@endcode
*/


class RocketRacer{
    
    public:
    /**
  * @brief Default Constructor
  *  @details Creates the object of class RocketRacer
  */
    RocketRacer();
    /**
  * @brief Default destructor
  *  @details destroys the object of class RocketRacer
  */
    ~RocketRacer();
    /**
  * @brief method that has all the screen rendering 
  * @param lcd @details calls the lcd object to draw strings and objects on the display
  */
    void Main_Game_Display(N5110 &lcd);
    /**
  * @brief method that dispalys the game over screen with the high score achieved
  * @param lcd @details calls the lcd object to draw strings on the display
  * @param pad @details calls the Gamepad object to access methods from the Gamepad class
  */
    void End_Game(Gamepad &pad,N5110 &lcd);
    
    /**
  * @brief method that adds difficulty to the game after proceeding each level 
  * @param pad @details calls the Gamepad object to access methods from the Gamepad class
  */
    void Game_difficulty(Gamepad &pad);
    
    /**
  * @brief method that generates random enemies 
  * @param none @details seeds the rand function then generate a random enemies
  */
    void Generate_New_Enemy();
    /**
  * @brief method that checks if the randomly generated enemies crossed the player 
  *       and calls the End_Game method accordingly if they collide else increments the score  
  * @param lcd @details calls the lcd object to be passed to the End_Game method
  * @param pad @details calls the Gamepad object to be passed to the End_Game method
  */
    void Check_Enemy_Dead(N5110 &lcd,Gamepad &pad);
    /**
  * @brief method that checks the joystick (and L &R buttons) direction whether its left,right or centre
  *   and increment or decrement according to the current position  
  * @param pad @details calls the Gamepad object to access the get_direction method from the Gamepad class
  */
    void Joystick_position(Gamepad &pad);
    /**
  * @brief method that has the game loop which calls all the methods(from the same class)for the game to operate 
  * @param lcd @details calls the lcd object to be passed to the methods called inside this method
  * @param pad @details calls the Gamepad object to be passed to the methods called inside this method
  */
    void Game_Loop(N5110 &lcd,Gamepad &pad);
    /**
  * @brief method that draws the rocket sprite according to the player position
  * @param lcd @details calls the lcd object to access the drawSprite method
  * @param RocketPosition @details the position of the rocket 
  */
    void player_position(N5110 &lcd,char RocketPosition);
    /**
  * @brief method that draws the enemy sprite 
  * @param lcd @details calls the lcd object to access the drawSprite method
  * @param place @details the position of the rocket 
  * @param phase @details the phase of the rocket
  */
    void enemy_position(N5110 &lcd,int place, int phase);
    /**
  * @brief Sets the position
  * @param first_enemy_position @details position of the first enemy (as an int)
  */
    void set_first_position(int first_enemy_position);
    /**
  * @brief Sets the position
  * @param second_enemy_position @details position of the second enemy (as an int)
  */
    void set_second_position(int second_enemy_position);
    /**
  * @brief Sets the phase
  * @param enemy_phase @details phase of the enemy (as an int)
  */
    void set_enemy_phase(int enemy_phase);
    /**
  * @brief Sets the game speed
  * @param game_speed @details speed of the game (as an int)
  */
    void set_game_speed(int game_speed);
    /**
  * @brief Sets the game score
  * @param score @details score of the game (as an int)
  */
    void set_game_score(int score);
    /**
  * @brief set enemy dead flag
  * @param enemy_dead @details flag to indicate dead enemy(as a bool)
  */
    void set_enemy_dead(bool enemy_dead) ;
    /**
  * @brief set control flag
  * @param control @details flag for joystick control(as a bool)
  */
    void set_control(bool control);
    /**
  * @brief set initial position
  * @param Init_position @details initial position of the player(as an int)
  */
    void set_init_position(int Init_position);
    /**
  * @brief checks accelerometer positon
  * @param Init_position @details initial position of the player(as an int)
  * @param pad @details calls the Gamepad object to be passed to the methods called inside this method
  */
    void accelerometer_position(Gamepad &pad);
    /**
  * @brief method that has the game loop which calls all the methods and control with accelerometer 
  * @param lcd @details calls the lcd object to be passed to the methods called inside this method
  * @param pad @details calls the Gamepad object to be passed to the methods called inside this method
  */
    void Game_Loop_accelerometer(N5110 &lcd,Gamepad &pad);
    /**
  * @brief method that generates one random enemy
  * @details seeds the rand function then generate a random enemy between 1->3
  */
    void Generate_One_Enemy();
    
    
    
    private:

    int first_enemy_position;
    int second_enemy_position;
    int enemy_phase;
    int game_speed;
    int score;
    float pitchAngle;
    char Init_position;
    bool enemy_dead;
    bool control;
    GameTones tones;
    
    
    
};

#endif