Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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; } } }