An easy way to make bitmaps to be drawn on a Nokia N5110 lcd display

Dependencies:   N5110_fordrawings

Dependents:   DCGame el14m2l_Dungeon_Crawler_Game

drawings.h

Committer:
Martyrtle
Date:
2016-05-05
Revision:
0:9fcda3ae181c

File content as of revision 0:9fcda3ae181c:

/**
@file drawings.h
@brief Header file containing function prototypes, defines and global variables for the drawings.cpp file.
@brief Version 1.0.0
@author Marty Laverick
@date 5th May 2016
*/

#ifndef _DRAWINGS_H
#define _DRAWINGS_H

#include "mbed.h"
#include "N5110.h"

#define BG 0
#define GAME 1
#define HEALTH 2

extern N5110 lcd;

const char pointer[5][5]= {
   //0,1,2,3,4
    {1,1,0,0,0},//0
    {0,0,1,1,0},//1
    {0,0,0,1,1},//2
    {0,0,1,1,0},//3
    {1,1,0,0,0} //4
};  /*!< Pointer bitmap */

const char player_still[15][13]= {
   //0,1,2,3,4,5,6,7,8,9,a,b,c
    {0,0,0,0,1,0,0,1,0,0,0,0,0},//0
    {0,0,0,1,1,1,1,1,1,0,0,0,0},//1
    {0,0,1,2,1,2,2,1,1,1,1,1,0},//2
    {0,0,1,2,1,2,1,2,1,2,2,2,1},//3
    {0,1,1,2,2,1,2,2,1,1,1,1,1},//4
    {1,2,1,1,1,2,2,2,1,0,0,0,0},//5
    {1,2,2,1,1,1,1,1,1,0,0,0,0},//6
    {1,2,2,2,1,2,2,1,2,1,0,0,0},//7
    {0,1,2,2,1,2,2,1,2,1,0,0,0},//8
    {0,0,1,1,1,1,1,1,1,1,0,0,0},//9
    {0,0,0,0,1,2,2,1,2,1,0,0,0},//a
    {0,0,0,0,1,2,2,2,2,1,0,0,0},//b
    {0,0,0,0,0,1,1,1,1,0,0,0,0},//c
    {0,0,0,0,1,1,1,1,0,0,0,0,0},//d
    {0,0,0,0,0,1,1,0,0,0,0,0,0} //e
};  /*!< Player bitmap */

const char player_moving1[15][13]= {
   //0,1,2,3,4,5,6,7,8,9,a,b,c
    {0,0,0,1,0,0,0,1,0,0,0,0,0},//0
    {0,1,0,0,1,1,1,1,1,0,0,0,0},//1
    {1,2,1,0,1,2,2,1,1,1,0,0,0},//2
    {1,2,2,1,1,2,1,2,1,2,1,0,0},//3
    {0,1,2,2,2,1,2,2,1,1,2,1,0},//4
    {1,2,1,1,1,2,2,2,1,0,1,2,1},//5
    {1,2,2,1,1,1,1,1,1,0,0,1,1},//6
    {1,2,2,2,1,2,2,1,2,1,0,0,0},//7
    {0,1,2,2,1,2,2,1,2,1,0,0,0},//8
    {0,0,1,1,1,1,1,1,1,1,0,0,0},//9
    {0,0,0,0,1,2,2,1,2,1,0,0,0},//a
    {0,0,0,0,1,2,2,2,2,1,0,0,0},//b
    {0,0,0,0,0,1,1,1,1,0,0,0,0},//c
    {0,0,0,0,1,1,1,1,0,0,0,0,0},//d
    {0,0,0,0,0,1,1,0,0,0,0,0,0} //e
};  /*!< Player first moving transition bitmap */

const char player_moving2[15][13]= {
   //0,1,2,3,4,5,6,7,8,9,a,b,c
    {0,0,0,0,1,0,1,0,0,0,0,1,1},//0
    {0,0,0,0,1,1,1,1,1,0,1,2,1},//1
    {0,0,0,0,1,2,1,1,1,1,2,1,0},//2
    {0,0,1,1,2,2,1,2,1,2,1,0,0},//3
    {0,1,1,2,2,1,2,2,1,1,0,0,0},//4
    {1,2,1,2,1,2,2,2,1,0,0,0,0},//5
    {1,2,2,1,1,1,1,1,1,0,0,0,0},//6
    {1,2,2,2,1,2,2,1,2,1,0,0,0},//7
    {0,1,2,2,1,2,2,1,2,1,0,0,0},//8
    {0,0,1,1,1,1,1,1,1,1,0,0,0},//9
    {0,0,0,0,1,2,2,1,2,1,0,0,0},//a
    {0,0,0,0,1,2,2,2,2,1,0,0,0},//b
    {0,0,0,0,0,1,1,1,1,0,0,0,0},//c
    {0,0,0,0,1,1,1,1,0,0,0,0,0},//d
    {0,0,0,0,0,1,1,0,0,0,0,0,0} //e
};  /*!< Player second moving transition bitmap */

const char player_jumping[15][13]= {
   //0,1,2,3,4,5,6,7,8,9,a,b,c
    {0,0,0,1,0,0,1,0,0,0,0,0,0},//0
    {0,0,0,0,1,1,1,1,1,0,0,0,0},//1
    {0,0,0,0,1,2,2,1,1,0,0,0,0},//2
    {0,0,1,1,1,1,1,2,1,0,0,0,0},//3
    {0,1,2,2,1,2,1,2,1,1,0,0,0},//4
    {1,2,2,2,1,2,1,1,1,2,1,0,0},//5
    {1,2,2,2,1,2,2,1,1,1,2,1,0},//6
    {1,2,2,2,1,1,2,1,2,1,1,2,1},//7
    {0,1,2,2,1,2,1,1,2,1,0,1,1},//8
    {0,0,1,1,1,1,1,1,1,1,0,0,0},//9
    {0,0,0,0,1,2,2,1,2,1,0,0,0},//a
    {0,0,0,0,1,2,2,2,2,1,0,0,0},//b
    {0,0,0,0,0,1,1,1,1,0,0,0,0},//c
    {0,0,0,0,1,1,1,1,0,0,0,0,0},//d
    {0,0,0,0,0,1,1,0,0,0,0,0,0} //e
};  /*!< Player jumping bitmap */

const char spike_small[5][5]= {
   //0,1,2,3,4
    {1,2,2,2,1},//0
    {1,2,2,2,1},//1
    {0,1,2,1,0},//2
    {0,1,2,1,0},//3
    {0,0,1,0,0} //4
};  /*!< Small spike bitmap */

const char spike_large[8][6]= {
   //0,1,2,3,4,5
    {1,2,2,2,2,1},//0
    {1,2,2,2,2,1},//1
    {1,2,2,2,2,1},//2
    {1,2,2,2,1,0},//3
    {0,1,2,2,1,0},//4
    {0,1,2,2,1,0},//5
    {0,1,2,2,1,0},//6
    {0,0,1,1,0,0} //7
};  /*!< Large spike bitmap */

const char bat_middle[7][13]= {
   //0,1,2,3,4,5,6,7,8,9,a,b,c
    {0,0,0,0,0,1,0,1,0,0,0,0,0},//0
    {0,0,0,0,0,1,1,1,0,0,0,0,0},//1
    {0,0,1,1,1,1,1,1,1,1,1,0,0},//2
    {0,0,1,1,1,1,1,1,1,1,1,0,0},//3
    {0,0,0,1,1,1,1,1,1,1,0,0,0},//4
    {0,0,0,0,1,1,1,1,1,0,0,0,0},//5
    {0,0,0,0,0,1,0,1,0,0,0,0,0} //6
};  /*!< Bat wings flappin transition bitmap */

const char bat_open[7][13]= {
   //0,1,2,3,4,5,6,7,8,9,a,b,c
    {0,0,0,0,0,1,0,1,0,0,0,0,0},//0
    {0,0,0,0,0,1,1,1,0,0,0,0,0},//1
    {1,1,1,1,1,1,1,1,1,1,1,1,1},//2
    {0,1,1,1,1,1,1,1,1,1,1,1,0},//3
    {0,0,0,1,1,1,1,1,1,1,0,0,0},//4
    {0,0,0,0,1,1,1,1,1,0,0,0,0},//5
    {0,0,0,0,0,1,0,1,0,0,0,0,0} //6
};  /*!< Bat with open wings bitmap */

const char bat_close[7][13]= {
   //0,1,2,3,4,5,6,7,8,9,a,b,c
    {0,0,0,0,0,1,0,1,0,0,0,0,0},//0
    {0,0,0,0,0,1,1,1,0,0,0,0,0},//1
    {0,0,0,0,1,1,1,1,1,0,0,0,0},//2
    {0,0,0,1,1,1,1,1,1,1,0,0,0},//3
    {0,0,0,1,1,1,1,1,1,1,0,0,0},//4
    {0,0,0,0,1,1,1,1,1,0,0,0,0},//5
    {0,0,0,0,0,1,0,1,0,0,0,0,0} //6
};  /*!< Bat with closed wings bitmap */

const char mark_ver[5][3]= {
   //0,1,2
    {0,1,0},//0
    {0,0,1},//1
    {1,0,1},//2
    {1,0,0},//3
    {0,1,0} //4
};  /*!< Vertical mark bitmap */

const char mark_hor[3][5]= {
   //0,1,2,3,4
    {0,0,1,1,0},//0
    {1,0,0,0,1},//1
    {0,1,1,0,0} //2
};  /*!< Horizontal mark bitmap */

const char rocks[4][6]= {
   //0,1,2,3,4,5
    {1,2,1,2,2,1},//0
    {1,2,2,1,1,0},//1
    {0,1,2,2,1,0},//2
    {0,0,1,1,0,0} //3
};  /*!< Rocks bitmap */

class Screen
{
    public:
    /** Create a Screen object
    */
    Screen() {};
    /** Initialise Screen
    *
    *   Sets all the elements in the array to 0.
    */
    void init();
    /** Set a Pixel
    *
    *   This function sets a pixel in the array.
    *   @param  x - the x co-ordinate of the pixel (0 to 83)
    *   @param  y - the y co-ordinate of the pixel (0 to 47)
    *   @param layer - the layer co-ordinate of the pixel (0 to 2)
    */
    void set_pixel(int x, int y, int layer);
    /** Clear a Pixel
    *
    *   This function clears a pixel in the array.
    *   @param  x - the x co-ordinate of the pixel (0 to 83)
    *   @param  y - the y co-ordinate of the pixel (0 to 47)
    *   @param layer - the layer co-ordinate of the pixel (0 to 2)
    */
    void clear_pixel(int x, int y, int layer);
    /** Clear a Layer
    *
    *   This function clears a layer in the array.
    *   @param layer - the layer co-ordinate of the pixel (0 to 2)
    */
    void clear_layer(int layer);
    /** Set a Pixel
    *
    *   This function clears the array.
    */
    void clear();
    /** Draw a Layer
    *
    *   This function displays a layer in the array.
    *   @param layer - the layer co-ordinate of the pixel (0 to 2)
    */
    void draw_layer(int layer);
    /** Draw all Layers
    *
    *   This function displays all layers in the array.
    */
    void draw();
    /** Get a Pixel
    *
    *   This function gets the status of a pixel in the array.
    *   @param  x - the x co-ordinate of the pixel (0 to 83)
    *   @param  y - the y co-ordinate of the pixel (0 to 47)
    *   @param layer - the layer co-ordinate of the pixel (0 to 2)
    *   @returns
    *       0       - pixel is clear
    *       1       - pixel is set
    */
    bool get_pixel(int x, int y, int layer);
    char layers[48][84][3]; //[y][x][(0 is the background, 1 is the game and 2 is health)]
};

class object
{
    public:
    /** Create an object object
    */
    object() {};
    /** Create an object object with the specified width and height
    *
    * Sets the array line to be of size [height][width].
    * @param _width - the width of the object
    * @param _height - the height of the object
    *
    */
    object(int _width,int _height):width(_width),height(_height) {
        line = new char*[height];
        for(int i=0; i<height; i++) {
            line[i] = new char[width];
        }
    };
    /** Fills Line Array
    *
    *   Sets the elements of the line array.
    */
    void fill(const char array[][3]);
    /** Fills Line Array
    *
    *   Sets the elements of the line array.
    */
    void fill(const char array[][5]);
    /** Fills Line Array
    *
    *   Sets the elements of the line array.
    */
    void fill(const char array[][6]);
    /** Fills Line Array
    *
    *   Sets the elements of the line array.
    */
    void fill(const char array[][13]);
    /** Fills Line Array
    *
    *   Sets the elements of the line array.
    */
    void fill(const char array[][25]);
    /** Draw Line
    *
    *   This function displays the line array.
    *   @param  x - the x co-ordinate of the pixel (0 to 83)
    *   @param  y - the y co-ordinate of the pixel (0 to 47)
    */
    void draw(int x,int y);
    /** Draw Line
    *
    *   This function sets the line array in a layer of the Screen.
    *   @param  x - the x co-ordinate of the pixel (0 to 83)
    *   @param  y - the y co-ordinate of the pixel (0 to 47)
    *   @param layer - the layer co-ordinate of the pixel (0 to 2)
    */
    void draw_screen(int x, int y, int layer);
    /** Set Array
    *
    *   Sets the array line to be of size [height][width].
    *   @param _width - the width of the object
    *   @param _height - the height of the object
    */
    void set(int _width,int _height);
    /** Checks Collisions
    *
    *   This function checks the horizontal pixels above the object for a turned on pixel
    *   @param  x - the x co-ordinate of the pixel (0 to 83)
    *   @param  y - the y co-ordinate of the pixel (0 to 47)
    *   @returns
    *       0       - no collision
    *       1       - collision
    */
    bool check_collision(int x, int y);
    
    private:
    int width;
    int height;
    char **line;
};

class animation
{
    public:
    /** Create an animation object with the specified width and height and arrays to make the animation
    *
    * Sets the array line to be of size [height][width] and makes objects for each animation state.
    * @param _width - the width of the object
    * @param _height - the height of the object
    *
    */
    animation(int _width,int _height,const char _array1[][13],const char _array2[][13],const char _array3[][13]):width(_width),height(_height) {
        state1.set(width,height);
        state2.set(width,height);
        state3.set(width,height);
        state1.fill(_array1);
        state2.fill(_array2);
        state3.fill(_array3);
        state = 0;
        next = 0;
        divider = 2;
        counter = 0;
    }
    /** Draw State
    *
    *   This function displays the state.
    *   @param  x - the x co-ordinate of the pixel (0 to 83)
    *   @param  y - the y co-ordinate of the pixel (0 to 47)
    */
    void draw(int x,int y);
    /** Draw State
    *
    *   This function sets the state in a layer of the Screen.
    *   @param  x - the x co-ordinate of the pixel (0 to 83)
    *   @param  y - the y co-ordinate of the pixel (0 to 47)
    *   @param layer - the layer co-ordinate of the pixel (0 to 2)
    */
    void draw_screen(int x, int y, int layer);
    char counter;
    char state;
    char next;
    
    private:
    int width;
    int height;
    object state1;
    object state2;
    object state3;
    char divider;
};

class Background
{
    public:
    /** Create a Background object and initialises the objects used in it
    */
    Background() {
        //Objects
        mark_ver_obj.set(3,5);
        mark_hor_obj.set(5,3);
        rocks_obj.set(6,4);
        mark_ver_obj.fill(mark_ver);
        mark_hor_obj.fill(mark_hor);
        rocks_obj.fill(rocks);
        counter=0;
    };
    char wall[48][84];
    char counter;
    /** Initialise Background
    *
    *   Sets all the elements in the array to 0.
    *   draws the objects into the array.
    */
    void init();
    /** Fill Background
    *
    *   Sets all the elements in the array to the elements from the Screen.
    */
    void fill(char array[48][84][3]);
    /** Draw Background
    *
    *   This function displays the array.
    */
    void draw();
    /** Draw Screen
    *
    *   This function sets the array to the BG sub-array.
    *   @param layer - the layer co-ordinate of the pixel (0 to 2)
    */
    void draw_screen(int layer);
    
    private:
    object mark_ver_obj;
    object mark_hor_obj;
    object rocks_obj;
};

#endif