ELEC2645 (2018/19) / Mbed 2 deprecated el17zl

Dependencies:   mbed

Fork of el17zl by Zhenwen Liao

Committer:
franklzw
Date:
Thu Apr 11 14:14:28 2019 +0000
Revision:
7:6f8aeadc4370
Parent:
6:6b083e22cb53
Child:
8:83891ea9a5d9
barrier-box-ppl works! no off-screen, no cover of each other.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
franklzw 2:9f0d9516a6cd 1 #include "PushingEngine.h"
franklzw 2:9f0d9516a6cd 2
franklzw 6:6b083e22cb53 3
franklzw 6:6b083e22cb53 4 const int barrier[8][8]= {
franklzw 6:6b083e22cb53 5 {1,1,1,1,1,1,1,1},
franklzw 6:6b083e22cb53 6 {1,1,0,0,0,0,1,1},
franklzw 6:6b083e22cb53 7 {1,0,0,0,0,0,0,1},
franklzw 6:6b083e22cb53 8 {1,0,0,0,0,0,0,1},
franklzw 6:6b083e22cb53 9 {1,0,0,0,0,0,0,1},
franklzw 6:6b083e22cb53 10 {1,0,0,0,0,0,0,1},
franklzw 6:6b083e22cb53 11 {1,1,0,0,0,0,1,1},
franklzw 6:6b083e22cb53 12 {1,1,1,1,1,1,1,1},
franklzw 6:6b083e22cb53 13 };
franklzw 6:6b083e22cb53 14
franklzw 6:6b083e22cb53 15
franklzw 6:6b083e22cb53 16
franklzw 2:9f0d9516a6cd 17 PushingEngine::PushingEngine()
franklzw 2:9f0d9516a6cd 18 {
franklzw 2:9f0d9516a6cd 19
franklzw 2:9f0d9516a6cd 20 }
franklzw 2:9f0d9516a6cd 21
franklzw 2:9f0d9516a6cd 22 PushingEngine::~PushingEngine()
franklzw 2:9f0d9516a6cd 23 {
franklzw 2:9f0d9516a6cd 24
franklzw 2:9f0d9516a6cd 25 }
franklzw 2:9f0d9516a6cd 26
franklzw 2:9f0d9516a6cd 27 void PushingEngine::init(int box1_x,int box1_y,int box2_x,int box2_y,
franklzw 6:6b083e22cb53 28 int ppl_x,int ppl_y )
franklzw 2:9f0d9516a6cd 29 {
franklzw 6:6b083e22cb53 30 // boxes position on screen
franklzw 2:9f0d9516a6cd 31 _b1x = box1_x;
franklzw 2:9f0d9516a6cd 32 _b2x = box2_x;
franklzw 2:9f0d9516a6cd 33 _b1y = box1_y;
franklzw 2:9f0d9516a6cd 34 _b2y = box2_y;
franklzw 6:6b083e22cb53 35
franklzw 2:9f0d9516a6cd 36 // ppl position on screen
franklzw 2:9f0d9516a6cd 37 _pplx = ppl_x;
franklzw 2:9f0d9516a6cd 38 _pply = ppl_y;
franklzw 6:6b083e22cb53 39
franklzw 3:9fa31396d89d 40 // inital boxes, crosses and ppl
franklzw 2:9f0d9516a6cd 41 _b1.init(_b1x,_b1y);
franklzw 2:9f0d9516a6cd 42 _b2.init(_b2x,_b2y);
franklzw 2:9f0d9516a6cd 43 _ppl.init(_pplx,_pply);
franklzw 6:6b083e22cb53 44
franklzw 6:6b083e22cb53 45
franklzw 4:750d3f9b54de 46
franklzw 2:9f0d9516a6cd 47 }
franklzw 2:9f0d9516a6cd 48
franklzw 2:9f0d9516a6cd 49 void PushingEngine::read_input(Gamepad &pad)
franklzw 2:9f0d9516a6cd 50 {
franklzw 5:b50ce6160013 51 //if (pad.check_event(Gamepad::START_PRESSED))
franklzw 6:6b083e22cb53 52 //{_bstart = 1;}
franklzw 6:6b083e22cb53 53 //else {_bstart = 0;}
franklzw 5:b50ce6160013 54 //if (pad.check_event(Gamepad::BACK_PRESSED))
franklzw 6:6b083e22cb53 55 //{_bback = 1; }
franklzw 6:6b083e22cb53 56 //else {_bback = 0;}
franklzw 6:6b083e22cb53 57 if (pad.check_event(Gamepad::A_PRESSED)) {
franklzw 6:6b083e22cb53 58 _ba = 1;
franklzw 6:6b083e22cb53 59 } else {
franklzw 6:6b083e22cb53 60 _ba = 0;
franklzw 6:6b083e22cb53 61 }
franklzw 6:6b083e22cb53 62 if (pad.check_event(Gamepad::B_PRESSED)) {
franklzw 6:6b083e22cb53 63 _bb = 1;
franklzw 6:6b083e22cb53 64 } else {
franklzw 6:6b083e22cb53 65 _bb = 0;
franklzw 6:6b083e22cb53 66 }
franklzw 6:6b083e22cb53 67 if (pad.check_event(Gamepad::X_PRESSED)) {
franklzw 6:6b083e22cb53 68 _bx = 1;
franklzw 6:6b083e22cb53 69 } else {
franklzw 6:6b083e22cb53 70 _bx = 0;
franklzw 6:6b083e22cb53 71 }
franklzw 6:6b083e22cb53 72 if (pad.check_event(Gamepad::Y_PRESSED)) {
franklzw 6:6b083e22cb53 73 _by = 1;
franklzw 6:6b083e22cb53 74 } else {
franklzw 6:6b083e22cb53 75 _by = 0;
franklzw 6:6b083e22cb53 76 }
franklzw 5:b50ce6160013 77 //if (pad.check_event(Gamepad::JOY_PRESSED))
franklzw 6:6b083e22cb53 78 //{_bjoy = 1; }
franklzw 6:6b083e22cb53 79 //else {_bjoy = 0;}
franklzw 2:9f0d9516a6cd 80 }
franklzw 2:9f0d9516a6cd 81
franklzw 6:6b083e22cb53 82 void PushingEngine::check_ppl_box1_touching(Gamepad &pad)
franklzw 2:9f0d9516a6cd 83 {
franklzw 3:9fa31396d89d 84 Vector2D b1_pos = _b1.get_pos();
franklzw 3:9fa31396d89d 85 Vector2D ppl_pos = _ppl.get_pos();
franklzw 6:6b083e22cb53 86
franklzw 6:6b083e22cb53 87 if (b1_pos.y == ppl_pos.y) {
franklzw 6:6b083e22cb53 88 if((ppl_pos.x-b1_pos.x) ==8) {
franklzw 3:9fa31396d89d 89 _s = 1; // can push to left
franklzw 6:6b083e22cb53 90 } else if((b1_pos.x-ppl_pos.x)==8) {
franklzw 3:9fa31396d89d 91 _s = 2; // can push to right
franklzw 6:6b083e22cb53 92 }
franklzw 6:6b083e22cb53 93 } else if (b1_pos.x == ppl_pos.x) {
franklzw 6:6b083e22cb53 94 if((ppl_pos.y-b1_pos.y) ==8) {
franklzw 3:9fa31396d89d 95 _s = 4; // can push up
franklzw 6:6b083e22cb53 96 } else if((b1_pos.y-ppl_pos.y)==8) {
franklzw 3:9fa31396d89d 97 _s = 3; // can push down
franklzw 6:6b083e22cb53 98 }
franklzw 6:6b083e22cb53 99 } else {
franklzw 6:6b083e22cb53 100 _s = 0;
franklzw 6:6b083e22cb53 101 }
franklzw 2:9f0d9516a6cd 102 }
franklzw 2:9f0d9516a6cd 103
franklzw 6:6b083e22cb53 104 void PushingEngine::check_ppl_box2_touching(Gamepad &pad) //
franklzw 2:9f0d9516a6cd 105 {
franklzw 3:9fa31396d89d 106 Vector2D b2_pos = _b2.get_pos();
franklzw 3:9fa31396d89d 107 Vector2D ppl_pos = _ppl.get_pos();
franklzw 6:6b083e22cb53 108
franklzw 6:6b083e22cb53 109 if (b2_pos.y == ppl_pos.y) {
franklzw 6:6b083e22cb53 110 if((ppl_pos.x-b2_pos.x) ==8) {
franklzw 3:9fa31396d89d 111 _r = 1; // can push to left
franklzw 6:6b083e22cb53 112 } else if((b2_pos.x-ppl_pos.x)==8) {
franklzw 3:9fa31396d89d 113 _r = 2; // can push to right
franklzw 6:6b083e22cb53 114 }
franklzw 6:6b083e22cb53 115 } else if (b2_pos.x == ppl_pos.x) {
franklzw 6:6b083e22cb53 116 if((ppl_pos.y-b2_pos.y) ==8) {
franklzw 3:9fa31396d89d 117 _r = 4; // can push up
franklzw 6:6b083e22cb53 118 } else if((b2_pos.y-ppl_pos.y)==8) {
franklzw 3:9fa31396d89d 119 _r = 3; // can push down
franklzw 6:6b083e22cb53 120 }
franklzw 6:6b083e22cb53 121 } else {
franklzw 6:6b083e22cb53 122 _r = 0;
franklzw 6:6b083e22cb53 123 }
franklzw 3:9fa31396d89d 124 }
franklzw 3:9fa31396d89d 125
franklzw 4:750d3f9b54de 126
franklzw 6:6b083e22cb53 127 void PushingEngine::draw(N5110 &lcd,int barrier_x,int barrier_y)
franklzw 3:9fa31396d89d 128 {
franklzw 4:750d3f9b54de 129 // draw the elements in the LCD buffer
franklzw 4:750d3f9b54de 130 // pitch
franklzw 4:750d3f9b54de 131 lcd.drawLine(0,2,83,2,1);
franklzw 4:750d3f9b54de 132 lcd.drawLine(0,3,0,45,1);
franklzw 4:750d3f9b54de 133 lcd.drawLine(1,45,83,45,1);
franklzw 4:750d3f9b54de 134 lcd.drawLine(83,3,83,44,1);
franklzw 6:6b083e22cb53 135
franklzw 6:6b083e22cb53 136 //draw the barrier
franklzw 6:6b083e22cb53 137 lcd.drawSprite(barrier_x,barrier_y,8,8,(int *)barrier);
franklzw 7:6f8aeadc4370 138 // ppl
franklzw 7:6f8aeadc4370 139 _ppl.draw(lcd);
franklzw 4:750d3f9b54de 140 // boxes
franklzw 4:750d3f9b54de 141 _b1.draw(lcd);
franklzw 4:750d3f9b54de 142 _b2.draw(lcd);
franklzw 7:6f8aeadc4370 143
franklzw 7:6f8aeadc4370 144
franklzw 3:9fa31396d89d 145 }
franklzw 3:9fa31396d89d 146
franklzw 6:6b083e22cb53 147 void PushingEngine::update(Gamepad &pad,int barrier_x,int barrier_y) //
franklzw 3:9fa31396d89d 148 {
franklzw 3:9fa31396d89d 149 check_ppl_box1_touching(pad);
franklzw 4:750d3f9b54de 150 check_ppl_box2_touching(pad);
franklzw 3:9fa31396d89d 151
franklzw 6:6b083e22cb53 152 hold_ppl_box1_wall(pad);
franklzw 6:6b083e22cb53 153 hold_ppl_box2_wall(pad);
franklzw 6:6b083e22cb53 154
franklzw 7:6f8aeadc4370 155 Vector2D temp_ppl_pos = _ppl.get_pos();
franklzw 6:6b083e22cb53 156 _b1.update(_s,_bb,_ba,_bx,_by,barrier_x,barrier_y);
franklzw 6:6b083e22cb53 157 _b2.update(_r,_bb,_ba,_bx,_by,barrier_x,barrier_y);
franklzw 7:6f8aeadc4370 158 _ppl.update(_bb,_ba,_bx,_by,_temp,barrier_x,barrier_y);
franklzw 6:6b083e22cb53 159 _temp = 0;
franklzw 7:6f8aeadc4370 160 _s = 0;
franklzw 7:6f8aeadc4370 161 _r = 0;
franklzw 3:9fa31396d89d 162
franklzw 7:6f8aeadc4370 163 if (ppl_cover_box(pad)){
franklzw 7:6f8aeadc4370 164 _ppl.set_pos(temp_ppl_pos);
franklzw 7:6f8aeadc4370 165 }
franklzw 3:9fa31396d89d 166 }
franklzw 6:6b083e22cb53 167
franklzw 6:6b083e22cb53 168 void PushingEngine::hold_ppl_box1_wall(Gamepad &pad) //
franklzw 6:6b083e22cb53 169 {
franklzw 6:6b083e22cb53 170 Vector2D b1_pos = _b1.get_pos();
franklzw 6:6b083e22cb53 171 Vector2D ppl_pos = _ppl.get_pos();
franklzw 6:6b083e22cb53 172
franklzw 6:6b083e22cb53 173 if (b1_pos.x == 2) {
franklzw 6:6b083e22cb53 174 if(_s == 1) {
franklzw 6:6b083e22cb53 175 _temp=1;
franklzw 6:6b083e22cb53 176 }
franklzw 6:6b083e22cb53 177 }
franklzw 6:6b083e22cb53 178 if (b1_pos.x == 74) {
franklzw 6:6b083e22cb53 179 if(_s == 2) {
franklzw 6:6b083e22cb53 180 _temp=2;
franklzw 6:6b083e22cb53 181 }
franklzw 6:6b083e22cb53 182 }
franklzw 6:6b083e22cb53 183 if (b1_pos.y == 4) {
franklzw 6:6b083e22cb53 184 if(_s == 4) {
franklzw 6:6b083e22cb53 185 _temp=3;
franklzw 6:6b083e22cb53 186 }
franklzw 6:6b083e22cb53 187 }
franklzw 6:6b083e22cb53 188 if (b1_pos.y == 36) {
franklzw 6:6b083e22cb53 189 if(_s == 3) {
franklzw 6:6b083e22cb53 190 _temp=4;
franklzw 6:6b083e22cb53 191 }
franklzw 6:6b083e22cb53 192 }
franklzw 6:6b083e22cb53 193 }
franklzw 6:6b083e22cb53 194
franklzw 6:6b083e22cb53 195 void PushingEngine::hold_ppl_box2_wall(Gamepad &pad) //
franklzw 6:6b083e22cb53 196 {
franklzw 6:6b083e22cb53 197 Vector2D b2_pos = _b2.get_pos();
franklzw 6:6b083e22cb53 198 Vector2D ppl_pos = _ppl.get_pos();
franklzw 6:6b083e22cb53 199
franklzw 6:6b083e22cb53 200 if (b2_pos.x == 2) {
franklzw 6:6b083e22cb53 201 if(_r == 1) {
franklzw 6:6b083e22cb53 202 _temp=1;
franklzw 6:6b083e22cb53 203 }
franklzw 6:6b083e22cb53 204 }
franklzw 6:6b083e22cb53 205 if (b2_pos.x == 74) {
franklzw 6:6b083e22cb53 206 if(_r == 2) {
franklzw 6:6b083e22cb53 207 _temp=2;
franklzw 6:6b083e22cb53 208 }
franklzw 6:6b083e22cb53 209 }
franklzw 6:6b083e22cb53 210 if (b2_pos.y == 4) {
franklzw 6:6b083e22cb53 211 if(_r == 4) {
franklzw 6:6b083e22cb53 212 _temp=3;
franklzw 6:6b083e22cb53 213 }
franklzw 6:6b083e22cb53 214 }
franklzw 6:6b083e22cb53 215 if (b2_pos.y == 36) {
franklzw 6:6b083e22cb53 216 if(_r == 3) {
franklzw 6:6b083e22cb53 217 _temp=4;
franklzw 6:6b083e22cb53 218 }
franklzw 6:6b083e22cb53 219 }
franklzw 6:6b083e22cb53 220 }
franklzw 6:6b083e22cb53 221
franklzw 7:6f8aeadc4370 222 bool PushingEngine::ppl_cover_box(Gamepad &pad)
franklzw 6:6b083e22cb53 223 {
franklzw 6:6b083e22cb53 224 Vector2D b1_pos = _b1.get_pos();
franklzw 6:6b083e22cb53 225 Vector2D b2_pos = _b2.get_pos();
franklzw 6:6b083e22cb53 226 Vector2D ppl_pos = _ppl.get_pos();
franklzw 6:6b083e22cb53 227
franklzw 7:6f8aeadc4370 228 if ((b1_pos.x == ppl_pos.x &&b1_pos.y == ppl_pos.y)||(b2_pos.x == ppl_pos.x &&b2_pos.y == ppl_pos.y)){
franklzw 7:6f8aeadc4370 229 return true;
franklzw 7:6f8aeadc4370 230 } else {return false;}
franklzw 7:6f8aeadc4370 231 }