Snake vs Block Game to be run upon K64F.

Dependencies:   mbed

Committer:
AhmedPlaymaker
Date:
Mon Apr 29 12:09:31 2019 +0000
Revision:
59:c65a2e933c47
Parent:
56:142e9fdb77a8
Child:
62:ebf6ecf8a6d5
Changed Winning criteria and level progression in general, also fixed an error with motion control in menu and joystick misbehavior problem, next is tutorials.

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 7:48ba87cd79b5 19 public:
AhmedPlaymaker 7:48ba87cd79b5 20 SnakevsBlock();
AhmedPlaymaker 7:48ba87cd79b5 21 ~SnakevsBlock();
AhmedPlaymaker 7:48ba87cd79b5 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 7:48ba87cd79b5 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 41:4edac50f010d 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 49:441c32f6603e 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 7:48ba87cd79b5 46
AhmedPlaymaker 7:48ba87cd79b5 47 /** Draw
AhmedPlaymaker 7:48ba87cd79b5 48 *
AhmedPlaymaker 7:48ba87cd79b5 49 * This function contains the draw functions of the other libraries used in the game.
AhmedPlaymaker 7:48ba87cd79b5 50 */
AhmedPlaymaker 49:441c32f6603e 51 void draw(N5110 &lcd, Gamepad &pad);
AhmedPlaymaker 39:210ac915e0a0 52
AhmedPlaymaker 56:142e9fdb77a8 53 /** Update
AhmedPlaymaker 56:142e9fdb77a8 54 *
AhmedPlaymaker 56:142e9fdb77a8 55 * This function contains the update functions of the other libraries used in the game.
AhmedPlaymaker 56:142e9fdb77a8 56 */
AhmedPlaymaker 56:142e9fdb77a8 57 int update(N5110 &lcd, Gamepad &pad, SDFileSystem &sd);
AhmedPlaymaker 56:142e9fdb77a8 58
AhmedPlaymaker 7:48ba87cd79b5 59 /** Get Position
AhmedPlaymaker 7:48ba87cd79b5 60 *
AhmedPlaymaker 7:48ba87cd79b5 61 * This function contains the Get Position functions of the otehr libraries used in the game.
AhmedPlaymaker 7:48ba87cd79b5 62 */
AhmedPlaymaker 7:48ba87cd79b5 63 void get_pos();
AhmedPlaymaker 7:48ba87cd79b5 64
AhmedPlaymaker 29:c6358c39a70e 65 /** Check Block
AhmedPlaymaker 29:c6358c39a70e 66 *
AhmedPlaymaker 29:c6358c39a70e 67 * This function returns the srn of the block we are colliding with;
AhmedPlaymaker 29:c6358c39a70e 68 */
AhmedPlaymaker 29:c6358c39a70e 69 int CheckBlock(int Block);
AhmedPlaymaker 29:c6358c39a70e 70
AhmedPlaymaker 27:3b4775a0d0bb 71 /** Implement Collision
AhmedPlaymaker 27:3b4775a0d0bb 72 *
AhmedPlaymaker 27:3b4775a0d0bb 73 * This function allows the appropriate maths to take place after every collision.
AhmedPlaymaker 27:3b4775a0d0bb 74 */
AhmedPlaymaker 27:3b4775a0d0bb 75 void ImplementCollision(Gamepad &pad);
AhmedPlaymaker 27:3b4775a0d0bb 76
AhmedPlaymaker 41:4edac50f010d 77 int snakex; //x position of top beed
AhmedPlaymaker 41:4edac50f010d 78 int snakey; //y position of top beed
AhmedPlaymaker 59:c65a2e933c47 79 int length; //saves the length of the snake, for collision detection relative to it's length and calculations.
AhmedPlaymaker 39:210ac915e0a0 80 int velocity; //this is to stop/move the background (food and blocks), when collision occurs at a length greater than 10.
AhmedPlaymaker 59:c65a2e933c47 81 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 82 char bufferlevel[14]; //this helps me print the level on screen.
AhmedPlaymaker 38:30e4e6191762 83 int garbage; //to save the angle at the point button A is pressed.
AhmedPlaymaker 38:30e4e6191762 84 float angle; //saves the angle of tilt.
AhmedPlaymaker 9:d1d79d4ee673 85 int foodbuff; //this makes food 1,2,and 3 come at seperate times
AhmedPlaymaker 59:c65a2e933c47 86 int blocknum; // saves the number inside the colliding block, for calculations.
AhmedPlaymaker 19:05cc9f801468 87 int blockgap; //to change frequency of fall
AhmedPlaymaker 59:c65a2e933c47 88 int srn; //sr number of the block we are colliding with (1 to 5)
AhmedPlaymaker 42:973bb6036f81 89 int send_block_number; //makes sure that the block number is only updated when send is activated.
AhmedPlaymaker 25:e827f1a8fadc 90 int back; //enables the player to go back on main menu if back is pressed.
AhmedPlaymaker 59:c65a2e933c47 91 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 92 int *b_number; //pointer to save the numbers inside the block.
AhmedPlaymaker 59:c65a2e933c47 93 Vector2D snake_pos[15]; //saves the position of all the snake beeds in an array for ease of collision processing.
AhmedPlaymaker 59:c65a2e933c47 94 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 95 Vector2D b_pos; //saves the origin of the blocks on the screen (this is the top left corner of the block row).
AhmedPlaymaker 7:48ba87cd79b5 96
AhmedPlaymaker 7:48ba87cd79b5 97 private:
AhmedPlaymaker 7:48ba87cd79b5 98 Snake _s;
AhmedPlaymaker 41:4edac50f010d 99 LengthCalc _l;
AhmedPlaymaker 44:cd10d07ea1e5 100 WinLoose _wl;
AhmedPlaymaker 9:d1d79d4ee673 101 SnakeFood _f;
AhmedPlaymaker 9:d1d79d4ee673 102 SnakeFood _ff;
AhmedPlaymaker 9:d1d79d4ee673 103 SnakeFood _fff;
AhmedPlaymaker 10:751bd953fa27 104 Blocks _b;
AhmedPlaymaker 49:441c32f6603e 105 Stats _Setstats;
AhmedPlaymaker 7:48ba87cd79b5 106 int _speed;
AhmedPlaymaker 59:c65a2e933c47 107 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 108 int _maxLength; // this makes us go to the next level if if maxLength is achieved;
AhmedPlaymaker 7:48ba87cd79b5 109 Direction _d;
AhmedPlaymaker 7:48ba87cd79b5 110 float _mag;
AhmedPlaymaker 37:ee47699915b8 111 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 112 int n;
AhmedPlaymaker 7:48ba87cd79b5 113
AhmedPlaymaker 9:d1d79d4ee673 114 /** Check for Snake and Food collision
AhmedPlaymaker 9:d1d79d4ee673 115 *
AhmedPlaymaker 9:d1d79d4ee673 116 * This function checks if the Snake has come into contact with it's food.
AhmedPlaymaker 9:d1d79d4ee673 117 */
AhmedPlaymaker 9:d1d79d4ee673 118 void CheckSnakeFoodCollision(Gamepad &pad);
AhmedPlaymaker 9:d1d79d4ee673 119
AhmedPlaymaker 12:1e601b176437 120 /** Check for Snake and Block collision
AhmedPlaymaker 12:1e601b176437 121 *
AhmedPlaymaker 12:1e601b176437 122 * This function checks if the Snake has come into contact with any Block.
AhmedPlaymaker 12:1e601b176437 123 */
AhmedPlaymaker 12:1e601b176437 124 void CheckSnakeBlockCollision(Gamepad &pad);
AhmedPlaymaker 13:9785f2404045 125
AhmedPlaymaker 39:210ac915e0a0 126 /** Implement velocity alteration.
AhmedPlaymaker 39:210ac915e0a0 127 *
AhmedPlaymaker 39:210ac915e0a0 128 * this is to stop/move the background (food and blocks), when collision occurs at a length greater than 10.lock.
AhmedPlaymaker 39:210ac915e0a0 129 */
AhmedPlaymaker 39:210ac915e0a0 130 void _set_velocity();
AhmedPlaymaker 39:210ac915e0a0 131
AhmedPlaymaker 13:9785f2404045 132 /** Check for Snake and Block Sides collision
AhmedPlaymaker 13:9785f2404045 133 *
AhmedPlaymaker 13:9785f2404045 134 * This function checks if the Snake has come into contact with any the sides of the block and stops it moving.
AhmedPlaymaker 13:9785f2404045 135 */
AhmedPlaymaker 38:30e4e6191762 136 void CheckSnakeBlockSidesCollision(Gamepad &pad);
AhmedPlaymaker 7:48ba87cd79b5 137 };
AhmedPlaymaker 7:48ba87cd79b5 138 #endif