ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19zf

Dependencies:   mbed

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?

UserRevisionLine numberNew 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