Snake vs Block Game to be run upon K64F.

Dependencies:   mbed

Blocks/Blocks.cpp

Committer:
AhmedPlaymaker
Date:
2019-04-15
Revision:
30:461231877c89
Parent:
25:e827f1a8fadc
Child:
31:6566026b4c6a

File content as of revision 30:461231877c89:

#include "Blocks.h"

Blocks::Blocks()
{

}

Blocks::~Blocks()
{

}

//Frame Sprite.
int Frame[11][1] = {
    {0},
    {0},
    {1},
    {1},
    {1},
    {1},
    {1},
    {1},
    {1},
    {0},
    {0},
    };
int One[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,0,0,0,1,0,0,0,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,1,0,0,0,0,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,1,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,1,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,1,1,1,0,0,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Two[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,0,0,1,1,1,0,0,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,1,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,1,0,0,0,0,0,0,0,0},
    {0,0,0,0,0,1,1,1,1,1,0,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Three[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,0,1,1,1,1,1,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,1,0,0,0,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,1,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,0,1,1,1,0,0,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Four[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,0,0,0,0,1,0,0,0,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,0,1,0,0,0,0,0,0},
    {0,0,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,0},
    {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Five[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,0,1,1,1,1,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,1,1,1,1,0,0,0,0,0,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,1,0,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,0,1,1,1,0,0,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Six[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,0,0,0,0,1,1,0,0,0,0,0},
    {0,0,0,0,0,0,0,1,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,1,0,0,0,0,0,0,0,0},
    {0,0,0,0,0,1,1,1,1,0,0,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,0,1,1,1,0,0,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Seven[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,0,1,1,1,1,1,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,1,0,0,0,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,1,0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,1,0,0,0,0,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Eight[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,0,0,1,1,1,0,0,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,0,1,1,1,0,0,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,0,1,1,1,0,0,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Nine[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,0,0,1,1,1,0,0,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,0,1,1,1,1,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0},
    {0,0,0,0,0,0,1,1,0,0,0,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Ten[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,1,0,0,0,1,1,1,0,0,0,0},
    {0,0,0,1,1,0,0,1,0,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,1,0,0,1,1,0,0,0},
    {0,0,0,0,1,0,0,1,0,1,0,1,0,0,0},
    {0,0,0,0,1,0,0,1,1,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,1,0,0,0,1,0,0,0},
    {0,0,0,1,1,1,0,0,1,1,1,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Eleven[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,0,1,0,0,0,0,1,0,0,0,0},
    {0,0,0,0,1,1,0,0,0,1,1,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,0,1,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,0,1,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,0,1,0,0,0,0},
    {0,0,0,0,0,1,0,0,0,0,1,0,0,0,0},
    {0,0,0,0,1,1,1,0,0,1,1,1,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Twelve[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,1,0,0,0,1,1,1,0,0,0,0},
    {0,0,0,1,1,0,0,1,0,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,0,0,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,0,0,0,1,0,0,0,0},
    {0,0,0,0,1,0,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,1,0,0,0,1,0,0,0,0,0,0},
    {0,0,0,1,1,1,0,1,1,1,1,1,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Thirteen[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,1,0,0,1,1,1,1,1,0,0,0},
    {0,0,0,1,1,0,0,0,0,0,1,0,0,0,0},
    {0,0,0,0,1,0,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,1,0,0,0,0,0,1,0,0,0,0},
    {0,0,0,0,1,0,0,0,0,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,1,0,0,0,1,0,0,0},
    {0,0,0,1,1,1,0,0,1,1,1,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Fourteen[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,1,0,0,0,0,0,1,0,0,0,0},
    {0,0,0,1,1,0,0,0,0,1,1,0,0,0,0},
    {0,0,0,0,1,0,0,0,1,0,1,0,0,0,0},
    {0,0,0,0,1,0,0,1,0,0,1,0,0,0,0},
    {0,0,0,0,1,0,0,1,1,1,1,1,0,0,0},
    {0,0,0,0,1,0,0,0,0,0,1,0,0,0,0},
    {0,0,0,1,1,1,0,0,0,0,1,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Fifteen[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,1,0,0,1,1,1,1,1,0,0,0},
    {0,0,0,1,1,0,0,1,0,0,0,0,0,0,0},
    {0,0,0,0,1,0,0,1,1,1,1,0,0,0,0},
    {0,0,0,0,1,0,0,0,0,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,0,0,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,1,0,0,0,1,0,0,0},
    {0,0,0,1,1,1,0,0,1,1,1,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
/*
int Sixteen[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,1,0,0,0,0,0,1,1,0,0,0},
    {0,0,0,1,1,0,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,1,0,0,0,1,0,0,0,0,0,0},
    {0,0,0,0,1,0,0,1,1,1,1,0,0,0,0},
    {0,0,0,0,1,0,0,1,0,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,1,0,0,0,1,0,0,0},
    {0,0,0,1,1,1,0,0,1,1,1,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Seventeen[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,1,0,0,1,1,1,1,1,0,0,0},
    {0,0,0,1,1,0,0,0,0,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,0,0,0,1,0,0,0,0},
    {0,0,0,0,1,0,0,0,0,1,0,0,0,0,0},
    {0,0,0,0,1,0,0,0,1,0,0,0,0,0,0},
    {0,0,0,0,1,0,0,0,1,0,0,0,0,0,0},
    {0,0,0,1,1,1,0,0,1,0,0,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Eighteen[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,1,0,0,0,1,1,1,0,0,0,0},
    {0,0,0,1,1,0,0,1,0,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,1,0,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,0,1,1,1,0,0,0,0},
    {0,0,0,0,1,0,0,1,0,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,1,0,0,0,1,0,0,0},
    {0,0,0,1,1,1,0,0,1,1,1,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
int Nineteen[11][15] = {
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,0,0,0,1,0,0,0,1,1,1,0,0,0,0},
    {0,0,0,1,1,0,0,1,0,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,1,0,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,0,1,1,1,1,0,0,0},
    {0,0,0,0,1,0,0,0,0,0,0,1,0,0,0},
    {0,0,0,0,1,0,0,0,0,0,1,0,0,0,0},
    {0,0,0,1,1,1,0,0,1,1,0,0,0,0,0},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    };
*/

void Blocks::init()
{
    blockdrop=0;
    k = 0;
}


int Blocks::draw(N5110 &lcd, int length, int blocknum, int srn, int blockgap)
{   
    _velocity.x = 0;
    _velocity.y = 1;
    //Resets SnakeFood position if it reaches the bottom of the screen.
    //Also prevents SnakeFood from going out of the side of the screen.
    if(_bx < 0){
        _bx = 0;
        }
    if(_bx > 84){
        _bx = 84;
        }
    if(_by >= (blockgap)){
        k = 0;
        }
     if(k == 0){
        send=0;
        _bx = 0;  //change the number here so that there is always an unsurity(a little) if the food will come or not(change the limits for this)
        _by = -11;
        k = k+1;
        pos = 4;
        times = 1;
        i=0;// to save the positions of the random numbers generated in a block
        while(pos<=68)  {
            if(times == rand()%6)  {
                double round = length/(3/2);
                caseselect[i] = floor(round);
            }
            if(times == rand()%6)  {
                caseselect[i] = 0;
            }
            else    {
                caseselect[i] = rand()%16;
            }
            pos+=16;
            times+=1;
            if (times == 5)  {
                times = 0;
            }
            i++;
        }
        double roundagain = length/(14/4);  //to make sure at least one is smaller than the snake size
        caseselect[rand()%5] = floor(roundagain);
          
     }
    lcd.drawSprite(_bx+3,_by,11,1,(int *)Frame); //Function to draw the sprite.
    lcd.drawSprite(_bx+19,_by,11,1,(int *)Frame);
    lcd.drawSprite(_bx+35,_by,11,1,(int *)Frame);
    lcd.drawSprite(_bx+51,_by,11,1,(int *)Frame);
    lcd.drawSprite(_bx+67,_by,11,1,(int *)Frame);
    lcd.drawSprite(_bx+83,_by,11,1,(int *)Frame);
    i = 0;
    pos = 4;
    while((i<5)&&(pos<=68))  {
        state = caseselect[i];
        switch(state)  {
            case 0:
                // This case creates empty block
                break;
            case 1:
                lcd.drawSprite(pos,_by,11,15,(int *)One);
                break;
            case 2:
                lcd.drawSprite(pos,_by,11,15,(int *)Two);
                break;
            case 3:
                lcd.drawSprite(pos,_by,11,15,(int *)Three);
                break;
            case 4:
                lcd.drawSprite(pos,_by,11,15,(int *)Four);
                break;
            case 5:
                lcd.drawSprite(pos,_by,11,15,(int *)Five);
                break;
            case 6:
                lcd.drawSprite(pos,_by,11,15,(int *)Six);
                break;
            case 7:
                lcd.drawSprite(pos,_by,11,15,(int *)Seven);
                break;
            case 8:
                lcd.drawSprite(pos,_by,11,15,(int *)Eight);
                break;
            case 9:
                lcd.drawSprite(pos,_by,11,15,(int *)Nine);
                break;
            case 10:
                lcd.drawSprite(pos,_by,11,15,(int *)Ten);
                break;
            case 11:
                lcd.drawSprite(pos,_by,11,15,(int *)Eleven);
                break;
            case 12:
                lcd.drawSprite(pos,_by,11,15,(int *)Twelve);
                break;
            case 13:
                lcd.drawSprite(pos,_by,11,15,(int *)Thirteen);
                break;
            case 14:
                lcd.drawSprite(pos,_by,11,15,(int *)Fourteen);
                break;
            case 15:
                lcd.drawSprite(pos,_by,11,15,(int *)Fifteen);
                break;
            default:
                break;
            }
            i++;
            pos+=16;
        }
    return send;  //this is for the game to decide wether to remember the number on the block for the current itteration.
                  //we dont need to remember if it has already gone past the screen.
}



Vector2D Blocks::get_pos() //Obtains the X and Y coordinate of the target.
{
    Vector2D blockpos = {_bx,_by};
    //printf("blockpos is = %f %f \n", blockpos.x, blockpos.y);
    return blockpos;
}

int * Blocks::get_number() //Obtains the X and Y coordinate of the target.
{
    return caseselect;
}


void Blocks::update(int blocknum, int srn, int send) //send sends the block number only when the y position satisfies a particular requirement
{
    if(blockdrop == 0)  {
        _bx += _velocity.x;
        _by += _velocity.y;
    }
    blockdrop += 1;
    
    if(blockdrop == 1)  {  //make this a variable multiple of game speed
        blockdrop = 0;
    }
    if(send)  {
        caseselect[srn] = blocknum;
    }
}


void Blocks::set_pos(Vector2D p)
{
    _bx = p.x;
    _by = p.y;
}