Snake vs Block Game to be run upon K64F.

Dependencies:   mbed

Committer:
AhmedPlaymaker
Date:
Sat May 04 20:48:10 2019 +0000
Revision:
70:7caab8069b9b
Parent:
65:2872ca289b49
Child:
71:4bd2b27693f3
Thanks to my newly created test files, I removed some of the most uselessly redundant functions in my snake class relating to get pos. The test classes helped me debug the problems with the bulky code by letting me know what coordinates were saved.

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 64:540aa1602372 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 64:540aa1602372 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 64:540aa1602372 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 62:ebf6ecf8a6d5 83 //Gamepad @enginePad
AhmedPlaymaker 62:ebf6ecf8a6d5 84
AhmedPlaymaker 62:ebf6ecf8a6d5 85 private:
AhmedPlaymaker 62:ebf6ecf8a6d5 86
AhmedPlaymaker 9:d1d79d4ee673 87 /** Check for Snake and Food collision
AhmedPlaymaker 9:d1d79d4ee673 88 *
AhmedPlaymaker 9:d1d79d4ee673 89 * This function checks if the Snake has come into contact with it's food.
AhmedPlaymaker 9:d1d79d4ee673 90 */
AhmedPlaymaker 9:d1d79d4ee673 91 void CheckSnakeFoodCollision(Gamepad &pad);
AhmedPlaymaker 62:ebf6ecf8a6d5 92
AhmedPlaymaker 65:2872ca289b49 93 /** Check Snake Food Y Collision
AhmedPlaymaker 65:2872ca289b49 94 *
AhmedPlaymaker 65:2872ca289b49 95 * This function automatically detects each combination of collision in the y postion.
AhmedPlaymaker 65:2872ca289b49 96 */
AhmedPlaymaker 65:2872ca289b49 97 void CheckSnakeFoodYCollision(Gamepad &pad);
AhmedPlaymaker 65:2872ca289b49 98
AhmedPlaymaker 65:2872ca289b49 99 /** Check Snake Food X Collision
AhmedPlaymaker 65:2872ca289b49 100 *
AhmedPlaymaker 65:2872ca289b49 101 * This function automatically detects each combination of collision in the x postion.
AhmedPlaymaker 65:2872ca289b49 102 */
AhmedPlaymaker 65:2872ca289b49 103 void CheckSnakeFoodXCollision(Gamepad &pad, int y);
AhmedPlaymaker 65:2872ca289b49 104
AhmedPlaymaker 65:2872ca289b49 105 /** Implement Snake Food Collision
AhmedPlaymaker 65:2872ca289b49 106 *
AhmedPlaymaker 65:2872ca289b49 107 * This function automatically detects which food we are interacting with and increases the snake length accordingly.
AhmedPlaymaker 65:2872ca289b49 108 */
AhmedPlaymaker 65:2872ca289b49 109 void ImplementSnakeFoodCollision(Gamepad &pad, int x, int y);
AhmedPlaymaker 65:2872ca289b49 110
AhmedPlaymaker 12:1e601b176437 111 /** Check for Snake and Block collision
AhmedPlaymaker 12:1e601b176437 112 *
AhmedPlaymaker 12:1e601b176437 113 * This function checks if the Snake has come into contact with any Block.
AhmedPlaymaker 12:1e601b176437 114 */
AhmedPlaymaker 12:1e601b176437 115 void CheckSnakeBlockCollision(Gamepad &pad);
AhmedPlaymaker 62:ebf6ecf8a6d5 116
AhmedPlaymaker 39:210ac915e0a0 117 /** Implement velocity alteration.
AhmedPlaymaker 39:210ac915e0a0 118 *
AhmedPlaymaker 39:210ac915e0a0 119 * this is to stop/move the background (food and blocks), when collision occurs at a length greater than 10.lock.
AhmedPlaymaker 39:210ac915e0a0 120 */
AhmedPlaymaker 65:2872ca289b49 121 void _setVelocity(int srn);
AhmedPlaymaker 65:2872ca289b49 122
AhmedPlaymaker 65:2872ca289b49 123 /** Check Block
AhmedPlaymaker 65:2872ca289b49 124 *
AhmedPlaymaker 65:2872ca289b49 125 * This function returns the srn of the block we are colliding with;
AhmedPlaymaker 65:2872ca289b49 126 */
AhmedPlaymaker 65:2872ca289b49 127 int CheckBlock(int Block);
AhmedPlaymaker 65:2872ca289b49 128
AhmedPlaymaker 65:2872ca289b49 129 /** Implement Collision
AhmedPlaymaker 65:2872ca289b49 130 *
AhmedPlaymaker 65:2872ca289b49 131 * This function allows the appropriate maths to take place after every collision.
AhmedPlaymaker 65:2872ca289b49 132 */
AhmedPlaymaker 65:2872ca289b49 133 void ImplementSnakeBlockCollision(Gamepad &pad);
AhmedPlaymaker 62:ebf6ecf8a6d5 134
AhmedPlaymaker 13:9785f2404045 135 /** Check for Snake and Block Sides collision
AhmedPlaymaker 13:9785f2404045 136 *
AhmedPlaymaker 13:9785f2404045 137 * This function checks if the Snake has come into contact with any the sides of the block and stops it moving.
AhmedPlaymaker 13:9785f2404045 138 */
AhmedPlaymaker 38:30e4e6191762 139 void CheckSnakeBlockSidesCollision(Gamepad &pad);
AhmedPlaymaker 62:ebf6ecf8a6d5 140
AhmedPlaymaker 63:205f0ca48473 141 /** Make Default Motion Free
AhmedPlaymaker 63:205f0ca48473 142 *
AhmedPlaymaker 63:205f0ca48473 143 * This function makes the default motion of the snake freemoving before a collision is checked for, to forget the previous collision.
AhmedPlaymaker 63:205f0ca48473 144 */
AhmedPlaymaker 63:205f0ca48473 145 void MakeDefaultMotionFree();
AhmedPlaymaker 63:205f0ca48473 146
AhmedPlaymaker 62:ebf6ecf8a6d5 147 /** Check Collision in Y axis
AhmedPlaymaker 62:ebf6ecf8a6d5 148 *
AhmedPlaymaker 62:ebf6ecf8a6d5 149 * This function checks if the Snake and blocks collide anywhere in the Y axis.
AhmedPlaymaker 62:ebf6ecf8a6d5 150 */
AhmedPlaymaker 65:2872ca289b49 151 void CheckSnakeBlockSidesYCollision(int i);
AhmedPlaymaker 62:ebf6ecf8a6d5 152
AhmedPlaymaker 62:ebf6ecf8a6d5 153 /** Check Collision in X axis
AhmedPlaymaker 62:ebf6ecf8a6d5 154 *
AhmedPlaymaker 62:ebf6ecf8a6d5 155 * This function checks if the Snake and blocks collide anywhere in the X axis.
AhmedPlaymaker 62:ebf6ecf8a6d5 156 */
AhmedPlaymaker 65:2872ca289b49 157 void CheckSnakeBlockSidesXCollision(int i);
AhmedPlaymaker 62:ebf6ecf8a6d5 158
AhmedPlaymaker 62:ebf6ecf8a6d5 159 /** Check Collision East or West
AhmedPlaymaker 62:ebf6ecf8a6d5 160 *
AhmedPlaymaker 62:ebf6ecf8a6d5 161 * 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 162 */
AhmedPlaymaker 65:2872ca289b49 163 void CheckSnakeBlockSidesEastWestCollision(int b_x_combination, int i);
AhmedPlaymaker 62:ebf6ecf8a6d5 164
AhmedPlaymaker 64:540aa1602372 165 /** Make Virtual Length Max Ten
AhmedPlaymaker 64:540aa1602372 166 *
AhmedPlaymaker 64:540aa1602372 167 * 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 168 * on screen.
AhmedPlaymaker 64:540aa1602372 169 */
AhmedPlaymaker 64:540aa1602372 170 void makeVirtualLengthMaxTen();
AhmedPlaymaker 64:540aa1602372 171
AhmedPlaymaker 62:ebf6ecf8a6d5 172 /** Stop X Axis Motion
AhmedPlaymaker 62:ebf6ecf8a6d5 173 *
AhmedPlaymaker 62:ebf6ecf8a6d5 174 * This function implements the sides collision by making the x axis speed of the particular snake beed 0.
AhmedPlaymaker 62:ebf6ecf8a6d5 175 */
AhmedPlaymaker 65:2872ca289b49 176 void ImplementSnakeBlockSidesCollision(int i);
AhmedPlaymaker 64:540aa1602372 177
AhmedPlaymaker 64:540aa1602372 178 //OBJECT DECLARATIONS.
AhmedPlaymaker 64:540aa1602372 179 Snake _s;
AhmedPlaymaker 64:540aa1602372 180 LengthCalc _l;
AhmedPlaymaker 64:540aa1602372 181 WinLoose _wl;
AhmedPlaymaker 64:540aa1602372 182 SnakeFood _f;
AhmedPlaymaker 64:540aa1602372 183 SnakeFood _ff;
AhmedPlaymaker 64:540aa1602372 184 SnakeFood _fff;
AhmedPlaymaker 64:540aa1602372 185 Blocks _b;
AhmedPlaymaker 64:540aa1602372 186 Stats _Setstats;
AhmedPlaymaker 64:540aa1602372 187
AhmedPlaymaker 64:540aa1602372 188 //OBJECT POSITIONS ON SCREEN.
AhmedPlaymaker 64:540aa1602372 189 int snakex; //x position of top beed
AhmedPlaymaker 64:540aa1602372 190 int snakey; //y position of top beed
AhmedPlaymaker 64:540aa1602372 191 Vector2D snake_pos[15]; //saves the position of all the snake beeds in an array for ease of collision processing.
AhmedPlaymaker 64:540aa1602372 192 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 193 Vector2D b_pos; //saves the origin of the blocks on the screen (this is the top left corner of the block row).
AhmedPlaymaker 64:540aa1602372 194
AhmedPlaymaker 64:540aa1602372 195 //LEVEL PROGRESSION, FAILURE AND STATISTICS PARAMETERS.
AhmedPlaymaker 64:540aa1602372 196 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 197 char bufferlevel[14]; //this helps me print the level on screen.
AhmedPlaymaker 64:540aa1602372 198 int back; //enables the player to go back on main menu if back is pressed.
AhmedPlaymaker 64:540aa1602372 199 int _maxLength; // this makes us go to the next level if if maxLength is achieved;
AhmedPlaymaker 64:540aa1602372 200
AhmedPlaymaker 64:540aa1602372 201 //SNAKE X AXIS VELOCITY, SNAKE LENGTH ,MAX VIRTUAL LENGTH AND VARABLE THAT ALLOWS FREE MOTION OF A SPECIFIC BEED NUMBER OF THE SNAKE.
AhmedPlaymaker 64:540aa1602372 202 int velocity; //this is to stop/move the background (food and blocks), when collision occurs at a length greater than 10.
AhmedPlaymaker 64:540aa1602372 203 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 204 int _virtualLength; //saves the length of the snake, for collision detection relative to it's Max screen length.
AhmedPlaymaker 70:7caab8069b9b 205 int b[10]; //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 64:540aa1602372 206
AhmedPlaymaker 64:540aa1602372 207 //TURN DIRECTION, TILT ANGLE AND ANGLE RESET BUFFER (GARBAGE).
AhmedPlaymaker 64:540aa1602372 208 Direction _d;
AhmedPlaymaker 64:540aa1602372 209 float _tiltAngle; //saves the angle of tilt.
AhmedPlaymaker 64:540aa1602372 210 int garbage; //to save the angle at the point button A is pressed.
AhmedPlaymaker 64:540aa1602372 211
AhmedPlaymaker 64:540aa1602372 212 //BLOCK NUMBERS, BLOCK DROP GAP, BLOCK DETECTION SRN AND VARIABLE TO SEND/NOT BLOCK NUMBER TO BLOCK CLASS
AhmedPlaymaker 64:540aa1602372 213 int *b_number; //pointer to save the numbers inside the block.
AhmedPlaymaker 64:540aa1602372 214 int blocknum; // saves the number inside the specific colliding block, for calculations.
AhmedPlaymaker 64:540aa1602372 215 int blockgap; //to change frequency of fall
AhmedPlaymaker 64:540aa1602372 216 int srn; //sr number of the block we are colliding with (1 to 5)
AhmedPlaymaker 64:540aa1602372 217 int send_block_number; //makes sure that the block number is only updated when send is activated.
AhmedPlaymaker 64:540aa1602372 218
AhmedPlaymaker 64:540aa1602372 219 //INITIAL FOOD AND BLOCK DROP GAP.
AhmedPlaymaker 64:540aa1602372 220 int _dropbuff; //this makes food 1,2,and 3 come at seperate times
AhmedPlaymaker 7:48ba87cd79b5 221 };
AhmedPlaymaker 7:48ba87cd79b5 222 #endif