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 |