
Final Commit
Dependencies: mbed
SnakeEngine/SnakeEngine.h
- Committer:
- JRM1986
- Date:
- 2018-05-08
- Revision:
- 27:bd0f69a75d8b
- Parent:
- 26:23301f48c1ed
File content as of revision 27:bd0f69a75d8b:
#ifndef SNAKEENGINE_H #define SNAKEENGINE_H #include "mbed.h" #include "Gamepad.h" #include "N5110.h" #include "Food.h" #include "Snake.h" /** SnakeEngine Class * @brief Class that initialises and defines the game charectoristics ready for the main file * @author Joshua R. Marshall * @date Feb, 2018 */ static Vector2D g_tp; void g_frame_time(int frame_time); static int g_tl; // tail length static int g_engine_fc; // frame counter for draw tail functions static int g_ft; // frame counter for decreasing time between food spawning static int g_n; // ensures spawning of food occurs periodically static bool g_wall; // wall collision detected /** Returns the speed */ static double g_speed; static int g_odd_array_x[100]; // array to store odd values for x component of tail segments static int g_odd_array_y[100]; // array to store odd values for y component of tail segments static int g_even_array_x[100]; // array to store even values for x component of tail segments static int g_even_array_y[100]; // array to store even values for y component of tail segments class SnakeEngine { public: SnakeEngine(); // constructor ~SnakeEngine(); // destructor /** Initialises the directions for the snake and the position for the food * @param Input direction from pad * @param Current direction of snake * @param pos_x x position * @param pos_y y position * @param sets initial number of frames between food spawning */ void init(Direction in, Direction cur, int pos_x, int pos_y, int n_frames); /** Updates the Food and Snake classes from the Gamepad */ void update(Gamepad &pad); /** Draws the game to the lcd */ void draw(N5110 &lcd); /** Draws the tail segments on the lcd */ void draw_tail(N5110 &lcd); /** Gets the updated direction from the Gamepad and stores it in a struct */ void get_input(Gamepad &pad); /** Check if snake has eaten food */ bool detect_food_collision(Gamepad &pad); /** Checks if snake has hit wall */ bool detect_wall_collision(Gamepad &pad); /** Checks if snake has hit it's own tail */ bool detect_tail_collision(); /** Increments the length variable for tail when food is eaten * @param Checks if food and head have collided (been eaten) */ void set_tail_length(bool collision_detected); /** Gets the updated length * @return returns the length of the tail */ int get_tail_length(); /** Creates an updated array of tail segments * @details When the engine_frame counter is odd it sets the odd_array, when the engine counter is even it sets the even_array. */ void set_tail_array(Gamepad &pad); /** Updates the odd array with new positions * @details For the odd array it initially sets index 0 of even array to the new position, then makes each odd index equal to the even index -1 starting from the the bottom of the array finally adding the new position to index 0 */ void set_odd_array(Gamepad &pad); /** Updates the even array with new positions * @details For the even array it initially sets index 0 of odd array to the new position, then makes each even index equal to the odd index -1 starting from the the bottom of the array finally adding the new position to index 0 */ void set_even_array(Gamepad &pad); /** Decreses the amount of frames between spawning of food * @param determines the interval and amount of tail segments are reached before the time between spawning reduces */ int food_spawning_time(int frame_decrementer); /** Changes the frame rate increasing speed * @param determines much food is eaten before increasing the speed * @param defines the increase in speed */ void increase_speed(int resetter, float speed_decrementer); private: Food _food; Snake _snake; //Direction _snake_current_direction; int _snake_pos_x; int _snake_pos_y; Direction _in; Direction _cur; bool _collision; int _n_frames; int _tail_x; int _tail_y; int _number_food_frames; void _wall_col_isr(); }; #endif