ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19zf

Dependencies:   mbed

shot/shot.cpp

Committer:
el19zf
Date:
2020-04-28
Revision:
6:dce38fe4e092
Parent:
5:6774b7272e85
Child:
7:c49f3d3b672f

File content as of revision 6:dce38fe4e092:

#include "shot.h"


shot::shot() {
    
}

shot::~shot() {
    
}

const int shots[4][3][3] = {
{       
        {1,1,0},
        {1,1,0},
        {0,0,1},        },
{       
        {1,0,0},
        {1,1,1},
        {1,0,0},        },
{
        {1,1,1},
        {0,1,0},
        {0,1,0},        },
{
        {0,1,0},
        {1,1,1},
        {0,1,0},        }
};

void shot::init() {
        
        _size = 10;
        _p.resize(_size);
        srand(time(NULL));
        for (std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++) {
            init_pos(i);
            (*i).type = rand_type();//randomise initial type 
            (*i).dir = rand() % 8;//randomise initial direction
        }
        
}

/*Direction shot::rand_dir() {
    
    srand(time(NULL));
    int d_num = rand() % 8; //randomise initial direction
    if (d_num == 0) { d = N; } else
    if (d_num == 1) { d = NE; } else
    if (d_num == 2) { d = E; } else
    if (d_num == 3) { d = SE; } else
    if (d_num == 4) { d = S; } else
    if (d_num == 5) { d = SW; } else
    if (d_num == 6) { d = W; } else
                    { d = NW;}   
    return d;
}*/

int shot::rand_type() {

    int type = rand() % 4;//set 4 type of shot
    return type; 
}

void shot::init_pos(shot_posandtype* i) {
    
    int num_pos = rand_type();
    if (num_pos == 0) {  (*i).x = (WIDTH/2-1);
                         (*i).y = 0;           }//up
    if (num_pos == 1) {  (*i).x = (WIDTH/2-1);
                         (*i).y = (HEIGHT-3);  }//down
    if (num_pos == 2) {  (*i).x = 0;
                         (*i).y = (HEIGHT/2-1);}//left
    if (num_pos == 3) {  (*i).x = (WIDTH-3);
                         (*i).y = (HEIGHT/2-1);}//right
}

void shot::gen_shot() {
    _p.resize(_size);
    for(std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++) {
        if(((*i).x == 0)&&((*i).y == 0)){
            init_pos(i);
            (*i).type = rand_type();//randomise initial type 
            (*i).dir = rand() % 8;//randomise initial direction
        }
    }    
}



void shot::update() {
    for (std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++) {
        if ((*i).dir == 0) {     (*i).x +=0; (*i).y +=2; } else
        if ((*i).dir == 1) {     (*i).x +=1; (*i).y +=1; } else
        if ((*i).dir == 2) {     (*i).x +=2; (*i).y +=0; } else
        if ((*i).dir == 3) {     (*i).x +=1; (*i).y -=1; } else
        if ((*i).dir == 4) {     (*i).x +=0; (*i).y -=2; } else
        if ((*i).dir == 5) {     (*i).x -=1; (*i).y -=1; } else
        if ((*i).dir == 6) {     (*i).x -=2; (*i).y -=0; } else
        if ((*i).dir == 7) {     (*i).x -=1; (*i).y +=1; }  
    }  
}


void shot::draw(N5110 &lcd){
    for (std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++){
        lcd.drawSprite((*i).x,(*i).y,3,3,(int*)shots[(*i).type]);
        printf("coordinate = %d,%d\n",(*i).x,(*i).y);
    }
}

void shot::delete_shot() {
    for (std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++){
        if(((*i).x < 0)||((*i).x > WIDTH)||((*i).y < 0)||((*i).y > HEIGHT)){
            init_pos(i);
            (*i).type = ((*i).type + 2)%4;
            (*i).dir = ((*i).dir + 1)%4;
        }
    }
}