ELEC2645 (2018/19) / Mbed 2 deprecated el17zl

Dependencies:   mbed

Fork of el17zl by Zhenwen Liao

Committer:
franklzw
Date:
Thu Apr 11 13:42:34 2019 +0000
Revision:
6:6b083e22cb53
Parent:
5:b50ce6160013
Child:
7:6f8aeadc4370
commision;

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 6:6b083e22cb53 138
franklzw 4:750d3f9b54de 139 // boxes
franklzw 4:750d3f9b54de 140 _b1.draw(lcd);
franklzw 4:750d3f9b54de 141 _b2.draw(lcd);
franklzw 4:750d3f9b54de 142 // ppl
franklzw 4:750d3f9b54de 143 _ppl.draw(lcd);
franklzw 3:9fa31396d89d 144 }
franklzw 3:9fa31396d89d 145
franklzw 6:6b083e22cb53 146 void PushingEngine::update(Gamepad &pad,int barrier_x,int barrier_y) //
franklzw 3:9fa31396d89d 147 {
franklzw 3:9fa31396d89d 148 check_ppl_box1_touching(pad);
franklzw 4:750d3f9b54de 149 check_ppl_box2_touching(pad);
franklzw 3:9fa31396d89d 150
franklzw 6:6b083e22cb53 151 hold_ppl_box1_wall(pad);
franklzw 6:6b083e22cb53 152 hold_ppl_box2_wall(pad);
franklzw 6:6b083e22cb53 153
franklzw 6:6b083e22cb53 154 _ppl.update(_bb,_ba,_bx,_by,_temp,barrier_x,barrier_y);
franklzw 6:6b083e22cb53 155 _b1.update(_s,_bb,_ba,_bx,_by,barrier_x,barrier_y);
franklzw 6:6b083e22cb53 156 _b2.update(_r,_bb,_ba,_bx,_by,barrier_x,barrier_y);
franklzw 6:6b083e22cb53 157 _temp = 0;
franklzw 6:6b083e22cb53 158
franklzw 6:6b083e22cb53 159 ppl_box_cover(pad);
franklzw 3:9fa31396d89d 160
franklzw 3:9fa31396d89d 161 }
franklzw 6:6b083e22cb53 162
franklzw 6:6b083e22cb53 163 void PushingEngine::hold_ppl_box1_wall(Gamepad &pad) //
franklzw 6:6b083e22cb53 164 {
franklzw 6:6b083e22cb53 165 Vector2D b1_pos = _b1.get_pos();
franklzw 6:6b083e22cb53 166 Vector2D ppl_pos = _ppl.get_pos();
franklzw 6:6b083e22cb53 167
franklzw 6:6b083e22cb53 168 if (b1_pos.x == 2) {
franklzw 6:6b083e22cb53 169 if(_s == 1) {
franklzw 6:6b083e22cb53 170 _temp=1;
franklzw 6:6b083e22cb53 171 }
franklzw 6:6b083e22cb53 172 }
franklzw 6:6b083e22cb53 173 if (b1_pos.x == 74) {
franklzw 6:6b083e22cb53 174 if(_s == 2) {
franklzw 6:6b083e22cb53 175 _temp=2;
franklzw 6:6b083e22cb53 176 }
franklzw 6:6b083e22cb53 177 }
franklzw 6:6b083e22cb53 178 if (b1_pos.y == 4) {
franklzw 6:6b083e22cb53 179 if(_s == 4) {
franklzw 6:6b083e22cb53 180 _temp=3;
franklzw 6:6b083e22cb53 181 }
franklzw 6:6b083e22cb53 182 }
franklzw 6:6b083e22cb53 183 if (b1_pos.y == 36) {
franklzw 6:6b083e22cb53 184 if(_s == 3) {
franklzw 6:6b083e22cb53 185 _temp=4;
franklzw 6:6b083e22cb53 186 }
franklzw 6:6b083e22cb53 187 }
franklzw 6:6b083e22cb53 188 }
franklzw 6:6b083e22cb53 189
franklzw 6:6b083e22cb53 190 void PushingEngine::hold_ppl_box2_wall(Gamepad &pad) //
franklzw 6:6b083e22cb53 191 {
franklzw 6:6b083e22cb53 192 Vector2D b2_pos = _b2.get_pos();
franklzw 6:6b083e22cb53 193 Vector2D ppl_pos = _ppl.get_pos();
franklzw 6:6b083e22cb53 194
franklzw 6:6b083e22cb53 195 if (b2_pos.x == 2) {
franklzw 6:6b083e22cb53 196 if(_r == 1) {
franklzw 6:6b083e22cb53 197 _temp=1;
franklzw 6:6b083e22cb53 198 }
franklzw 6:6b083e22cb53 199 }
franklzw 6:6b083e22cb53 200 if (b2_pos.x == 74) {
franklzw 6:6b083e22cb53 201 if(_r == 2) {
franklzw 6:6b083e22cb53 202 _temp=2;
franklzw 6:6b083e22cb53 203 }
franklzw 6:6b083e22cb53 204 }
franklzw 6:6b083e22cb53 205 if (b2_pos.y == 4) {
franklzw 6:6b083e22cb53 206 if(_r == 4) {
franklzw 6:6b083e22cb53 207 _temp=3;
franklzw 6:6b083e22cb53 208 }
franklzw 6:6b083e22cb53 209 }
franklzw 6:6b083e22cb53 210 if (b2_pos.y == 36) {
franklzw 6:6b083e22cb53 211 if(_r == 3) {
franklzw 6:6b083e22cb53 212 _temp=4;
franklzw 6:6b083e22cb53 213 }
franklzw 6:6b083e22cb53 214 }
franklzw 6:6b083e22cb53 215 }
franklzw 6:6b083e22cb53 216
franklzw 6:6b083e22cb53 217 void PushingEngine::ppl_box_cover(Gamepad &pad)
franklzw 6:6b083e22cb53 218 {
franklzw 6:6b083e22cb53 219 Vector2D b1_pos = _b1.get_pos();
franklzw 6:6b083e22cb53 220 Vector2D b2_pos = _b2.get_pos();
franklzw 6:6b083e22cb53 221 Vector2D ppl_pos = _ppl.get_pos();
franklzw 6:6b083e22cb53 222
franklzw 6:6b083e22cb53 223 if (b2_pos.x == ppl_pos.x && b2_pos.y == ppl_pos.y){
franklzw 6:6b083e22cb53 224 int _t = 2;
franklzw 6:6b083e22cb53 225 }
franklzw 6:6b083e22cb53 226 if (b1_pos.x == ppl_pos.x && b1_pos.y == ppl_pos.y){
franklzw 6:6b083e22cb53 227 int _t = 1;
franklzw 6:6b083e22cb53 228 }
franklzw 6:6b083e22cb53 229 else {int _t = 0;}
franklzw 6:6b083e22cb53 230
franklzw 6:6b083e22cb53 231 }