Snake vs Block Game to be run upon K64F.

Dependencies:   mbed

Committer:
AhmedPlaymaker
Date:
Wed May 08 16:39:24 2019 +0000
Revision:
87:871d9fecb593
Parent:
84:9950d561fdf8
Child:
92:693a6ae0ff8e
I have changed some variable names so that they have more meaning, and also added some more comments

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 79:35cb65c52d25 9 #include "LengthManager.h"
AhmedPlaymaker 44:cd10d07ea1e5 10 #include "WinLoose.h"
AhmedPlaymaker 9:d1d79d4ee673 11 #include "SnakeFood.h"
AhmedPlaymaker 10:751bd953fa27 12 #include "Blocks.h"
AhmedPlaymaker 81:4c1641e10dcd 13 #include "Barriers.h"
AhmedPlaymaker 33:249cf423fb18 14 #include "StartScreen.h"
AhmedPlaymaker 33:249cf423fb18 15 #include "Stats.h"
AhmedPlaymaker 33:249cf423fb18 16 #include "SDFileSystem.h"
AhmedPlaymaker 7:48ba87cd79b5 17
AhmedPlaymaker 7:48ba87cd79b5 18 class SnakevsBlock
AhmedPlaymaker 7:48ba87cd79b5 19 {
AhmedPlaymaker 62:ebf6ecf8a6d5 20 public:
AhmedPlaymaker 7:48ba87cd79b5 21 SnakevsBlock();
AhmedPlaymaker 7:48ba87cd79b5 22 ~SnakevsBlock();
AhmedPlaymaker 62:ebf6ecf8a6d5 23
AhmedPlaymaker 7:48ba87cd79b5 24 /** Initialise Game Machine
AhmedPlaymaker 7:48ba87cd79b5 25 *
AhmedPlaymaker 7:48ba87cd79b5 26 * This function initialises the game machine.
AhmedPlaymaker 7:48ba87cd79b5 27 */
AhmedPlaymaker 83:329da564799a 28 void init(N5110 *lcd, Gamepad *pad);
AhmedPlaymaker 62:ebf6ecf8a6d5 29
AhmedPlaymaker 41:4edac50f010d 30 /** Reset Game Machine
AhmedPlaymaker 41:4edac50f010d 31 *
AhmedPlaymaker 41:4edac50f010d 32 * This function prepares the game machine for the next level.
AhmedPlaymaker 41:4edac50f010d 33 */
AhmedPlaymaker 41:4edac50f010d 34 void reset( );
AhmedPlaymaker 62:ebf6ecf8a6d5 35
AhmedPlaymaker 49:441c32f6603e 36 /** Initialise objects
AhmedPlaymaker 49:441c32f6603e 37 *
AhmedPlaymaker 49:441c32f6603e 38 * This function initialises the objects that are used to functionalise the game.
AhmedPlaymaker 49:441c32f6603e 39 */
AhmedPlaymaker 49:441c32f6603e 40 void object_initialisations();
AhmedPlaymaker 62:ebf6ecf8a6d5 41
AhmedPlaymaker 7:48ba87cd79b5 42 /** Read Input
AhmedPlaymaker 7:48ba87cd79b5 43 *
AhmedPlaymaker 7:48ba87cd79b5 44 * This function obtains numeric data from the gamepads joystick.
AhmedPlaymaker 7:48ba87cd79b5 45 */
AhmedPlaymaker 83:329da564799a 46 void read_input(FXOS8700CQ &device, int gm);
AhmedPlaymaker 64:540aa1602372 47
AhmedPlaymaker 63:205f0ca48473 48 /** Calculate Tilt
AhmedPlaymaker 63:205f0ca48473 49 *
AhmedPlaymaker 63:205f0ca48473 50 * 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 51 */
AhmedPlaymaker 83:329da564799a 52 void calculateTilt(FXOS8700CQ &device);
AhmedPlaymaker 64:540aa1602372 53
AhmedPlaymaker 63:205f0ca48473 54 /** Light The LEDS
AhmedPlaymaker 63:205f0ca48473 55 *
AhmedPlaymaker 63:205f0ca48473 56 * This function ligths the LEDS dependent on the direction of travel.
AhmedPlaymaker 63:205f0ca48473 57 */
AhmedPlaymaker 83:329da564799a 58 void lightTheLEDS();
AhmedPlaymaker 62:ebf6ecf8a6d5 59
AhmedPlaymaker 84:9950d561fdf8 60 /** Update Snake Length And Movement
AhmedPlaymaker 84:9950d561fdf8 61 *
AhmedPlaymaker 84:9950d561fdf8 62 * This function updates length and motion data inside the snake class and also uses the length manager class to update length.
AhmedPlaymaker 84:9950d561fdf8 63 */
AhmedPlaymaker 84:9950d561fdf8 64 void updateSnakeLengthAndMovement();
AhmedPlaymaker 84:9950d561fdf8 65
AhmedPlaymaker 62:ebf6ecf8a6d5 66 /** Draw
AhmedPlaymaker 7:48ba87cd79b5 67 *
AhmedPlaymaker 7:48ba87cd79b5 68 * This function contains the draw functions of the other libraries used in the game.
AhmedPlaymaker 7:48ba87cd79b5 69 */
AhmedPlaymaker 83:329da564799a 70 void draw();
AhmedPlaymaker 62:ebf6ecf8a6d5 71
AhmedPlaymaker 56:142e9fdb77a8 72 /** Update
AhmedPlaymaker 56:142e9fdb77a8 73 *
AhmedPlaymaker 56:142e9fdb77a8 74 * This function contains the update functions of the other libraries used in the game.
AhmedPlaymaker 56:142e9fdb77a8 75 */
AhmedPlaymaker 83:329da564799a 76 void update();
AhmedPlaymaker 64:540aa1602372 77
AhmedPlaymaker 63:205f0ca48473 78 /** Check Game Progression
AhmedPlaymaker 63:205f0ca48473 79 *
AhmedPlaymaker 63:205f0ca48473 80 * Function handles level progression and level failure operations by using the class WinLoose.
AhmedPlaymaker 63:205f0ca48473 81 */
AhmedPlaymaker 83:329da564799a 82 int CheckGameProgression(SDFileSystem &sd);
AhmedPlaymaker 62:ebf6ecf8a6d5 83
AhmedPlaymaker 7:48ba87cd79b5 84 /** Get Position
AhmedPlaymaker 7:48ba87cd79b5 85 *
AhmedPlaymaker 7:48ba87cd79b5 86 * This function contains the Get Position functions of the otehr libraries used in the game.
AhmedPlaymaker 7:48ba87cd79b5 87 */
AhmedPlaymaker 7:48ba87cd79b5 88 void get_pos();
AhmedPlaymaker 62:ebf6ecf8a6d5 89
AhmedPlaymaker 62:ebf6ecf8a6d5 90 //Gamepad @enginePad
AhmedPlaymaker 62:ebf6ecf8a6d5 91
AhmedPlaymaker 62:ebf6ecf8a6d5 92 private:
AhmedPlaymaker 62:ebf6ecf8a6d5 93
AhmedPlaymaker 9:d1d79d4ee673 94 /** Check for Snake and Food collision
AhmedPlaymaker 9:d1d79d4ee673 95 *
AhmedPlaymaker 9:d1d79d4ee673 96 * This function checks if the Snake has come into contact with it's food.
AhmedPlaymaker 9:d1d79d4ee673 97 */
AhmedPlaymaker 83:329da564799a 98 void CheckSnakeFoodCollision();
AhmedPlaymaker 62:ebf6ecf8a6d5 99
AhmedPlaymaker 65:2872ca289b49 100 /** Check Snake Food Y Collision
AhmedPlaymaker 65:2872ca289b49 101 *
AhmedPlaymaker 65:2872ca289b49 102 * This function automatically detects each combination of collision in the y postion.
AhmedPlaymaker 65:2872ca289b49 103 */
AhmedPlaymaker 83:329da564799a 104 void CheckSnakeFoodYCollision(int food_sr);
AhmedPlaymaker 65:2872ca289b49 105
AhmedPlaymaker 65:2872ca289b49 106 /** Check Snake Food X Collision
AhmedPlaymaker 65:2872ca289b49 107 *
AhmedPlaymaker 65:2872ca289b49 108 * This function automatically detects each combination of collision in the x postion.
AhmedPlaymaker 65:2872ca289b49 109 */
AhmedPlaymaker 83:329da564799a 110 void CheckSnakeFoodXCollision(int food_sr);
AhmedPlaymaker 65:2872ca289b49 111
AhmedPlaymaker 65:2872ca289b49 112 /** Implement Snake Food Collision
AhmedPlaymaker 65:2872ca289b49 113 *
AhmedPlaymaker 65:2872ca289b49 114 * This function automatically detects which food we are interacting with and increases the snake length accordingly.
AhmedPlaymaker 65:2872ca289b49 115 */
AhmedPlaymaker 83:329da564799a 116 void ImplementSnakeFoodCollision(int food_sr);
AhmedPlaymaker 65:2872ca289b49 117
AhmedPlaymaker 12:1e601b176437 118 /** Check for Snake and Block collision
AhmedPlaymaker 12:1e601b176437 119 *
AhmedPlaymaker 12:1e601b176437 120 * This function checks if the Snake has come into contact with any Block.
AhmedPlaymaker 12:1e601b176437 121 */
AhmedPlaymaker 83:329da564799a 122 void CheckSnakeBlockCollision();
AhmedPlaymaker 62:ebf6ecf8a6d5 123
AhmedPlaymaker 39:210ac915e0a0 124 /** Implement velocity alteration.
AhmedPlaymaker 39:210ac915e0a0 125 *
AhmedPlaymaker 39:210ac915e0a0 126 * this is to stop/move the background (food and blocks), when collision occurs at a length greater than 10.lock.
AhmedPlaymaker 39:210ac915e0a0 127 */
AhmedPlaymaker 65:2872ca289b49 128 void _setVelocity(int srn);
AhmedPlaymaker 65:2872ca289b49 129
AhmedPlaymaker 65:2872ca289b49 130 /** Check Block
AhmedPlaymaker 65:2872ca289b49 131 *
AhmedPlaymaker 65:2872ca289b49 132 * This function returns the srn of the block we are colliding with;
AhmedPlaymaker 65:2872ca289b49 133 */
AhmedPlaymaker 65:2872ca289b49 134 int CheckBlock(int Block);
AhmedPlaymaker 65:2872ca289b49 135
AhmedPlaymaker 65:2872ca289b49 136 /** Implement Collision
AhmedPlaymaker 65:2872ca289b49 137 *
AhmedPlaymaker 65:2872ca289b49 138 * This function allows the appropriate maths to take place after every collision.
AhmedPlaymaker 65:2872ca289b49 139 */
AhmedPlaymaker 83:329da564799a 140 void ImplementSnakeBlockCollision();
AhmedPlaymaker 62:ebf6ecf8a6d5 141
AhmedPlaymaker 13:9785f2404045 142 /** Check for Snake and Block Sides collision
AhmedPlaymaker 13:9785f2404045 143 *
AhmedPlaymaker 13:9785f2404045 144 * This function checks if the Snake has come into contact with any the sides of the block and stops it moving.
AhmedPlaymaker 13:9785f2404045 145 */
AhmedPlaymaker 83:329da564799a 146 void CheckSnakeBlockSidesCollision();
AhmedPlaymaker 62:ebf6ecf8a6d5 147
AhmedPlaymaker 63:205f0ca48473 148 /** Make Default Motion Free
AhmedPlaymaker 63:205f0ca48473 149 *
AhmedPlaymaker 63:205f0ca48473 150 * This function makes the default motion of the snake freemoving before a collision is checked for, to forget the previous collision.
AhmedPlaymaker 63:205f0ca48473 151 */
AhmedPlaymaker 63:205f0ca48473 152 void MakeDefaultMotionFree();
AhmedPlaymaker 63:205f0ca48473 153
AhmedPlaymaker 62:ebf6ecf8a6d5 154 /** Check Collision in Y axis
AhmedPlaymaker 62:ebf6ecf8a6d5 155 *
AhmedPlaymaker 62:ebf6ecf8a6d5 156 * This function checks if the Snake and blocks collide anywhere in the Y axis.
AhmedPlaymaker 62:ebf6ecf8a6d5 157 */
AhmedPlaymaker 65:2872ca289b49 158 void CheckSnakeBlockSidesYCollision(int i);
AhmedPlaymaker 62:ebf6ecf8a6d5 159
AhmedPlaymaker 62:ebf6ecf8a6d5 160 /** Check Collision in X axis
AhmedPlaymaker 62:ebf6ecf8a6d5 161 *
AhmedPlaymaker 62:ebf6ecf8a6d5 162 * This function checks if the Snake and blocks collide anywhere in the X axis.
AhmedPlaymaker 62:ebf6ecf8a6d5 163 */
AhmedPlaymaker 65:2872ca289b49 164 void CheckSnakeBlockSidesXCollision(int i);
AhmedPlaymaker 62:ebf6ecf8a6d5 165
AhmedPlaymaker 84:9950d561fdf8 166 /** Check Block sides Collision is East or West
AhmedPlaymaker 62:ebf6ecf8a6d5 167 *
AhmedPlaymaker 84:9950d561fdf8 168 * checks if the colliding wall is on east side or west side and then calls ImplementBarrierCollision(i) to carry out the required task.
AhmedPlaymaker 62:ebf6ecf8a6d5 169 */
AhmedPlaymaker 79:35cb65c52d25 170 void CheckSnakeBlockSidesEastWestCollision(int X, int i);
AhmedPlaymaker 62:ebf6ecf8a6d5 171
AhmedPlaymaker 82:c51ae8a501d1 172 /** Check for Snake and Barrier collisions.
AhmedPlaymaker 82:c51ae8a501d1 173 *
AhmedPlaymaker 82:c51ae8a501d1 174 * This function checks if the Snake has come into contact with any the sides of the barriers and stops it moving in the X axis if true.
AhmedPlaymaker 82:c51ae8a501d1 175 */
AhmedPlaymaker 83:329da564799a 176 void CheckSnakeBarrierCollision(int bar_sr_no);
AhmedPlaymaker 84:9950d561fdf8 177
AhmedPlaymaker 82:c51ae8a501d1 178 /** Check Collision in Y axis
AhmedPlaymaker 82:c51ae8a501d1 179 *
AhmedPlaymaker 82:c51ae8a501d1 180 * This function checks if the Snake and blocks collide anywhere in the Y axis.
AhmedPlaymaker 82:c51ae8a501d1 181 */
AhmedPlaymaker 82:c51ae8a501d1 182 void CheckSnakeBarrierYCollision(int i, int bar_sr_no); //i is the index of the snake beed and checks for all possible collisions with the snake respective to it's length.
AhmedPlaymaker 84:9950d561fdf8 183
AhmedPlaymaker 84:9950d561fdf8 184 /** Check Barrier Collision is East or West
AhmedPlaymaker 84:9950d561fdf8 185 *
AhmedPlaymaker 84:9950d561fdf8 186 * checks if the colliding barrier's side is on east side or west side of snake and then calls ImplementBarrierCollision(i) to carry out the required task.
AhmedPlaymaker 84:9950d561fdf8 187 */
AhmedPlaymaker 82:c51ae8a501d1 188 void CheckSnakeBarrierEastWestCollision(int i, int bar_sr_no); //i checks for all possible collisions with the snake respective to it's length.
AhmedPlaymaker 82:c51ae8a501d1 189
AhmedPlaymaker 64:540aa1602372 190 /** Make Virtual Length Max Ten
AhmedPlaymaker 64:540aa1602372 191 *
AhmedPlaymaker 64:540aa1602372 192 * This makes the virtual length -> 10 for the side collision implementation because if the length is fifteen and the last beed collides, it still is the 10th beed
AhmedPlaymaker 64:540aa1602372 193 * on screen.
AhmedPlaymaker 64:540aa1602372 194 */
AhmedPlaymaker 64:540aa1602372 195 void makeVirtualLengthMaxTen();
AhmedPlaymaker 64:540aa1602372 196
AhmedPlaymaker 62:ebf6ecf8a6d5 197 /** Stop X Axis Motion
AhmedPlaymaker 62:ebf6ecf8a6d5 198 *
AhmedPlaymaker 62:ebf6ecf8a6d5 199 * This function implements the sides collision by making the x axis speed of the particular snake beed 0.
AhmedPlaymaker 62:ebf6ecf8a6d5 200 */
AhmedPlaymaker 82:c51ae8a501d1 201 void ImplementBarrierCollision(int i);
AhmedPlaymaker 64:540aa1602372 202
AhmedPlaymaker 64:540aa1602372 203 //OBJECT DECLARATIONS.
AhmedPlaymaker 64:540aa1602372 204 Snake _s;
AhmedPlaymaker 79:35cb65c52d25 205 LengthManager _l;
AhmedPlaymaker 64:540aa1602372 206 WinLoose _wl;
AhmedPlaymaker 64:540aa1602372 207 SnakeFood _f;
AhmedPlaymaker 64:540aa1602372 208 SnakeFood _ff;
AhmedPlaymaker 64:540aa1602372 209 SnakeFood _fff;
AhmedPlaymaker 64:540aa1602372 210 Blocks _b;
AhmedPlaymaker 81:4c1641e10dcd 211 Barriers _barA;
AhmedPlaymaker 81:4c1641e10dcd 212 Barriers _barB;
AhmedPlaymaker 64:540aa1602372 213 Stats _Setstats;
AhmedPlaymaker 84:9950d561fdf8 214
AhmedPlaymaker 83:329da564799a 215 //Pointer to the game pad object pad.
AhmedPlaymaker 83:329da564799a 216 Gamepad *_pad;
AhmedPlaymaker 83:329da564799a 217 //Pointer to the N5110 object lcd.
AhmedPlaymaker 83:329da564799a 218 N5110 *_lcd;
AhmedPlaymaker 64:540aa1602372 219
AhmedPlaymaker 64:540aa1602372 220 //OBJECT POSITIONS ON SCREEN.
AhmedPlaymaker 64:540aa1602372 221 int snakex; //x position of top beed
AhmedPlaymaker 64:540aa1602372 222 int snakey; //y position of top beed
AhmedPlaymaker 71:4bd2b27693f3 223 Vector2D snake_pos[10]; //saves the position of all the snake beeds in an array for ease of collision processing.
AhmedPlaymaker 64:540aa1602372 224 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 64:540aa1602372 225 Vector2D b_pos; //saves the origin of the blocks on the screen (this is the top left corner of the block row).
AhmedPlaymaker 82:c51ae8a501d1 226 Vector2D bar_pos[2]; //saves the origin of the barrier on the screen (this is the top left corner of the barrier).
AhmedPlaymaker 64:540aa1602372 227
AhmedPlaymaker 64:540aa1602372 228 //LEVEL PROGRESSION, FAILURE AND STATISTICS PARAMETERS.
AhmedPlaymaker 64:540aa1602372 229 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 64:540aa1602372 230 char bufferlevel[14]; //this helps me print the level on screen.
AhmedPlaymaker 64:540aa1602372 231 int back; //enables the player to go back on main menu if back is pressed.
AhmedPlaymaker 64:540aa1602372 232 int _maxLength; // this makes us go to the next level if if maxLength is achieved;
AhmedPlaymaker 64:540aa1602372 233
AhmedPlaymaker 81:4c1641e10dcd 234 //Block, Food and Barrier Y AXIS VELOCITY, SNAKE LENGTH ,MAX VIRTUAL LENGTH AND VARABLE THAT ALLOWS FREE MOTION OF A SPECIFIC BEED NUMBER OF THE SNAKE.
AhmedPlaymaker 64:540aa1602372 235 int velocity; //this is to stop/move the background (food and blocks), when collision occurs at a length greater than 10.
AhmedPlaymaker 64:540aa1602372 236 int _length; //this is diffrent to the _virtualLength as this saves the length of the snake, for collision detection relative to it's length and calculations.
AhmedPlaymaker 64:540aa1602372 237 int _virtualLength; //saves the length of the snake, for collision detection relative to it's Max screen length.
AhmedPlaymaker 87:871d9fecb593 238 int immobile_bead_n[10]; //this saves the beed number of the colliding snake, if beed 3 from top was colliding with any obstruction, immobile_bead_n[2] will be 1.
AhmedPlaymaker 64:540aa1602372 239
AhmedPlaymaker 64:540aa1602372 240 //TURN DIRECTION, TILT ANGLE AND ANGLE RESET BUFFER (GARBAGE).
AhmedPlaymaker 64:540aa1602372 241 Direction _d;
AhmedPlaymaker 64:540aa1602372 242 float _tiltAngle; //saves the angle of tilt.
AhmedPlaymaker 64:540aa1602372 243 int garbage; //to save the angle at the point button A is pressed.
AhmedPlaymaker 64:540aa1602372 244
AhmedPlaymaker 64:540aa1602372 245 //BLOCK NUMBERS, BLOCK DROP GAP, BLOCK DETECTION SRN AND VARIABLE TO SEND/NOT BLOCK NUMBER TO BLOCK CLASS
AhmedPlaymaker 64:540aa1602372 246 int *b_number; //pointer to save the numbers inside the block.
AhmedPlaymaker 64:540aa1602372 247 int blocknum; // saves the number inside the specific colliding block, for calculations.
AhmedPlaymaker 64:540aa1602372 248 int blockgap; //to change frequency of fall
AhmedPlaymaker 64:540aa1602372 249 int srn; //sr number of the block we are colliding with (1 to 5)
AhmedPlaymaker 64:540aa1602372 250 int send_block_number; //makes sure that the block number is only updated when send is activated.
AhmedPlaymaker 64:540aa1602372 251
AhmedPlaymaker 64:540aa1602372 252 //INITIAL FOOD AND BLOCK DROP GAP.
AhmedPlaymaker 64:540aa1602372 253 int _dropbuff; //this makes food 1,2,and 3 come at seperate times
AhmedPlaymaker 7:48ba87cd79b5 254 };
AhmedPlaymaker 7:48ba87cd79b5 255 #endif