Snake vs Block Game to be run upon K64F.

Dependencies:   mbed

Committer:
AhmedPlaymaker
Date:
Wed May 01 22:35:40 2019 +0000
Revision:
63:205f0ca48473
Parent:
62:ebf6ecf8a6d5
Child:
64:540aa1602372
Sorted out some functions, specifically related to their functionality

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AhmedPlaymaker 7:48ba87cd79b5 1 #ifndef SNAKEVSBLOCK_H
AhmedPlaymaker 7:48ba87cd79b5 2 #define SNAKEVSBLOCK_H
AhmedPlaymaker 7:48ba87cd79b5 3
AhmedPlaymaker 7:48ba87cd79b5 4 #include "mbed.h"
AhmedPlaymaker 7:48ba87cd79b5 5 #include "N5110.h"
AhmedPlaymaker 38:30e4e6191762 6 #include "FXOS8700CQ.h"
AhmedPlaymaker 7:48ba87cd79b5 7 #include "Gamepad.h"
AhmedPlaymaker 7:48ba87cd79b5 8 #include "Snake.h"
AhmedPlaymaker 41:4edac50f010d 9 #include "LengthCalc.h"
AhmedPlaymaker 44:cd10d07ea1e5 10 #include "WinLoose.h"
AhmedPlaymaker 9:d1d79d4ee673 11 #include "SnakeFood.h"
AhmedPlaymaker 10:751bd953fa27 12 #include "Blocks.h"
AhmedPlaymaker 33:249cf423fb18 13 #include "StartScreen.h"
AhmedPlaymaker 33:249cf423fb18 14 #include "Stats.h"
AhmedPlaymaker 33:249cf423fb18 15 #include "SDFileSystem.h"
AhmedPlaymaker 7:48ba87cd79b5 16
AhmedPlaymaker 7:48ba87cd79b5 17 class SnakevsBlock
AhmedPlaymaker 7:48ba87cd79b5 18 {
AhmedPlaymaker 62:ebf6ecf8a6d5 19 public:
AhmedPlaymaker 7:48ba87cd79b5 20 SnakevsBlock();
AhmedPlaymaker 7:48ba87cd79b5 21 ~SnakevsBlock();
AhmedPlaymaker 62:ebf6ecf8a6d5 22
AhmedPlaymaker 7:48ba87cd79b5 23 /** Initialise Game Machine
AhmedPlaymaker 7:48ba87cd79b5 24 *
AhmedPlaymaker 7:48ba87cd79b5 25 * This function initialises the game machine.
AhmedPlaymaker 7:48ba87cd79b5 26 */
AhmedPlaymaker 49:441c32f6603e 27 void init();
AhmedPlaymaker 62:ebf6ecf8a6d5 28
AhmedPlaymaker 41:4edac50f010d 29 /** Reset Game Machine
AhmedPlaymaker 41:4edac50f010d 30 *
AhmedPlaymaker 41:4edac50f010d 31 * This function prepares the game machine for the next level.
AhmedPlaymaker 41:4edac50f010d 32 */
AhmedPlaymaker 41:4edac50f010d 33 void reset( );
AhmedPlaymaker 62:ebf6ecf8a6d5 34
AhmedPlaymaker 49:441c32f6603e 35 /** Initialise objects
AhmedPlaymaker 49:441c32f6603e 36 *
AhmedPlaymaker 49:441c32f6603e 37 * This function initialises the objects that are used to functionalise the game.
AhmedPlaymaker 49:441c32f6603e 38 */
AhmedPlaymaker 49:441c32f6603e 39 void object_initialisations();
AhmedPlaymaker 62:ebf6ecf8a6d5 40
AhmedPlaymaker 7:48ba87cd79b5 41 /** Read Input
AhmedPlaymaker 7:48ba87cd79b5 42 *
AhmedPlaymaker 7:48ba87cd79b5 43 * This function obtains numeric data from the gamepads joystick.
AhmedPlaymaker 7:48ba87cd79b5 44 */
AhmedPlaymaker 38:30e4e6191762 45 void read_input(Gamepad &pad, FXOS8700CQ &device, int gm);
AhmedPlaymaker 63:205f0ca48473 46
AhmedPlaymaker 63:205f0ca48473 47 /** Calculate Tilt
AhmedPlaymaker 63:205f0ca48473 48 *
AhmedPlaymaker 63:205f0ca48473 49 * This function reads the angle of tilt required for motion contol and also processes it by reseting the angle buffer if A is pressed.
AhmedPlaymaker 63:205f0ca48473 50 */
AhmedPlaymaker 63:205f0ca48473 51 void calculateTilt(Gamepad &pad, FXOS8700CQ &device);
AhmedPlaymaker 63:205f0ca48473 52
AhmedPlaymaker 63:205f0ca48473 53 /** Light The LEDS
AhmedPlaymaker 63:205f0ca48473 54 *
AhmedPlaymaker 63:205f0ca48473 55 * This function ligths the LEDS dependent on the direction of travel.
AhmedPlaymaker 63:205f0ca48473 56 */
AhmedPlaymaker 63:205f0ca48473 57 void lightTheLEDS(Gamepad &pad);
AhmedPlaymaker 62:ebf6ecf8a6d5 58
AhmedPlaymaker 62:ebf6ecf8a6d5 59 /** Draw
AhmedPlaymaker 7:48ba87cd79b5 60 *
AhmedPlaymaker 7:48ba87cd79b5 61 * This function contains the draw functions of the other libraries used in the game.
AhmedPlaymaker 7:48ba87cd79b5 62 */
AhmedPlaymaker 49:441c32f6603e 63 void draw(N5110 &lcd, Gamepad &pad);
AhmedPlaymaker 62:ebf6ecf8a6d5 64
AhmedPlaymaker 56:142e9fdb77a8 65 /** Update
AhmedPlaymaker 56:142e9fdb77a8 66 *
AhmedPlaymaker 56:142e9fdb77a8 67 * This function contains the update functions of the other libraries used in the game.
AhmedPlaymaker 56:142e9fdb77a8 68 */
AhmedPlaymaker 63:205f0ca48473 69 void update(N5110 &lcd, Gamepad &pad);
AhmedPlaymaker 63:205f0ca48473 70
AhmedPlaymaker 63:205f0ca48473 71 /** Check Game Progression
AhmedPlaymaker 63:205f0ca48473 72 *
AhmedPlaymaker 63:205f0ca48473 73 * Function handles level progression and level failure operations by using the class WinLoose.
AhmedPlaymaker 63:205f0ca48473 74 */
AhmedPlaymaker 63:205f0ca48473 75 int CheckGameProgression(N5110 &lcd, Gamepad &pad, SDFileSystem &sd);
AhmedPlaymaker 62:ebf6ecf8a6d5 76
AhmedPlaymaker 7:48ba87cd79b5 77 /** Get Position
AhmedPlaymaker 7:48ba87cd79b5 78 *
AhmedPlaymaker 7:48ba87cd79b5 79 * This function contains the Get Position functions of the otehr libraries used in the game.
AhmedPlaymaker 7:48ba87cd79b5 80 */
AhmedPlaymaker 7:48ba87cd79b5 81 void get_pos();
AhmedPlaymaker 62:ebf6ecf8a6d5 82
AhmedPlaymaker 29:c6358c39a70e 83 /** Check Block
AhmedPlaymaker 29:c6358c39a70e 84 *
AhmedPlaymaker 29:c6358c39a70e 85 * This function returns the srn of the block we are colliding with;
AhmedPlaymaker 29:c6358c39a70e 86 */
AhmedPlaymaker 29:c6358c39a70e 87 int CheckBlock(int Block);
AhmedPlaymaker 62:ebf6ecf8a6d5 88
AhmedPlaymaker 27:3b4775a0d0bb 89 /** Implement Collision
AhmedPlaymaker 27:3b4775a0d0bb 90 *
AhmedPlaymaker 27:3b4775a0d0bb 91 * This function allows the appropriate maths to take place after every collision.
AhmedPlaymaker 27:3b4775a0d0bb 92 */
AhmedPlaymaker 27:3b4775a0d0bb 93 void ImplementCollision(Gamepad &pad);
AhmedPlaymaker 62:ebf6ecf8a6d5 94
AhmedPlaymaker 41:4edac50f010d 95 int snakex; //x position of top beed
AhmedPlaymaker 41:4edac50f010d 96 int snakey; //y position of top beed
AhmedPlaymaker 59:c65a2e933c47 97 int length; //saves the length of the snake, for collision detection relative to it's length and calculations.
AhmedPlaymaker 39:210ac915e0a0 98 int velocity; //this is to stop/move the background (food and blocks), when collision occurs at a length greater than 10.
AhmedPlaymaker 59:c65a2e933c47 99 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.
AhmedPlaymaker 41:4edac50f010d 100 char bufferlevel[14]; //this helps me print the level on screen.
AhmedPlaymaker 38:30e4e6191762 101 int garbage; //to save the angle at the point button A is pressed.
AhmedPlaymaker 9:d1d79d4ee673 102 int foodbuff; //this makes food 1,2,and 3 come at seperate times
AhmedPlaymaker 59:c65a2e933c47 103 int blocknum; // saves the number inside the colliding block, for calculations.
AhmedPlaymaker 19:05cc9f801468 104 int blockgap; //to change frequency of fall
AhmedPlaymaker 59:c65a2e933c47 105 int srn; //sr number of the block we are colliding with (1 to 5)
AhmedPlaymaker 42:973bb6036f81 106 int send_block_number; //makes sure that the block number is only updated when send is activated.
AhmedPlaymaker 25:e827f1a8fadc 107 int back; //enables the player to go back on main menu if back is pressed.
AhmedPlaymaker 59:c65a2e933c47 108 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.
AhmedPlaymaker 41:4edac50f010d 109 int *b_number; //pointer to save the numbers inside the block.
AhmedPlaymaker 59:c65a2e933c47 110 Vector2D snake_pos[15]; //saves the position of all the snake beeds in an array for ease of collision processing.
AhmedPlaymaker 59:c65a2e933c47 111 Vector2D food_pos[3]; //saves the position of all 3 snake food on the screen in a single array for ease of collision processing.
AhmedPlaymaker 59:c65a2e933c47 112 Vector2D b_pos; //saves the origin of the blocks on the screen (this is the top left corner of the block row).
AhmedPlaymaker 62:ebf6ecf8a6d5 113
AhmedPlaymaker 62:ebf6ecf8a6d5 114 //Gamepad @enginePad
AhmedPlaymaker 62:ebf6ecf8a6d5 115
AhmedPlaymaker 62:ebf6ecf8a6d5 116 private:
AhmedPlaymaker 7:48ba87cd79b5 117 Snake _s;
AhmedPlaymaker 41:4edac50f010d 118 LengthCalc _l;
AhmedPlaymaker 44:cd10d07ea1e5 119 WinLoose _wl;
AhmedPlaymaker 9:d1d79d4ee673 120 SnakeFood _f;
AhmedPlaymaker 9:d1d79d4ee673 121 SnakeFood _ff;
AhmedPlaymaker 9:d1d79d4ee673 122 SnakeFood _fff;
AhmedPlaymaker 10:751bd953fa27 123 Blocks _b;
AhmedPlaymaker 49:441c32f6603e 124 Stats _Setstats;
AhmedPlaymaker 7:48ba87cd79b5 125 int _speed;
AhmedPlaymaker 59:c65a2e933c47 126 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.
AhmedPlaymaker 59:c65a2e933c47 127 int _maxLength; // this makes us go to the next level if if maxLength is achieved;
AhmedPlaymaker 7:48ba87cd79b5 128 Direction _d;
AhmedPlaymaker 63:205f0ca48473 129 float _tiltAngle; //saves the angle of tilt.
AhmedPlaymaker 7:48ba87cd79b5 130 float _mag;
AhmedPlaymaker 37:ee47699915b8 131 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.
AhmedPlaymaker 7:48ba87cd79b5 132 int n;
AhmedPlaymaker 62:ebf6ecf8a6d5 133
AhmedPlaymaker 9:d1d79d4ee673 134 /** Check for Snake and Food collision
AhmedPlaymaker 9:d1d79d4ee673 135 *
AhmedPlaymaker 9:d1d79d4ee673 136 * This function checks if the Snake has come into contact with it's food.
AhmedPlaymaker 9:d1d79d4ee673 137 */
AhmedPlaymaker 9:d1d79d4ee673 138 void CheckSnakeFoodCollision(Gamepad &pad);
AhmedPlaymaker 62:ebf6ecf8a6d5 139
AhmedPlaymaker 12:1e601b176437 140 /** Check for Snake and Block collision
AhmedPlaymaker 12:1e601b176437 141 *
AhmedPlaymaker 12:1e601b176437 142 * This function checks if the Snake has come into contact with any Block.
AhmedPlaymaker 12:1e601b176437 143 */
AhmedPlaymaker 12:1e601b176437 144 void CheckSnakeBlockCollision(Gamepad &pad);
AhmedPlaymaker 62:ebf6ecf8a6d5 145
AhmedPlaymaker 39:210ac915e0a0 146 /** Implement velocity alteration.
AhmedPlaymaker 39:210ac915e0a0 147 *
AhmedPlaymaker 39:210ac915e0a0 148 * this is to stop/move the background (food and blocks), when collision occurs at a length greater than 10.lock.
AhmedPlaymaker 39:210ac915e0a0 149 */
AhmedPlaymaker 39:210ac915e0a0 150 void _set_velocity();
AhmedPlaymaker 62:ebf6ecf8a6d5 151
AhmedPlaymaker 13:9785f2404045 152 /** Check for Snake and Block Sides collision
AhmedPlaymaker 13:9785f2404045 153 *
AhmedPlaymaker 13:9785f2404045 154 * This function checks if the Snake has come into contact with any the sides of the block and stops it moving.
AhmedPlaymaker 13:9785f2404045 155 */
AhmedPlaymaker 38:30e4e6191762 156 void CheckSnakeBlockSidesCollision(Gamepad &pad);
AhmedPlaymaker 62:ebf6ecf8a6d5 157
AhmedPlaymaker 63:205f0ca48473 158 /** Make Default Motion Free
AhmedPlaymaker 63:205f0ca48473 159 *
AhmedPlaymaker 63:205f0ca48473 160 * This function makes the default motion of the snake freemoving before a collision is checked for, to forget the previous collision.
AhmedPlaymaker 63:205f0ca48473 161 */
AhmedPlaymaker 63:205f0ca48473 162 void MakeDefaultMotionFree();
AhmedPlaymaker 63:205f0ca48473 163
AhmedPlaymaker 62:ebf6ecf8a6d5 164 /** Check Collision in Y axis
AhmedPlaymaker 62:ebf6ecf8a6d5 165 *
AhmedPlaymaker 62:ebf6ecf8a6d5 166 * This function checks if the Snake and blocks collide anywhere in the Y axis.
AhmedPlaymaker 62:ebf6ecf8a6d5 167 */
AhmedPlaymaker 62:ebf6ecf8a6d5 168 void check_Collision_Y_axis(int i);
AhmedPlaymaker 62:ebf6ecf8a6d5 169
AhmedPlaymaker 62:ebf6ecf8a6d5 170 /** Check Collision in X axis
AhmedPlaymaker 62:ebf6ecf8a6d5 171 *
AhmedPlaymaker 62:ebf6ecf8a6d5 172 * This function checks if the Snake and blocks collide anywhere in the X axis.
AhmedPlaymaker 62:ebf6ecf8a6d5 173 */
AhmedPlaymaker 62:ebf6ecf8a6d5 174 void check_Collision_X_axis(int i);
AhmedPlaymaker 62:ebf6ecf8a6d5 175
AhmedPlaymaker 62:ebf6ecf8a6d5 176 /** Check Collision East or West
AhmedPlaymaker 62:ebf6ecf8a6d5 177 *
AhmedPlaymaker 62:ebf6ecf8a6d5 178 * 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.
AhmedPlaymaker 62:ebf6ecf8a6d5 179 */
AhmedPlaymaker 62:ebf6ecf8a6d5 180 void checkCollision_EastorWest(int b_x_combination, int i);
AhmedPlaymaker 62:ebf6ecf8a6d5 181
AhmedPlaymaker 62:ebf6ecf8a6d5 182 /** Stop X Axis Motion
AhmedPlaymaker 62:ebf6ecf8a6d5 183 *
AhmedPlaymaker 62:ebf6ecf8a6d5 184 * This function implements the sides collision by making the x axis speed of the particular snake beed 0.
AhmedPlaymaker 62:ebf6ecf8a6d5 185 */
AhmedPlaymaker 62:ebf6ecf8a6d5 186 void StopX_AxisMotion(int length, int i);
AhmedPlaymaker 7:48ba87cd79b5 187 };
AhmedPlaymaker 7:48ba87cd79b5 188 #endif