ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19zf

Dependencies:   mbed

Committer:
el19zf
Date:
Sat May 09 08:27:07 2020 +0000
Revision:
9:62d6559f0d50
Parent:
8:8287d2ef965d
Child:
10:02ab3324be6c
update mechanism of game, make harder

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 9:62d6559f0d50 39 (*i).x = WIDTH/4;
el19zf 9:62d6559f0d50 40 (*i).y = 0;
el19zf 9:62d6559f0d50 41 }//top
el19zf 7:c49f3d3b672f 42 if (num_pos == 1) {
el19zf 9:62d6559f0d50 43 (*i).x = WIDTH/2;
el19zf 9:62d6559f0d50 44 (*i).y = 0;
el19zf 9:62d6559f0d50 45 }//top
el19zf 7:c49f3d3b672f 46 if (num_pos == 2) {
el19zf 9:62d6559f0d50 47 (*i).x = 3*WIDTH/4;
el19zf 9:62d6559f0d50 48 (*i).y = 0;
el19zf 9:62d6559f0d50 49 }//top
el19zf 7:c49f3d3b672f 50 if (num_pos == 3) {
el19zf 9:62d6559f0d50 51 (*i).x = WIDTH/4;
el19zf 9:62d6559f0d50 52 (*i).y = HEIGHT-3;
el19zf 9:62d6559f0d50 53 }//bottom
el19zf 7:c49f3d3b672f 54 if (num_pos == 4) {
el19zf 9:62d6559f0d50 55 (*i).x = WIDTH/2;
el19zf 9:62d6559f0d50 56 (*i).y = HEIGHT-3;
el19zf 9:62d6559f0d50 57 }//bottom
el19zf 7:c49f3d3b672f 58 if (num_pos == 5) {
el19zf 9:62d6559f0d50 59 (*i).x = 3*WIDTH/4;
el19zf 9:62d6559f0d50 60 (*i).y = HEIGHT-3;
el19zf 9:62d6559f0d50 61 }//bottom
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 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 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 9:62d6559f0d50 117 (((*i).x==3)&&((*i).y==27)) || (((*i).x==3)&&((*i).y==18))||
el19zf 9:62d6559f0d50 118 (((*i).x==80)&&((*i).y==17)) || (((*i).x==80)&&((*i).y==28)))
el19zf 8:8287d2ef965d 119 {
el19zf 6:dce38fe4e092 120 init_pos(i);
el19zf 6:dce38fe4e092 121 (*i).type = ((*i).type + 2)%4;
el19zf 7:c49f3d3b672f 122 (*i).dir = ((*i).dir + 1)%6; // increase randomness
el19zf 6:dce38fe4e092 123 }
el19zf 6:dce38fe4e092 124 }
el19zf 6:dce38fe4e092 125 }
el19zf 8:8287d2ef965d 126
el19zf 8:8287d2ef965d 127 void shot::set_size(int size) {
el19zf 8:8287d2ef965d 128 _size = size;
el19zf 8:8287d2ef965d 129 }
el19zf 8:8287d2ef965d 130
el19zf 8:8287d2ef965d 131 int shot::get_size() {
el19zf 8:8287d2ef965d 132 return _size;
el19zf 8:8287d2ef965d 133 }
el19zf 8:8287d2ef965d 134
el19zf 8:8287d2ef965d 135
el19zf 8:8287d2ef965d 136