ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19zf

Dependencies:   mbed

Committer:
el19zf
Date:
Wed Apr 29 15:20:34 2020 +0000
Revision:
8:8287d2ef965d
Parent:
7:c49f3d3b672f
Child:
9:62d6559f0d50
update class collision and game mechanics

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 8:8287d2ef965d 4 { {0,1,0},{1,1,1},{0,1,0}, },
el19zf 8:8287d2ef965d 5 { {1,1,1},{0,1,1},{0,0,1}, },
el19zf 7:c49f3d3b672f 6 { {1,1,1},{0,1,0},{0,1,0}, },
el19zf 8:8287d2ef965d 7 { {1,1,0},{1,1,0},{0,0,1}, }
el19zf 7:c49f3d3b672f 8 };
el19zf 6:dce38fe4e092 9
el19zf 7:c49f3d3b672f 10 shot::shot()
el19zf 7:c49f3d3b672f 11 {
el19zf 6:dce38fe4e092 12
el19zf 6:dce38fe4e092 13 }
el19zf 6:dce38fe4e092 14
el19zf 7:c49f3d3b672f 15 shot::~shot()
el19zf 5:6774b7272e85 16 {
el19zf 7:c49f3d3b672f 17
el19zf 7:c49f3d3b672f 18 }
el19zf 7:c49f3d3b672f 19
el19zf 7:c49f3d3b672f 20 void shot::init()
el19zf 5:6774b7272e85 21 {
el19zf 4:b12a49f0b730 22
el19zf 7:c49f3d3b672f 23 _size = 10;
el19zf 7:c49f3d3b672f 24 _p.resize(_size);
el19zf 7:c49f3d3b672f 25 srand(time(NULL));
el19zf 7:c49f3d3b672f 26 for (std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++) {
el19zf 7:c49f3d3b672f 27 init_pos(i);
el19zf 7:c49f3d3b672f 28 (*i).type = rand() % 4;//randomise initial type
el19zf 7:c49f3d3b672f 29 (*i).dir = rand() % 6;//randomise initial direction
el19zf 7:c49f3d3b672f 30 }
el19zf 7:c49f3d3b672f 31
el19zf 4:b12a49f0b730 32 }
el19zf 4:b12a49f0b730 33
el19zf 7:c49f3d3b672f 34 void shot::init_pos(shot_posandtype* i)
el19zf 7:c49f3d3b672f 35 {
el19zf 4:b12a49f0b730 36
el19zf 7:c49f3d3b672f 37 int num_pos = rand() % 6;//randomise initial position
el19zf 7:c49f3d3b672f 38 if (num_pos == 0) {
el19zf 7:c49f3d3b672f 39 (*i).x = 0;
el19zf 7:c49f3d3b672f 40 (*i).y = HEIGHT/4;
el19zf 7:c49f3d3b672f 41 }//left
el19zf 7:c49f3d3b672f 42 if (num_pos == 1) {
el19zf 7:c49f3d3b672f 43 (*i).x = 0;
el19zf 7:c49f3d3b672f 44 (*i).y = HEIGHT/2;
el19zf 7:c49f3d3b672f 45 }//left
el19zf 7:c49f3d3b672f 46 if (num_pos == 2) {
el19zf 7:c49f3d3b672f 47 (*i).x = 0;
el19zf 7:c49f3d3b672f 48 (*i).y = 3*HEIGHT/4;
el19zf 7:c49f3d3b672f 49 }//left
el19zf 7:c49f3d3b672f 50 if (num_pos == 3) {
el19zf 7:c49f3d3b672f 51 (*i).x = WIDTH-3;
el19zf 7:c49f3d3b672f 52 (*i).y = HEIGHT/4;
el19zf 7:c49f3d3b672f 53 }//right
el19zf 7:c49f3d3b672f 54 if (num_pos == 4) {
el19zf 7:c49f3d3b672f 55 (*i).x = WIDTH-3;
el19zf 7:c49f3d3b672f 56 (*i).y = HEIGHT/2;
el19zf 7:c49f3d3b672f 57 }//right
el19zf 7:c49f3d3b672f 58 if (num_pos == 5) {
el19zf 7:c49f3d3b672f 59 (*i).x = WIDTH-3;
el19zf 7:c49f3d3b672f 60 (*i).y = 3*HEIGHT/4;
el19zf 7:c49f3d3b672f 61 }//right
el19zf 4:b12a49f0b730 62
el19zf 4:b12a49f0b730 63 }
el19zf 4:b12a49f0b730 64
el19zf 7:c49f3d3b672f 65 void shot::gen_shot()
el19zf 7:c49f3d3b672f 66 {
el19zf 6:dce38fe4e092 67 _p.resize(_size);
el19zf 6:dce38fe4e092 68 for(std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++) {
el19zf 7:c49f3d3b672f 69 if(((*i).x == 0)&&((*i).y == 0)) {
el19zf 6:dce38fe4e092 70 init_pos(i);
el19zf 7:c49f3d3b672f 71 (*i).type = rand() % 4;//randomise initial type
el19zf 7:c49f3d3b672f 72 (*i).dir = rand() % 6;//randomise initial direction
el19zf 6:dce38fe4e092 73 }
el19zf 7:c49f3d3b672f 74 }
el19zf 4:b12a49f0b730 75 }
el19zf 4:b12a49f0b730 76
el19zf 7:c49f3d3b672f 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 7:c49f3d3b672f 84 (*i).x +=1;
el19zf 7:c49f3d3b672f 85 (*i).y +=0;//E
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 7:c49f3d3b672f 93 (*i).x -=1;
el19zf 7:c49f3d3b672f 94 (*i).y -=0;//W
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 5:6774b7272e85 102
el19zf 7:c49f3d3b672f 103 void shot::draw(N5110 &lcd)
el19zf 7:c49f3d3b672f 104 {
el19zf 7:c49f3d3b672f 105 for (std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++) {
el19zf 5:6774b7272e85 106 lcd.drawSprite((*i).x,(*i).y,3,3,(int*)shots[(*i).type]);
el19zf 7:c49f3d3b672f 107 //printf("coordinate = %d,%d\n",(*i).x,(*i).y);
el19zf 6:dce38fe4e092 108 }
el19zf 6:dce38fe4e092 109 }
el19zf 6:dce38fe4e092 110
el19zf 7:c49f3d3b672f 111 void shot::delete_shot()
el19zf 7:c49f3d3b672f 112 {
el19zf 7:c49f3d3b672f 113 for (std::vector<shot_posandtype>::iterator i = _p.begin(); i < _p.end(); i++) {
el19zf 7:c49f3d3b672f 114 // if beyoud border, delete it and generate new one, keep total number constant
el19zf 8:8287d2ef965d 115 if(((*i).x < 0)||((*i).x > WIDTH)||((*i).y < 0)||((*i).y > HEIGHT)||
el19zf 8:8287d2ef965d 116 //keep shots away from starting point
el19zf 8:8287d2ef965d 117 (((*i).x==33)&&((*i).y==3))||(((*i).x==48)&&((*i).y==3))||(((*i).x==33)&&((*i).y==45))||(((*i).x==48)&&((*i).y==45)))
el19zf 8:8287d2ef965d 118 {
el19zf 6:dce38fe4e092 119 init_pos(i);
el19zf 6:dce38fe4e092 120 (*i).type = ((*i).type + 2)%4;
el19zf 7:c49f3d3b672f 121 (*i).dir = ((*i).dir + 1)%6; // increase randomness
el19zf 6:dce38fe4e092 122 }
el19zf 6:dce38fe4e092 123 }
el19zf 6:dce38fe4e092 124 }
el19zf 8:8287d2ef965d 125
el19zf 8:8287d2ef965d 126 void shot::set_size(int size) {
el19zf 8:8287d2ef965d 127 _size = size;
el19zf 8:8287d2ef965d 128 }
el19zf 8:8287d2ef965d 129
el19zf 8:8287d2ef965d 130 int shot::get_size() {
el19zf 8:8287d2ef965d 131 return _size;
el19zf 8:8287d2ef965d 132 }
el19zf 8:8287d2ef965d 133
el19zf 8:8287d2ef965d 134
el19zf 8:8287d2ef965d 135