Uses accompanying Basket, Objects and Fruit libraries to create Fruit Basket game. If an object is caught, points are added; if an object in missed, a 'life' is lost.

Dependents:   Game_Controller_Project

Catch_Model.h

Committer:
Nathanj94
Date:
2017-04-27
Revision:
14:6764bb61d413
Parent:
13:ae2dac4ab786
Child:
15:1a0bd800f1f1

File content as of revision 14:6764bb61d413:

#ifndef CATCH_MODEL_H
#define CATCH_MODEL_H

#include "mbed.h"
#include "N5110.h"
#include "Gamepad.h"
#include "Basket.h"
#include "Objects.h"

class Catch_Model
{
public:

    Catch_Model();
    ~Catch_Model();

    //INITILISATION FUNCTIONS//

    /** Initialise Game
    *
    *   Main initialisation function. The parameters are used to call
    *   Basket::init(int y, int width) and Objects::init(int speed), as well
    *   as set the number of lives/misses the player will be allowed and set
    *   the default value of a variable that restricts how often the player
    *   can use the A and B buttons.
    *   @param basket_y - y co-ordinate of the basket (0 to 47)
    *   @param basket_width - width of the basket (0 to 83)
    *   @param objects_speed - "fall" speed of the object (2,3,4,5)
    *   @param lives - number of lives/misses the player has
    */
    void init(int basket_y, int basket_width, int objects_speed, int lives);


    //UPDATE FUNCTIONS//

    /** Read Joystick Input
    *
    *   Read the direction and magnitude of the joystick and assign
    *   the values to variables by calling functions from the Gamepad
    *   library.
    *   @param pad - Gamepad custom library
    */
    void input(Gamepad &pad);

    /** Update Game
    *
    *   Checks if an object is caught by the basket or not then increases
    *   score or reduces lives appropriately. Moves the basket with either
    *   joystick or buttons and moves the objects too.
    *   @param lcd - N5110 custom library
    *   @param pad - Gamepad custom library
    */
    void update(N5110 &lcd, Gamepad &pad);


    //GAME RULES FUNCTIONS//

    /** Check Object has been Caught
    *
    *   Gets the x and y reference co-ordinates of the basket and the
    *   falling object from their respective libraries; if the x co-ordinate
    *   of the object is within the width of the basket and the y co-ordinate
    *   of the object is greater than that of the basket the object will be
    *   undrawn, the appropriate score will be added and the object will be
    *   re-initialised.
    *   @param lcd - N5110 custom library
    *   @param pad - Gamepad custom library
    */
    void check_basket_catch(N5110 &lcd, Gamepad &pad);

    /** Check Object has Missed
    *
    *   Gets the x and y reference co-ordinates of the basket and the
    *   falling object from their respective libraries; if the x co-ordinate
    *   of the object is outside the width of the basket and the y co-ordinate
    *   of the object is greater than that of the basket the object will be
    *   undrawn, the number of lives will be reduced and the object will be
    *   re-initialised.
    *   @param lcd - N5110 custom library
    *   @param pad - Gamepad custom library
    */
    void check_basket_miss(N5110 &lcd, Gamepad &pad);

    /** Add Correct Score
    *
    *   Gets the value of a variable from Objects that is specific to each
    *   object (type of fruit) and uses it to call the appropriate add_score
    *   function from Basket; increasing the score by 1, 2, 5 or 10.
    */
    void add_score();

    /** Get Lives
    *
    *   Return the remaining number of lives available to the player.
    */
    int get_lives();


    //BUTTON FUNCTIONS//

    /** Check A Button
    *
    *   If the A button is pressed, call Objects::undraw(N5110 &lcd) wherever
    *   it is on the display and call Objects::init(int speed) to give
    *   the player a second chance. Also set the value of a variable to zero
    *   so that the function cannot be recalled straight away.
    *   @param lcd - N5110 custom library
    *   @param pad - Gamepad custom library
    */
    void check_a(N5110 &lcd, Gamepad &pad);
    
    /** Check B Button
    *
    *   If the B button is pressed, increase number of lives by 1. Also set 
    *   the value of a variable to zero so that the function cannot be 
    *   recalled straight away.
    *   @param lcd - N5110 custom library
    *   @param pad - Gamepad custom library
    */
    void check_b(N5110 &lcd, Gamepad &pad);
    
    /** Set Delay to ON
    *
    *   10 seconds after the buttons A or B are pressed this function is called
    *   resetting the value of a variable to 1 so the buttons can be used again.
    */
    void set_delay();


    //DISPLAY FUNCTIONS//
    
    /** Draw All Features
    *
    *   Calls draw functions from the Basket and Objects libraries as well
    *   as functions to display the score, remaining lives and an indicator
    *   that tells the player if the A and B buttons are ready to be used.
    *   @param lcd - N5110 custom library
    */
    void draw(N5110 &lcd);
    
    /** Display the Number of Lives
    *
    *   Print a string of characters to the buffer, indicating how many lives
    *   remain.
    *   @param lcd - N5110 custom library
    */
    void print_lives(N5110 &lcd);
    
    /** Display the Score
    *
    *   Print a string of characters to the buffer, indicating the score.
    *   @param lcd - N5110 custom library
    */
    void print_score(N5110 &lcd);
    
    /** Display the Powerup Indicator
    *
    *   Print a tick or cross to the buffer, indicating whether or not 
    *   the A and B buttons are ready to be used.
    *   @param lcd - N5110 custom library
    */
    void print_delay(N5110 &lcd);

private:

    //OBJECTS//
    Basket basket;
    Objects objects;
    Timeout timeout;

    //VARIABLES//
    int _basket_y;
    int _basket_width;
    int _objects_speed;
    int _lives;
    int _delay;

    //JOYSTICK PARAMETERS//
    Direction _d;
    float _mag;

};
#endif