Snake vs Block Game to be run upon K64F.

Dependencies:   mbed

GameEngine/SnakevsBlock/SnakevsBlock.h

Committer:
AhmedPlaymaker
Date:
2019-04-30
Revision:
62:ebf6ecf8a6d5
Parent:
59:c65a2e933c47
Child:
63:205f0ca48473

File content as of revision 62:ebf6ecf8a6d5:

#ifndef SNAKEVSBLOCK_H
#define SNAKEVSBLOCK_H

#include "mbed.h"
#include "N5110.h"
#include "FXOS8700CQ.h"
#include "Gamepad.h"
#include "Snake.h"
#include "LengthCalc.h"
#include "WinLoose.h"
#include "SnakeFood.h"
#include "Blocks.h"
#include "StartScreen.h"
#include "Stats.h"
#include "SDFileSystem.h"

class SnakevsBlock
{
public:
    SnakevsBlock();
    ~SnakevsBlock();

    /** Initialise Game Machine
    *
    *   This function initialises the game machine.
    */
    void init();

    /** Reset Game Machine
    *
    *   This function prepares the game machine for the next level.
    */
    void reset( );

    /** Initialise objects
    *
    *   This function initialises the objects that are used to functionalise the game.
    */
    void object_initialisations();

    /** Read Input
    *
    *   This function obtains numeric data from the gamepads joystick.
    */
    void read_input(Gamepad &pad, FXOS8700CQ &device, int gm);

    /** Draw
    *
    *   This function contains the draw functions of the other libraries used in the game.
    */
    void draw(N5110 &lcd, Gamepad &pad);

    /** Update
    *
    *   This function contains the update functions of the other libraries used in the game.
    */
    int update(N5110 &lcd, Gamepad &pad, SDFileSystem &sd);

    /** Get Position
    *
    *   This function contains the Get Position functions of the otehr libraries used in the game.
    */
    void get_pos();

    /** Check Block
    *
    *   This function returns the srn of the block we are colliding with;
    */
    int CheckBlock(int Block);

    /** Implement Collision
    *
    *   This function allows the appropriate maths to take place after every collision.
    */
    void ImplementCollision(Gamepad &pad);

    int snakex; //x position of top beed
    int snakey; //y position of top beed
    int length; //saves the length of the snake, for collision detection relative to it's length and calculations.
    int velocity; //this is to stop/move the background (food and blocks), when collision occurs at a length greater than 10.
    int level; // this is diffrent to int _length as this stops at 10 to not complicate collisions as the snake doesn't grow longer than 10 visually.
    char bufferlevel[14];  //this helps me print the level on screen.
    int garbage; //to save the angle at the point button A is pressed.
    float angle; //saves the angle of tilt.
    int foodbuff;  //this makes food 1,2,and 3 come at seperate times
    int blocknum; // saves the number inside the colliding block, for calculations.
    int blockgap; //to change frequency of fall
    int srn; //sr number of the block we are colliding with (1 to 5)
    int send_block_number; //makes sure that the block number is only updated when send is activated.
    int back; //enables the player to go back on main menu if back is pressed.
    int b[15]; //this saves the beed number of the colliding snake, if beed 3 from top was colliding with any obstruction, b[2] will be 1.
    int *b_number; //pointer to save the numbers inside the block.
    Vector2D snake_pos[15]; //saves the position of all the snake beeds in an array for ease of collision processing.
    Vector2D food_pos[3]; //saves the position of all 3 snake food on the screen in a single array for ease of collision processing.
    Vector2D b_pos; //saves the origin of the blocks on the screen (this is the top left corner of the block row).

    //Gamepad @enginePad

private:
    Snake _s;
    LengthCalc _l;
    WinLoose _wl;
    SnakeFood _f;
    SnakeFood _ff;
    SnakeFood _fff;
    Blocks _b;
    Stats _Setstats;
    int _speed;
    int _length; //this is diffrent to the int length as this saves the length of the snake, for collision detection relative to it's length and calculations.
    int _maxLength; // this makes us go to the next level if if maxLength is achieved;
    Direction _d;
    float _mag;
    int _detect_slowly; //this makes sure that when the length is more than 10, the colliding block doesnt decrease the all the length in a single itteration.
    int n;

    /** Check for Snake and Food collision
    *
    *   This function checks if the Snake has come into contact with it's food.
    */
    void CheckSnakeFoodCollision(Gamepad &pad);

    /** Check for Snake and Block collision
    *
    *   This function checks if the Snake has come into contact with any Block.
    */
    void CheckSnakeBlockCollision(Gamepad &pad);

    /** Implement velocity alteration.
    *
    *   this is to stop/move the background (food and blocks), when collision occurs at a length greater than 10.lock.
    */
    void _set_velocity();

    /** Check for Snake and Block Sides collision
    *
    *   This function checks if the Snake has come into contact with any the sides of the block and stops it moving.
    */
    void CheckSnakeBlockSidesCollision(Gamepad &pad);

    /** Check Collision in Y axis
    *
    *   This function checks if the Snake and blocks collide anywhere in the Y axis.
    */
    void check_Collision_Y_axis(int i);

    /** Check Collision in X axis
    *
    *   This function checks if the Snake and blocks collide anywhere in the X axis.
    */
    void check_Collision_X_axis(int i);

    /** Check Collision East or West
    *
    *  checks if the colliding wall is on east side or west side and then calls StopX_AxisMotion(length,i) to carry out the required task.
    */
    void checkCollision_EastorWest(int b_x_combination, int i);

    /** Stop X Axis Motion
    *
    *   This function implements the sides collision by making the x axis speed of the particular snake beed 0.
    */
    void StopX_AxisMotion(int length, int i);
};
#endif