ELEC2645 (2018/19) / Mbed 2 deprecated el17arm

Dependencies:   mbed

Committer:
el17arm
Date:
Wed Apr 17 19:57:33 2019 +0000
Revision:
44:e29458976114
Parent:
43:1ec6b6293c6b
Child:
45:bad704c546d4
Fixed problem with enemy positions not updating on level complete.All levels implemented and complete game screen added, just needs play testing to ensure no bugs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el17arm 29:d85886364643 1 #include "Gameengine.h"
el17arm 29:d85886364643 2
el17arm 41:0cf320f73424 3
el17arm 29:d85886364643 4 Gameengine::Gameengine()
el17arm 29:d85886364643 5 {
el17arm 29:d85886364643 6 }
el17arm 29:d85886364643 7
el17arm 29:d85886364643 8 Gameengine::~Gameengine()
el17arm 29:d85886364643 9 {
el17arm 29:d85886364643 10 }
el17arm 29:d85886364643 11
el17arm 29:d85886364643 12 void Gameengine::game_init()
el17arm 29:d85886364643 13 {
el17arm 40:913339e324b8 14 _turn_flag = false;
el17arm 40:913339e324b8 15 _enem_flag = false;
el17arm 40:913339e324b8 16 _key_reinit = false;
el17arm 40:913339e324b8 17 _five_keys = 5;
el17arm 44:e29458976114 18 _level = 0;
el17arm 33:023f57d52b1c 19 _sprites.miner_init(3, 33);
el17arm 29:d85886364643 20 _lives = 3;
el17arm 41:0cf320f73424 21 _time = 120;
el17arm 44:e29458976114 22
el17arm 29:d85886364643 23 }
el17arm 29:d85886364643 24
el17arm 29:d85886364643 25 void Gameengine::update(N5110 &lcd, Gamepad &pad)
el17arm 29:d85886364643 26 {
el17arm 42:d81c008b0436 27 _lev.level_exits(lcd);
el17arm 29:d85886364643 28 read_direction(pad);
el17arm 38:55bb9da08a52 29 _sprites.miner_draw(lcd);
el17arm 33:023f57d52b1c 30 _sprites.miner_move(_d, lcd);
el17arm 33:023f57d52b1c 31 _sprites.miner_gravity(lcd);
el17arm 33:023f57d52b1c 32 _sprites.miner_jump(lcd, pad);
el17arm 33:023f57d52b1c 33 _sprites.miner_land(lcd);
el17arm 40:913339e324b8 34 _sprites.keys_collected();
el17arm 40:913339e324b8 35 key_draw(lcd, pad);
el17arm 41:0cf320f73424 36 lose_life(pad, lcd);
el17arm 29:d85886364643 37 game_over();
el17arm 29:d85886364643 38 next_level(lcd);
el17arm 41:0cf320f73424 39 oxygen_leds();
el17arm 41:0cf320f73424 40 lives_leds();
el17arm 41:0cf320f73424 41 }
el17arm 41:0cf320f73424 42
el17arm 41:0cf320f73424 43 void Gameengine::draw_l1(N5110 &lcd, Gamepad &pad)
el17arm 41:0cf320f73424 44 {
el17arm 41:0cf320f73424 45 if (_level == 0) {
el17arm 41:0cf320f73424 46
el17arm 41:0cf320f73424 47 _t.start();
el17arm 42:d81c008b0436 48 _lev.level_platforms1(lcd);
el17arm 42:d81c008b0436 49 _lev.key_pos1();
el17arm 42:d81c008b0436 50 _lev.trap_pos1();
el17arm 42:d81c008b0436 51 _lev.block_pos1();
el17arm 42:d81c008b0436 52 _lev.soft_pos1();
el17arm 42:d81c008b0436 53 _lev.enem_pos1();
el17arm 41:0cf320f73424 54 blocks(lcd);
el17arm 44:e29458976114 55
el17arm 41:0cf320f73424 56 }
el17arm 41:0cf320f73424 57 }
el17arm 41:0cf320f73424 58 void Gameengine::draw_l2(N5110 &lcd, Gamepad &pad)
el17arm 41:0cf320f73424 59 {
el17arm 41:0cf320f73424 60 if(_level == 1) {
el17arm 41:0cf320f73424 61
el17arm 41:0cf320f73424 62 _t.start();
el17arm 41:0cf320f73424 63 key_reinit();
el17arm 42:d81c008b0436 64 _lev.level_platforms2(lcd);
el17arm 44:e29458976114 65 _lev.key_pos2();
el17arm 44:e29458976114 66 _lev.trap_pos2();
el17arm 42:d81c008b0436 67 _lev.block_pos2();
el17arm 42:d81c008b0436 68 _lev.soft_pos2();
el17arm 44:e29458976114 69 _lev.enem_pos2();
el17arm 41:0cf320f73424 70 blocks(lcd);
el17arm 41:0cf320f73424 71 }
el17arm 29:d85886364643 72 }
el17arm 29:d85886364643 73
el17arm 44:e29458976114 74 void Gameengine::draw_l3(N5110 &lcd, Gamepad &pad)
el17arm 44:e29458976114 75 {
el17arm 44:e29458976114 76 if(_level == 2) {
el17arm 44:e29458976114 77
el17arm 44:e29458976114 78 _t.start();
el17arm 44:e29458976114 79 key_reinit();
el17arm 44:e29458976114 80 _lev.level_platforms3(lcd);
el17arm 44:e29458976114 81 _lev.key_pos3();
el17arm 44:e29458976114 82 _lev.trap_pos3();
el17arm 44:e29458976114 83 _lev.block_pos3();
el17arm 44:e29458976114 84 _lev.soft_pos3();
el17arm 44:e29458976114 85 _lev.enem_pos3();
el17arm 44:e29458976114 86 blocks(lcd);
el17arm 44:e29458976114 87 game_complete(lcd);
el17arm 44:e29458976114 88 }
el17arm 44:e29458976114 89 }
el17arm 44:e29458976114 90
el17arm 38:55bb9da08a52 91 void Gameengine::read_direction(Gamepad &pad)
el17arm 38:55bb9da08a52 92 {
el17arm 38:55bb9da08a52 93 _d = pad.get_direction();
el17arm 38:55bb9da08a52 94 }
el17arm 38:55bb9da08a52 95
el17arm 41:0cf320f73424 96 void Gameengine::lose_life(Gamepad &pad, N5110 &lcd)
el17arm 29:d85886364643 97 {
el17arm 40:913339e324b8 98 if (trap_death(lcd) == true || enemies(lcd) == true) {
el17arm 29:d85886364643 99 _lives--;
el17arm 41:0cf320f73424 100 pad.tone(200, 0.5);
el17arm 33:023f57d52b1c 101 _sprites.miner_init(3, 33);
el17arm 29:d85886364643 102 wait(1);
el17arm 29:d85886364643 103 }
el17arm 29:d85886364643 104 }
el17arm 29:d85886364643 105
el17arm 29:d85886364643 106 bool Gameengine::game_over()
el17arm 29:d85886364643 107 {
el17arm 41:0cf320f73424 108 if(_lives == 0 || _t.read() > _time) {
el17arm 41:0cf320f73424 109 _t.stop();
el17arm 44:e29458976114 110
el17arm 29:d85886364643 111 return true;
el17arm 41:0cf320f73424 112 }
el17arm 44:e29458976114 113 return false;
el17arm 29:d85886364643 114 }
el17arm 29:d85886364643 115
el17arm 40:913339e324b8 116 bool Gameengine::level_exit(N5110 &lcd)
el17arm 41:0cf320f73424 117 {
el17arm 40:913339e324b8 118 int i = _level;
el17arm 42:d81c008b0436 119 if(_sprites.exit_level(_lev.exit1.lx[i],_lev.exit1.ly[i],lcd) == true) {
el17arm 40:913339e324b8 120 return true;
el17arm 40:913339e324b8 121 } else {
el17arm 40:913339e324b8 122 return false;
el17arm 40:913339e324b8 123 }
el17arm 40:913339e324b8 124 }
el17arm 40:913339e324b8 125
el17arm 40:913339e324b8 126 void Gameengine::next_level(N5110 &lcd)
el17arm 40:913339e324b8 127 {
el17arm 44:e29458976114 128 if(level_exit(lcd) && _sprites.keys_collected() > 0) {
el17arm 41:0cf320f73424 129 _t.stop();
el17arm 41:0cf320f73424 130 _total_time += (_time - _t.read());
el17arm 40:913339e324b8 131 _level = _level++;
el17arm 40:913339e324b8 132 _five_keys += 5;
el17arm 40:913339e324b8 133 _sprites.miner_init(3,33);
el17arm 44:e29458976114 134 _enem_flag = false;
el17arm 40:913339e324b8 135 _key_reinit = false;
el17arm 41:0cf320f73424 136 _t.reset();
el17arm 29:d85886364643 137 }
el17arm 34:c5a042973e0c 138 }
el17arm 34:c5a042973e0c 139
el17arm 34:c5a042973e0c 140 bool Gameengine::trap_death(N5110 &lcd)
el17arm 41:0cf320f73424 141 {
el17arm 40:913339e324b8 142 int i = _level;
el17arm 42:d81c008b0436 143 if( _sprites.trap(_lev.trap1.tx[i], _lev.trap1.ty[i], lcd) ||
el17arm 42:d81c008b0436 144 _sprites.trap(_lev.trap2.tx[i], _lev.trap2.ty[i], lcd) ||
el17arm 42:d81c008b0436 145 _sprites.trap(_lev.trap3.tx[i], _lev.trap3.ty[i], lcd) ||
el17arm 42:d81c008b0436 146 _sprites.trap(_lev.trap4.tx[i], _lev.trap4.ty[i], lcd) ||
el17arm 42:d81c008b0436 147 _sprites.trap(_lev.trap5.tx[i], _lev.trap5.ty[i], lcd)) {
el17arm 34:c5a042973e0c 148 return true;
el17arm 40:913339e324b8 149 }
el17arm 40:913339e324b8 150 return false;
el17arm 34:c5a042973e0c 151 }
el17arm 34:c5a042973e0c 152
el17arm 37:4d525a37d5d2 153 void Gameengine::key_draw(N5110 &lcd, Gamepad &pad)
el17arm 41:0cf320f73424 154 {
el17arm 40:913339e324b8 155 int i = _level;
el17arm 42:d81c008b0436 156 _sprites.key_collect(0, _lev.key1.kx[i], _lev.key1.ky[i], lcd, pad);
el17arm 42:d81c008b0436 157 _sprites.key_collect(1, _lev.key2.kx[i], _lev.key2.ky[i], lcd, pad);
el17arm 42:d81c008b0436 158 _sprites.key_collect(2, _lev.key3.kx[i], _lev.key3.ky[i], lcd, pad);
el17arm 42:d81c008b0436 159 _sprites.key_collect(3, _lev.key4.kx[i], _lev.key4.ky[i], lcd, pad);
el17arm 42:d81c008b0436 160 _sprites.key_collect(4, _lev.key5.kx[i], _lev.key5.ky[i], lcd, pad);
el17arm 40:913339e324b8 161 }
el17arm 40:913339e324b8 162
el17arm 40:913339e324b8 163 void Gameengine::key_reinit()
el17arm 37:4d525a37d5d2 164 {
el17arm 40:913339e324b8 165 if(_key_reinit == false) {
el17arm 40:913339e324b8 166 for(int i = 0; i<5; i++) {
el17arm 40:913339e324b8 167 _sprites._k.key[i] = false;
el17arm 40:913339e324b8 168 _key_reinit = true;
el17arm 40:913339e324b8 169 }
el17arm 40:913339e324b8 170 }
el17arm 38:55bb9da08a52 171 }
el17arm 38:55bb9da08a52 172
el17arm 38:55bb9da08a52 173 void Gameengine::blocks(N5110 &lcd)
el17arm 41:0cf320f73424 174 {
el17arm 40:913339e324b8 175 int i = _level;
el17arm 42:d81c008b0436 176 _sprites.soft_blocks(_lev.sof1.sx1[i], _lev.sof1.sy[i], _lev.sof1.sx2[i], lcd);
el17arm 42:d81c008b0436 177 _sprites.soft_blocks(_lev.sof2.sx1[i], _lev.sof2.sy[i], _lev.sof2.sx2[i], lcd);
el17arm 42:d81c008b0436 178 _sprites.soft_blocks(_lev.sof3.sx1[i], _lev.sof3.sy[i], _lev.sof3.sx2[i], lcd);
el17arm 42:d81c008b0436 179 _sprites.soft_blocks(_lev.sof4.sx1[i], _lev.sof4.sy[i], _lev.sof4.sx2[i], lcd);
el17arm 42:d81c008b0436 180 _sprites.soft_blocks(_lev.sof5.sx1[i], _lev.sof5.sy[i], _lev.sof5.sx2[i], lcd);
el17arm 41:0cf320f73424 181
el17arm 43:1ec6b6293c6b 182 _sprites.blocks(_d, 0, _lev.sol1.bx[i], _lev.sol1.by[i], lcd);
el17arm 43:1ec6b6293c6b 183 _sprites.blocks(_d, 1, _lev.sol2.bx[i], _lev.sol2.by[i], lcd);
el17arm 43:1ec6b6293c6b 184 _sprites.blocks(_d, 2, _lev.sol3.bx[i], _lev.sol3.by[i], lcd);
el17arm 43:1ec6b6293c6b 185 _sprites.blocks(_d, 3, _lev.sol4.bx[i], _lev.sol4.by[i], lcd);
el17arm 43:1ec6b6293c6b 186 _sprites.blocks(_d, 4, _lev.sol5.bx[i], _lev.sol5.by[i], lcd);
el17arm 38:55bb9da08a52 187 }
el17arm 38:55bb9da08a52 188
el17arm 38:55bb9da08a52 189 bool Gameengine::enemies(N5110 &lcd)
el17arm 41:0cf320f73424 190 {
el17arm 40:913339e324b8 191 int i = _level;
el17arm 40:913339e324b8 192 if(_enem_flag == false) {
el17arm 44:e29458976114 193
el17arm 42:d81c008b0436 194 _sprites.enemy_init(0, _lev.enem1.ex[i], _lev.enem1.ey[i], _lev.enem1.d[i]);
el17arm 42:d81c008b0436 195 _sprites.enemy_init(1, _lev.enem2.ex[i], _lev.enem2.ey[i], _lev.enem2.d[i]);
el17arm 42:d81c008b0436 196 _sprites.enemy_init(2, _lev.enem3.ex[i], _lev.enem3.ey[i], _lev.enem3.d[i]);
el17arm 40:913339e324b8 197 _enem_flag = true;
el17arm 40:913339e324b8 198 }
el17arm 42:d81c008b0436 199 _sprites.enemy_move(0, _lev.enem1.v[i], lcd);
el17arm 42:d81c008b0436 200 _sprites.enemy_move(1, _lev.enem2.v[i], lcd);
el17arm 42:d81c008b0436 201 _sprites.enemy_move(2, _lev.enem3.v[i], lcd);
el17arm 41:0cf320f73424 202
el17arm 44:e29458976114 203 if(_sprites.enemy_collision(0) || _sprites.enemy_collision(1) ||
el17arm 44:e29458976114 204 _sprites.enemy_collision(2)) {
el17arm 40:913339e324b8 205 return true;
el17arm 40:913339e324b8 206 }
el17arm 40:913339e324b8 207 return false;
el17arm 41:0cf320f73424 208 }
el17arm 41:0cf320f73424 209
el17arm 41:0cf320f73424 210 int Gameengine::oxygen_leds()
el17arm 44:e29458976114 211 {
el17arm 41:0cf320f73424 212 if(_t.read() < (_time*0.33f)) {
el17arm 41:0cf320f73424 213 _oxy_state = 3;
el17arm 41:0cf320f73424 214 }
el17arm 41:0cf320f73424 215 if(_t.read() > (_time*0.33f) && _t.read() < (_time*0.66f)) {
el17arm 41:0cf320f73424 216 _oxy_state = 2;
el17arm 41:0cf320f73424 217 }
el17arm 41:0cf320f73424 218 if(_t.read() > (_time*0.66f)) {
el17arm 41:0cf320f73424 219 _oxy_state = 1;
el17arm 41:0cf320f73424 220 }
el17arm 41:0cf320f73424 221 if(_t.read() >= _time) {
el17arm 41:0cf320f73424 222 _oxy_state = 0;
el17arm 41:0cf320f73424 223 }
el17arm 41:0cf320f73424 224 return _oxy_state;
el17arm 41:0cf320f73424 225
el17arm 41:0cf320f73424 226 }
el17arm 41:0cf320f73424 227
el17arm 41:0cf320f73424 228 int Gameengine::lives_leds()
el17arm 41:0cf320f73424 229 {
el17arm 41:0cf320f73424 230 _life_state = _lives;
el17arm 41:0cf320f73424 231 return _life_state;
el17arm 41:0cf320f73424 232 }
el17arm 41:0cf320f73424 233
el17arm 41:0cf320f73424 234 void Gameengine::get_score(N5110 &lcd)
el17arm 44:e29458976114 235 {
el17arm 41:0cf320f73424 236 float flt_score = ((_lives +1) * _total_time + (10 * _sprites.keys_collected()));
el17arm 41:0cf320f73424 237 int int_score = static_cast<int>(flt_score);
el17arm 41:0cf320f73424 238 char buffer[14];
el17arm 41:0cf320f73424 239 sprintf(buffer,"%2d",int_score);
el17arm 41:0cf320f73424 240 lcd.printString(buffer,40,2);
el17arm 41:0cf320f73424 241 printf("score = %i \n", int_score);
el17arm 44:e29458976114 242 }
el17arm 44:e29458976114 243
el17arm 44:e29458976114 244 bool Gameengine::game_complete(N5110 &lcd)
el17arm 44:e29458976114 245 {
el17arm 44:e29458976114 246 if(_level == 3) {
el17arm 44:e29458976114 247 return true;
el17arm 44:e29458976114 248 }
el17arm 44:e29458976114 249 return false;
el17arm 37:4d525a37d5d2 250 }