Steven Mahasin / Mbed 2 deprecated DreamDungeon

Dependencies:   mbed MotionSensor

Revision:
60:44ddfb791e2b
Parent:
59:fd4669864b67
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Player/Player.h	Thu May 09 14:55:43 2019 +0000
@@ -0,0 +1,495 @@
+#ifndef PLAYER_H
+#define PLAYER_H
+#include "Entity.h"
+#include "Bullets.h"
+#define INVULNERABILITY_PERIOD 50
+
+const int bullets_max = 20;
+/**Player Class
+*@author Steven Mahasin
+*@brief Creates a Player which inherits the Entity class, contains functions that accepts all user interractions (buttons, joystick, etc)
+*@date May 2019
+*/
+class Player : public Entity
+{
+private:
+
+    // Member Variables
+    /**
+    *   @brief a counter that increments to give a delay to the fire rate of player
+    */
+    int _fire_rate_counter;
+    /**
+    *   @brief a delay between each shot
+    */
+    int _fire_rate_delay;
+    /**
+    *   @brief the speed of the bullets created by this player
+    */
+    int _bullet_speed;
+    /**
+    *   @brief a counter that increments, allowing player to be invulnerable to a certain period defined
+    */
+    int _invulnerability_counter;
+    
+    // Private Functions
+    /**
+    *   @brief movement of the player
+    *   @param mapped_x - joystick x
+    *   @param mapped_y - joystick y
+    *   @param map - the 2d map array that dictates where there are walls or empty space
+    *   @param doorways - an array that dictates which side of the wall has a doorway
+    */
+    void move_player(float mapped_x, float mapped_y, char * map, bool * doorways);
+    /**
+    *   @brief movement of the bullets shot by this player
+    */
+    void move_bullets();
+    /**
+    *   @brief to increment the _frame protected variable, for animation of player
+    *   @param mapped_x - joystick x
+    *   @param mapped_y - joystick y
+    */
+    void increment_frames(float mapped_x, float mapped_y);
+    /**
+    *   @brief getting the needed frame of animation of player
+    *   @return char pointer array to the corresponding player frame
+    */
+    char * get_frame();
+    /**
+    *   @brief draws the player onto the screen
+    *   @param lcd - the screen the player is drawn onto
+    */
+    void draw_player(N5110 &lcd);
+    
+public:
+    /** Constructor 
+    *   @brief creates a player at positions pos_x and pos_y
+    *   @param pos_x - initialise _position.x
+    *   @param pos_y - initialise _position.y
+    */
+    Player(float pos_x, float pos_y);
+    /** Deconstructors */
+    ~Player();
+
+    // Accessors
+    /**
+    *   @brief getting the player's bullet speed
+    *   @return _bullet_speed
+    */
+    int get_bullet_speed();
+    /**
+    *   @brief getting the heart sprite's width
+    *   @return  width of the heart sprite
+    */
+    int get_hearts_width();
+    /**
+    *   @brief getting the heart sprite's height
+    *   @return  height of the heart sprite
+    */
+    int get_hearts_height();
+    /**
+    *   @brief getting the heart sprite char array
+    *   @return char pointer array to the heart sprite
+    */
+    char * get_hearts_sprite();
+    
+    // Functions
+    /**
+    *   @brief function calls both movement of player and movement of bullets
+    *   @param x_value - joystick x
+    *   @param y_value - joystick y
+    *   @param map - the 2d map array that dictates where there are walls or empty space
+    *   @param doorways - an array that dictates which side of the wall has a doorway
+    */
+    virtual void move(float x_value, float y_value, char * map, bool * doorways);
+    /**
+    *   @brief reduce _hp by damage
+    *   @param damage - the amount of damage to be taken
+    */
+    virtual void take_damage(int damage);
+    /**
+    *   @brief a virtual function of drawing the player onto the screen
+    *   @param lcd - the screen where the player is drawn on
+    */
+    virtual void draw(N5110 &lcd);
+    /**
+    *   @brief a virtual function of drawing the bullets the player shot onto the screen if j is the correct y-position of the bullets
+    *   @param lcd - the screen where the bullets is drawn on
+    *   @param j - which y-position hitboxes are currently being printed
+    */
+    void draw_bullets(N5110 &lcd, int j);
+    /**
+    *   @brief attempts to delete any bullets that goes out of bounds (out of screen or onto a wall)
+    *   @param map - the 2d map array that dictates where there are walls or empty space
+    *   @param doorawys - an array that dictates which side of the wall has a doorway
+    *   @return true if any bullets is successfully deleted
+    */
+    bool delete_out_of_bounds_bullets(char * map, bool * doorways);
+    /**
+    *   @brief deletes any existing bullets
+    */
+    void delete_bullets();
+    /**
+    *   @brief shoots bullets at the direction of the buttons
+    *   @param button_A - button down
+    *   @param button_B - button right
+    *   @param button_Y - button up
+    *   @param button_X - button left
+    */
+    void buttons(bool button_A, bool button_B, bool button_Y, bool button_X);
+
+    // Variables
+    /**
+    *   @brief a bullets pointer array that holds all the possible bullets the player can shoot
+    */
+    Bullets *bullets_array[bullets_max];
+    /**
+    *   @brief a boolean array that dictates which bullets in the bullets array exist
+    */
+    bool valid_bullets[bullets_max];
+    
+};
+
+// Sprite
+const char sprite_heart[9][9] = {
+    {0,1,1,0,0,0,1,1,0,},
+    {1,1,1,1,0,1,1,1,1,},
+    {1,2,1,1,1,1,1,1,1,},
+    {1,2,1,1,1,1,1,1,1,},
+    {1,2,1,1,1,1,1,1,1,},
+    {0,1,2,1,1,1,1,1,0,},
+    {0,0,1,1,1,1,1,0,0,},
+    {0,0,0,1,1,1,0,0,0,},
+    {0,0,0,0,1,0,0,0,0,}
+};
+
+const char sprite_dying_player [5][12][12] = { // sprite_dying_player [Frame][Size_Y][Size_X]
+    {
+        {0,1,1,1,1,0,0,0,0,0,0,0,},
+        {1,1,1,1,1,1,0,0,0,0,0,0,},
+        {1,2,1,1,1,1,0,0,0,0,0,0,},
+        {1,1,1,1,1,1,0,0,0,0,0,0,},
+        {0,1,1,1,1,0,0,0,0,0,0,0,},
+        {0,0,1,1,0,0,0,0,0,0,0,0,},
+        {0,0,1,1,0,0,0,0,0,0,0,0,},
+        {0,0,1,1,0,0,0,0,0,0,0,0,},
+        {0,0,1,1,0,0,0,0,0,0,0,0,},
+        {0,0,0,1,0,0,0,0,0,0,0,0,},
+        {0,0,0,1,0,0,0,0,0,0,0,0,},
+        {0,0,1,1,0,0,0,0,0,0,0,0,},
+    },
+    {
+        {0,0,0,0,1,1,1,0,0,0,0,0,},
+        {0,0,0,1,2,1,1,1,0,0,0,0,},
+        {0,0,0,1,1,1,1,1,0,0,0,0,},
+        {0,0,0,1,1,1,1,1,0,0,0,0,},
+        {0,0,0,0,1,1,1,0,0,0,0,0,},
+        {0,1,1,1,1,0,0,0,0,0,0,0,},
+        {0,0,1,1,1,0,0,0,0,0,0,0,},
+        {0,0,1,1,0,0,0,0,0,0,0,0,},
+        {0,1,1,1,0,0,0,0,0,0,0,0,},
+        {0,1,0,1,0,0,0,0,0,0,0,0,},
+        {1,0,0,1,0,0,0,0,0,0,0,0,},
+        {0,0,1,1,0,0,0,0,0,0,0,0,},
+    },
+    {
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,1,0,0,0,1,1,1,0,},
+        {0,0,0,0,0,1,0,1,1,2,1,1,},
+        {0,0,0,0,0,1,1,1,1,1,1,1,},
+        {0,0,0,1,1,1,1,1,1,1,1,1,},
+        {0,1,1,1,1,1,1,0,1,1,1,0,},
+        {1,0,0,1,1,0,0,0,0,0,0,0,},
+        {0,0,1,0,0,0,0,0,0,0,0,0,},
+        {0,1,0,0,0,0,0,0,0,0,0,0,},
+    },
+    {
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {1,0,0,0,1,0,0,0,1,1,1,0,},
+        {0,1,1,0,0,1,1,1,1,2,1,1,},
+        {1,0,0,1,1,1,1,1,1,1,1,1,},
+        {1,1,1,1,1,1,1,1,1,1,1,1,},
+    },
+    {
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,0,0,0,0,},
+        {0,0,0,0,0,0,0,0,1,1,1,0,},
+        {0,0,0,0,0,0,0,1,1,1,1,1,},
+        {1,0,0,1,1,1,1,1,1,1,1,1,},
+        {1,1,1,1,1,1,1,1,1,1,1,1,},
+    }
+};
+    
+
+const char sprite_transparent_player[12][6] = {
+    {0,0,0,0,0,0,},
+    {0,0,0,0,0,0,},
+    {0,0,0,0,0,0,},
+    {0,0,0,0,0,0,},
+    {0,0,0,0,0,0,},
+    {0,0,0,0,0,0,},
+    {0,0,0,0,0,0,},
+    {0,0,0,0,0,0,},
+    {0,0,0,0,0,0,},
+    {0,0,0,0,0,0,},
+    {0,0,0,0,0,0,},
+    {0,0,0,0,0,0,}
+};
+
+const char sprite_player [4][4][12][6] = {   // Player [Face][SpriteAnimationFrame][Size_Y][Size_X]
+    {
+        // Up
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,1,1,1,1,1,},
+            {1,1,1,1,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,1,1,1,1,0,},
+            {1,0,1,1,0,1,},
+            {1,0,1,1,0,1,},
+            {0,0,1,1,0,0,},
+            {0,1,0,0,1,0,},
+            {0,1,0,0,1,0,}
+        },
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,1,1,1,1,1,},
+            {1,1,1,1,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,1,1,1,1,0,},
+            {1,0,1,1,0,1,},
+            {0,0,1,1,0,1,},
+            {0,0,1,1,0,0,},
+            {0,1,0,0,1,0,},
+            {0,1,0,0,0,0,}
+        },
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,1,1,1,1,1,},
+            {1,1,1,1,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,1,1,1,1,0,},
+            {1,0,1,1,0,1,},
+            {1,0,1,1,0,1,},
+            {0,0,1,1,0,0,},
+            {0,1,0,0,1,0,},
+            {0,1,0,0,1,0,}
+        },
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,1,1,1,1,1,},
+            {1,1,1,1,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,1,1,1,1,0,},
+            {1,0,1,1,0,1,},
+            {1,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,1,0,0,1,0,},
+            {0,0,0,0,1,0,}
+        }
+    },
+    {
+        // Right
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,1,1,1,2,1,},
+            {1,1,1,1,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,0,0,0,},
+            {0,0,1,0,0,0,},
+            {0,0,1,1,0,0,}
+        },
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,1,1,1,2,1,},
+            {1,1,1,1,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,0,1,0,},
+            {0,1,0,0,1,0,},
+            {0,1,0,0,0,1,}
+        },
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,1,1,1,2,1,},
+            {1,1,1,1,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,0,0,0,},
+            {0,0,1,0,0,0,},
+            {0,0,1,1,0,0,}
+        },
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,1,1,1,2,1,},
+            {1,1,1,1,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,0,1,0,},
+            {0,1,0,0,1,0,},
+            {0,1,0,0,0,1,}
+        }
+    },
+    {
+        // Down
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,2,1,1,2,1,},
+            {1,1,2,2,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,1,1,1,1,0,},
+            {1,0,1,1,0,1,},
+            {1,0,1,1,0,1,},
+            {0,0,1,1,0,0,},
+            {0,1,0,0,1,0,},
+            {0,1,0,0,1,0,}
+        },
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,2,1,1,2,1,},
+            {1,1,2,2,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,1,1,1,1,0,},
+            {1,0,1,1,0,1,},
+            {0,0,1,1,0,1,},
+            {0,0,1,1,0,0,},
+            {0,1,0,0,1,0,},
+            {0,1,0,0,0,0,}
+        },
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,2,1,1,2,1,},
+            {1,1,2,2,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,1,1,1,1,0,},
+            {1,0,1,1,0,1,},
+            {1,0,1,1,0,1,},
+            {0,0,1,1,0,0,},
+            {0,1,0,0,1,0,},
+            {0,1,0,0,1,0,}
+        },
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,2,1,1,2,1,},
+            {1,1,2,2,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,1,1,1,1,0,},
+            {1,0,1,1,0,1,},
+            {1,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,1,0,0,1,0,},
+            {0,0,0,0,1,0,}
+        }
+    },
+    {
+        // Left
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,2,1,1,1,1,},
+            {1,1,1,1,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,0,1,0,0,},
+            {0,0,0,1,0,0,},
+            {0,0,1,1,0,0,}
+        },
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,2,1,1,1,1,},
+            {1,1,1,1,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,1,0,1,0,0,},
+            {0,1,0,0,1,0,},
+            {1,0,0,0,1,0,}
+        },
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,2,1,1,1,1,},
+            {1,1,1,1,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,0,1,0,0,},
+            {0,0,0,1,0,0,},
+            {0,0,1,1,0,0,}
+        },
+        {
+            {0,1,1,1,1,0,},
+            {1,1,1,1,1,1,},
+            {1,2,1,1,1,1,},
+            {1,1,1,1,1,1,},
+            {0,1,1,1,1,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,0,1,1,0,0,},
+            {0,1,0,1,0,0,},
+            {0,1,0,0,1,0,},
+            {1,0,0,0,1,0,}
+        }
+    }
+};
+
+#endif
\ No newline at end of file