![](/media/cache/profiles/LinkedIn_0NghoZJ.jpeg.50x50_q85.jpg)
Snake vs Block Game to be run upon K64F.
GameEngine/SnakevsBlock/SnakevsBlock.h@70:7caab8069b9b, 2019-05-04 (annotated)
- 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?
User | Revision | Line number | New 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 |