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@16:cf2bfada3adf, 2020-05-18 (annotated)
- Committer:
 - el19zf
 - Date:
 - Mon May 18 08:56:17 2020 +0000
 - Revision:
 - 16:cf2bfada3adf
 - Parent:
 - 15:3571beaaeed8
 - Child:
 - 19:5083339b55e8
 
update the paused interface
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| el19zf | 4:b12a49f0b730 | 1 | #include "shot.h" | 
| el19zf | 4:b12a49f0b730 | 2 | |
| el19zf | 7:c49f3d3b672f | 3 | int shots[4][3][3] = { | 
| el19zf | 13:eb60628db8bf | 4 | { {0,1,0}, | 
| el19zf | 13:eb60628db8bf | 5 | {1,1,1}, | 
| el19zf | 13:eb60628db8bf | 6 | {0,1,0}, },//shot type1 | 
| el19zf | 13:eb60628db8bf | 7 | |
| el19zf | 13:eb60628db8bf | 8 | { {1,1,1}, | 
| el19zf | 13:eb60628db8bf | 9 | {0,1,1}, | 
| el19zf | 13:eb60628db8bf | 10 | {0,0,1}, },//shot type2 | 
| el19zf | 13:eb60628db8bf | 11 | |
| el19zf | 13:eb60628db8bf | 12 | { {1,1,1}, | 
| el19zf | 13:eb60628db8bf | 13 | {0,1,0}, | 
| el19zf | 13:eb60628db8bf | 14 | {0,1,0}, },//shot type3 | 
| el19zf | 13:eb60628db8bf | 15 | |
| el19zf | 13:eb60628db8bf | 16 | { {1,1,0}, | 
| el19zf | 13:eb60628db8bf | 17 | {1,1,0}, | 
| el19zf | 13:eb60628db8bf | 18 | {0,0,1}, }//shot type4 | 
| el19zf | 7:c49f3d3b672f | 19 | }; | 
| el19zf | 6:dce38fe4e092 | 20 | |
| el19zf | 7:c49f3d3b672f | 21 | shot::shot() | 
| el19zf | 7:c49f3d3b672f | 22 | { | 
| el19zf | 6:dce38fe4e092 | 23 | |
| el19zf | 6:dce38fe4e092 | 24 | } | 
| el19zf | 6:dce38fe4e092 | 25 | |
| el19zf | 7:c49f3d3b672f | 26 | shot::~shot() | 
| el19zf | 5:6774b7272e85 | 27 | { | 
| el19zf | 7:c49f3d3b672f | 28 | |
| el19zf | 7:c49f3d3b672f | 29 | } | 
| el19zf | 7:c49f3d3b672f | 30 | |
| el19zf | 7:c49f3d3b672f | 31 | void shot::init() | 
| el19zf | 5:6774b7272e85 | 32 | { | 
| el19zf | 4:b12a49f0b730 | 33 | |
| el19zf | 16:cf2bfada3adf | 34 | _size = 7; | 
| el19zf | 16:cf2bfada3adf | 35 | _size_f = 7.0; | 
| el19zf | 7:c49f3d3b672f | 36 | _p.resize(_size); | 
| el19zf | 7:c49f3d3b672f | 37 | srand(time(NULL)); | 
| el19zf | 7:c49f3d3b672f | 38 | for (std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++) { | 
| el19zf | 7:c49f3d3b672f | 39 | init_pos(i); | 
| el19zf | 7:c49f3d3b672f | 40 | (*i).type = rand() % 4;//randomise initial type | 
| el19zf | 7:c49f3d3b672f | 41 | (*i).dir = rand() % 6;//randomise initial direction | 
| el19zf | 7:c49f3d3b672f | 42 | } | 
| el19zf | 7:c49f3d3b672f | 43 | |
| el19zf | 4:b12a49f0b730 | 44 | } | 
| el19zf | 4:b12a49f0b730 | 45 | |
| el19zf | 7:c49f3d3b672f | 46 | void shot::init_pos(shot_posandtype* i) | 
| el19zf | 7:c49f3d3b672f | 47 | { | 
| el19zf | 4:b12a49f0b730 | 48 | |
| el19zf | 7:c49f3d3b672f | 49 | int num_pos = rand() % 6;//randomise initial position | 
| el19zf | 7:c49f3d3b672f | 50 | if (num_pos == 0) { | 
| el19zf | 9:62d6559f0d50 | 51 | (*i).x = WIDTH/4; | 
| el19zf | 9:62d6559f0d50 | 52 | (*i).y = 0; | 
| el19zf | 9:62d6559f0d50 | 53 | }//top | 
| el19zf | 7:c49f3d3b672f | 54 | if (num_pos == 1) { | 
| el19zf | 9:62d6559f0d50 | 55 | (*i).x = WIDTH/2; | 
| el19zf | 9:62d6559f0d50 | 56 | (*i).y = 0; | 
| el19zf | 9:62d6559f0d50 | 57 | }//top | 
| el19zf | 7:c49f3d3b672f | 58 | if (num_pos == 2) { | 
| el19zf | 9:62d6559f0d50 | 59 | (*i).x = 3*WIDTH/4; | 
| el19zf | 9:62d6559f0d50 | 60 | (*i).y = 0; | 
| el19zf | 9:62d6559f0d50 | 61 | }//top | 
| el19zf | 7:c49f3d3b672f | 62 | if (num_pos == 3) { | 
| el19zf | 9:62d6559f0d50 | 63 | (*i).x = WIDTH/4; | 
| el19zf | 9:62d6559f0d50 | 64 | (*i).y = HEIGHT-3; | 
| el19zf | 9:62d6559f0d50 | 65 | }//bottom | 
| el19zf | 7:c49f3d3b672f | 66 | if (num_pos == 4) { | 
| el19zf | 9:62d6559f0d50 | 67 | (*i).x = WIDTH/2; | 
| el19zf | 9:62d6559f0d50 | 68 | (*i).y = HEIGHT-3; | 
| el19zf | 9:62d6559f0d50 | 69 | }//bottom | 
| el19zf | 7:c49f3d3b672f | 70 | if (num_pos == 5) { | 
| el19zf | 9:62d6559f0d50 | 71 | (*i).x = 3*WIDTH/4; | 
| el19zf | 9:62d6559f0d50 | 72 | (*i).y = HEIGHT-3; | 
| el19zf | 9:62d6559f0d50 | 73 | }//bottom | 
| el19zf | 4:b12a49f0b730 | 74 | |
| el19zf | 4:b12a49f0b730 | 75 | } | 
| el19zf | 4:b12a49f0b730 | 76 | |
| el19zf | 15:3571beaaeed8 | 77 | void shot::update() | 
| el19zf | 7:c49f3d3b672f | 78 | { | 
| el19zf | 5:6774b7272e85 | 79 | for (std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++) { | 
| el19zf | 7:c49f3d3b672f | 80 | if ((*i).dir == 0) { | 
| el19zf | 7:c49f3d3b672f | 81 | (*i).x +=1; | 
| el19zf | 7:c49f3d3b672f | 82 | (*i).y +=1;//SE | 
| el19zf | 7:c49f3d3b672f | 83 | } else if ((*i).dir == 1) { | 
| el19zf | 9:62d6559f0d50 | 84 | (*i).x +=0; | 
| el19zf | 9:62d6559f0d50 | 85 | (*i).y +=1;//S | 
| el19zf | 7:c49f3d3b672f | 86 | } else if ((*i).dir == 2) { | 
| el19zf | 7:c49f3d3b672f | 87 | (*i).x +=1; | 
| el19zf | 7:c49f3d3b672f | 88 | (*i).y -=1;//NE | 
| el19zf | 7:c49f3d3b672f | 89 | } else if ((*i).dir == 3) { | 
| el19zf | 7:c49f3d3b672f | 90 | (*i).x -=1; | 
| el19zf | 7:c49f3d3b672f | 91 | (*i).y -=1;//NW | 
| el19zf | 7:c49f3d3b672f | 92 | } else if ((*i).dir == 4) { | 
| el19zf | 9:62d6559f0d50 | 93 | (*i).x -=0; | 
| el19zf | 9:62d6559f0d50 | 94 | (*i).y -=1;//N | 
| el19zf | 7:c49f3d3b672f | 95 | } else if ((*i).dir == 5) { | 
| el19zf | 7:c49f3d3b672f | 96 | (*i).x -=1; | 
| el19zf | 7:c49f3d3b672f | 97 | (*i).y +=1;//SW | 
| el19zf | 7:c49f3d3b672f | 98 | } | 
| el19zf | 7:c49f3d3b672f | 99 | } | 
| el19zf | 4:b12a49f0b730 | 100 | } | 
| el19zf | 5:6774b7272e85 | 101 | |
| el19zf | 13:eb60628db8bf | 102 | void shot::update_shot() | 
| el19zf | 13:eb60628db8bf | 103 | { | 
| el19zf | 13:eb60628db8bf | 104 | _p.resize(_size); | 
| el19zf | 13:eb60628db8bf | 105 | for(std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++) { | 
| el19zf | 13:eb60628db8bf | 106 | if(((*i).x == 0)&&((*i).y == 0)) { | 
| el19zf | 13:eb60628db8bf | 107 | init_pos(i); | 
| el19zf | 13:eb60628db8bf | 108 | (*i).type = rand() % 4;//randomise initial type | 
| el19zf | 13:eb60628db8bf | 109 | (*i).dir = rand() % 6;//randomise initial direction | 
| el19zf | 13:eb60628db8bf | 110 | } | 
| el19zf | 13:eb60628db8bf | 111 | } | 
| el19zf | 13:eb60628db8bf | 112 | } | 
| el19zf | 5:6774b7272e85 | 113 | |
| el19zf | 7:c49f3d3b672f | 114 | void shot::draw(N5110 &lcd) | 
| el19zf | 7:c49f3d3b672f | 115 | { | 
| el19zf | 15:3571beaaeed8 | 116 | update(); | 
| el19zf | 15:3571beaaeed8 | 117 | // delete invalid shots | 
| el19zf | 15:3571beaaeed8 | 118 | delete_shot(); | 
| el19zf | 15:3571beaaeed8 | 119 | //generate shot to keep constant number of shots | 
| el19zf | 15:3571beaaeed8 | 120 | update_shot(); | 
| el19zf | 7:c49f3d3b672f | 121 | for (std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++) { | 
| el19zf | 5:6774b7272e85 | 122 | lcd.drawSprite((*i).x,(*i).y,3,3,(int*)shots[(*i).type]); | 
| el19zf | 7:c49f3d3b672f | 123 | //printf("coordinate = %d,%d\n",(*i).x,(*i).y); | 
| el19zf | 6:dce38fe4e092 | 124 | } | 
| el19zf | 6:dce38fe4e092 | 125 | } | 
| el19zf | 6:dce38fe4e092 | 126 | |
| el19zf | 7:c49f3d3b672f | 127 | void shot::delete_shot() | 
| el19zf | 7:c49f3d3b672f | 128 | { | 
| el19zf | 7:c49f3d3b672f | 129 | for (std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++) { | 
| el19zf | 7:c49f3d3b672f | 130 | // if beyoud border, delete it and generate new one, keep total number constant | 
| el19zf | 8:8287d2ef965d | 131 | if(((*i).x < 0)||((*i).x > WIDTH)||((*i).y < 0)||((*i).y > HEIGHT)|| | 
| el19zf | 8:8287d2ef965d | 132 | //keep shots away from starting point | 
| el19zf | 13:eb60628db8bf | 133 | (((*i).x==3)&&((*i).y==18)) || (((*i).x==4)&&((*i).y==28))|| | 
| el19zf | 13:eb60628db8bf | 134 | (((*i).x==79)&&((*i).y==16)) || (((*i).x==79)&&((*i).y==29))) | 
| el19zf | 8:8287d2ef965d | 135 | { | 
| el19zf | 13:eb60628db8bf | 136 | init_pos(i);//generate new shots to keep the total number | 
| el19zf | 6:dce38fe4e092 | 137 | (*i).type = ((*i).type + 2)%4; | 
| el19zf | 7:c49f3d3b672f | 138 | (*i).dir = ((*i).dir + 1)%6; // increase randomness | 
| el19zf | 6:dce38fe4e092 | 139 | } | 
| el19zf | 6:dce38fe4e092 | 140 | } | 
| el19zf | 6:dce38fe4e092 | 141 | } | 
| el19zf | 8:8287d2ef965d | 142 | |
| el19zf | 13:eb60628db8bf | 143 | /* increment(number of shots is generated during 1000/6 ms) | 
| el19zf | 13:eb60628db8bf | 144 | and maximum number of shots | 
| el19zf | 13:eb60628db8bf | 145 | control degree of difficulty of the game*/ | 
| el19zf | 13:eb60628db8bf | 146 | void shot::gen_shot(int timer_flag, float increment, int max) | 
| el19zf | 13:eb60628db8bf | 147 | { | 
| el19zf | 13:eb60628db8bf | 148 | if(_size < max){ | 
| el19zf | 13:eb60628db8bf | 149 | if(timer_flag == 1){ | 
| el19zf | 13:eb60628db8bf | 150 | timer_flag = 0; | 
| el19zf | 13:eb60628db8bf | 151 | _size_f = _size_f + increment; | 
| el19zf | 13:eb60628db8bf | 152 | int size = int(_size_f); | 
| el19zf | 13:eb60628db8bf | 153 | //printf("Generate\n"); | 
| el19zf | 13:eb60628db8bf | 154 | set_size(size); | 
| el19zf | 13:eb60628db8bf | 155 | } | 
| el19zf | 13:eb60628db8bf | 156 | } | 
| el19zf | 13:eb60628db8bf | 157 | } | 
| el19zf | 13:eb60628db8bf | 158 | |
| el19zf | 11:494cc44777fe | 159 | void shot::set_size(int size) | 
| el19zf | 11:494cc44777fe | 160 | { | 
| el19zf | 8:8287d2ef965d | 161 | _size = size; | 
| el19zf | 8:8287d2ef965d | 162 | } | 
| el19zf | 8:8287d2ef965d | 163 | |
| el19zf | 15:3571beaaeed8 | 164 | void shot::set_shot(int x, int y, int type, int Direction) | 
| el19zf | 15:3571beaaeed8 | 165 | { | 
| el19zf | 15:3571beaaeed8 | 166 | for (std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++){ | 
| el19zf | 15:3571beaaeed8 | 167 | (*i).x = x; | 
| el19zf | 15:3571beaaeed8 | 168 | (*i).y = y; | 
| el19zf | 15:3571beaaeed8 | 169 | (*i).type = type; | 
| el19zf | 15:3571beaaeed8 | 170 | (*i).dir = Direction; | 
| el19zf | 15:3571beaaeed8 | 171 | } | 
| el19zf | 15:3571beaaeed8 | 172 | } | 
| el19zf | 11:494cc44777fe | 173 | int shot::get_size() | 
| el19zf | 11:494cc44777fe | 174 | { | 
| el19zf | 8:8287d2ef965d | 175 | return _size; | 
| el19zf | 8:8287d2ef965d | 176 | } | 
| el19zf | 15:3571beaaeed8 | 177 | |
| el19zf | 15:3571beaaeed8 | 178 | Vector2D shot::get_shot() | 
| el19zf | 15:3571beaaeed8 | 179 | { | 
| el19zf | 15:3571beaaeed8 | 180 | for (std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++){ | 
| el19zf | 15:3571beaaeed8 | 181 | _shot_pos.x =(*i).x; | 
| el19zf | 15:3571beaaeed8 | 182 | _shot_pos.y =(*i).y; | 
| el19zf | 15:3571beaaeed8 | 183 | } | 
| el19zf | 15:3571beaaeed8 | 184 | return _shot_pos; | 
| el19zf | 15:3571beaaeed8 | 185 | } | 
| el19zf | 15:3571beaaeed8 | 186 | |
| el19zf | 15:3571beaaeed8 | 187 | |
| el19zf | 13:eb60628db8bf | 188 |