ELEC2645 (2018/19) / Mbed 2 deprecated el17arm

Dependencies:   mbed

Committer:
el17arm
Date:
Wed Apr 17 02:00:31 2019 +0000
Revision:
43:1ec6b6293c6b
Parent:
42:d81c008b0436
Child:
44:e29458976114
I was premature with my previous commit, each block parameter are individually indexed as the x,y values where previously interfering with each other and causing collisions to be unstable.

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 42:d81c008b0436 18 _level = 1;
el17arm 33:023f57d52b1c 19 _sprites.miner_init(3, 33);
el17arm 29:d85886364643 20 _lives = 3;
el17arm 41:0cf320f73424 21 _time = 120;
el17arm 41:0cf320f73424 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 41:0cf320f73424 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 42:d81c008b0436 65 //_lev.key_pos2();
el17arm 42:d81c008b0436 66 //_lev.trap_pos2();
el17arm 42:d81c008b0436 67 _lev.block_pos2();
el17arm 42:d81c008b0436 68 _lev.soft_pos2();
el17arm 42:d81c008b0436 69 //_lev.enem_pos2();
el17arm 41:0cf320f73424 70 blocks(lcd);
el17arm 41:0cf320f73424 71 }
el17arm 29:d85886364643 72 }
el17arm 29:d85886364643 73
el17arm 38:55bb9da08a52 74 void Gameengine::read_direction(Gamepad &pad)
el17arm 38:55bb9da08a52 75 {
el17arm 38:55bb9da08a52 76 _d = pad.get_direction();
el17arm 38:55bb9da08a52 77 }
el17arm 38:55bb9da08a52 78
el17arm 41:0cf320f73424 79 void Gameengine::lose_life(Gamepad &pad, N5110 &lcd)
el17arm 29:d85886364643 80 {
el17arm 40:913339e324b8 81 if (trap_death(lcd) == true || enemies(lcd) == true) {
el17arm 29:d85886364643 82 _lives--;
el17arm 41:0cf320f73424 83 pad.tone(200, 0.5);
el17arm 33:023f57d52b1c 84 _sprites.miner_init(3, 33);
el17arm 29:d85886364643 85 wait(1);
el17arm 29:d85886364643 86 }
el17arm 29:d85886364643 87 }
el17arm 29:d85886364643 88
el17arm 29:d85886364643 89 bool Gameengine::game_over()
el17arm 29:d85886364643 90 {
el17arm 41:0cf320f73424 91 if(_lives == 0 || _t.read() > _time) {
el17arm 41:0cf320f73424 92 _t.stop();
el17arm 41:0cf320f73424 93
el17arm 29:d85886364643 94 return true;
el17arm 41:0cf320f73424 95 }
el17arm 29:d85886364643 96 return false;
el17arm 29:d85886364643 97 }
el17arm 29:d85886364643 98
el17arm 40:913339e324b8 99 bool Gameengine::level_exit(N5110 &lcd)
el17arm 41:0cf320f73424 100 {
el17arm 40:913339e324b8 101 int i = _level;
el17arm 42:d81c008b0436 102 if(_sprites.exit_level(_lev.exit1.lx[i],_lev.exit1.ly[i],lcd) == true) {
el17arm 40:913339e324b8 103 return true;
el17arm 40:913339e324b8 104 } else {
el17arm 40:913339e324b8 105 return false;
el17arm 40:913339e324b8 106 }
el17arm 40:913339e324b8 107 }
el17arm 40:913339e324b8 108
el17arm 40:913339e324b8 109 void Gameengine::next_level(N5110 &lcd)
el17arm 40:913339e324b8 110 {
el17arm 40:913339e324b8 111 if(level_exit(lcd) && _sprites.keys_collected() == _five_keys) {
el17arm 41:0cf320f73424 112 _t.stop();
el17arm 41:0cf320f73424 113 _total_time += (_time - _t.read());
el17arm 40:913339e324b8 114 _level = _level++;
el17arm 40:913339e324b8 115 _five_keys += 5;
el17arm 40:913339e324b8 116 _sprites.miner_init(3,33);
el17arm 40:913339e324b8 117 _key_reinit = false;
el17arm 41:0cf320f73424 118 _t.reset();
el17arm 29:d85886364643 119 }
el17arm 34:c5a042973e0c 120 }
el17arm 34:c5a042973e0c 121
el17arm 34:c5a042973e0c 122 bool Gameengine::trap_death(N5110 &lcd)
el17arm 41:0cf320f73424 123 {
el17arm 40:913339e324b8 124 int i = _level;
el17arm 42:d81c008b0436 125 if( _sprites.trap(_lev.trap1.tx[i], _lev.trap1.ty[i], lcd) ||
el17arm 42:d81c008b0436 126 _sprites.trap(_lev.trap2.tx[i], _lev.trap2.ty[i], lcd) ||
el17arm 42:d81c008b0436 127 _sprites.trap(_lev.trap3.tx[i], _lev.trap3.ty[i], lcd) ||
el17arm 42:d81c008b0436 128 _sprites.trap(_lev.trap4.tx[i], _lev.trap4.ty[i], lcd) ||
el17arm 42:d81c008b0436 129 _sprites.trap(_lev.trap5.tx[i], _lev.trap5.ty[i], lcd)) {
el17arm 34:c5a042973e0c 130 return true;
el17arm 40:913339e324b8 131 }
el17arm 40:913339e324b8 132 return false;
el17arm 34:c5a042973e0c 133 }
el17arm 34:c5a042973e0c 134
el17arm 37:4d525a37d5d2 135 void Gameengine::key_draw(N5110 &lcd, Gamepad &pad)
el17arm 41:0cf320f73424 136 {
el17arm 40:913339e324b8 137 int i = _level;
el17arm 42:d81c008b0436 138 _sprites.key_collect(0, _lev.key1.kx[i], _lev.key1.ky[i], lcd, pad);
el17arm 42:d81c008b0436 139 _sprites.key_collect(1, _lev.key2.kx[i], _lev.key2.ky[i], lcd, pad);
el17arm 42:d81c008b0436 140 _sprites.key_collect(2, _lev.key3.kx[i], _lev.key3.ky[i], lcd, pad);
el17arm 42:d81c008b0436 141 _sprites.key_collect(3, _lev.key4.kx[i], _lev.key4.ky[i], lcd, pad);
el17arm 42:d81c008b0436 142 _sprites.key_collect(4, _lev.key5.kx[i], _lev.key5.ky[i], lcd, pad);
el17arm 40:913339e324b8 143 }
el17arm 40:913339e324b8 144
el17arm 40:913339e324b8 145 void Gameengine::key_reinit()
el17arm 37:4d525a37d5d2 146 {
el17arm 40:913339e324b8 147 if(_key_reinit == false) {
el17arm 40:913339e324b8 148 for(int i = 0; i<5; i++) {
el17arm 40:913339e324b8 149 _sprites._k.key[i] = false;
el17arm 40:913339e324b8 150 _key_reinit = true;
el17arm 40:913339e324b8 151 }
el17arm 40:913339e324b8 152 }
el17arm 38:55bb9da08a52 153 }
el17arm 38:55bb9da08a52 154
el17arm 38:55bb9da08a52 155 void Gameengine::blocks(N5110 &lcd)
el17arm 41:0cf320f73424 156 {
el17arm 40:913339e324b8 157 int i = _level;
el17arm 42:d81c008b0436 158 _sprites.soft_blocks(_lev.sof1.sx1[i], _lev.sof1.sy[i], _lev.sof1.sx2[i], lcd);
el17arm 42:d81c008b0436 159 _sprites.soft_blocks(_lev.sof2.sx1[i], _lev.sof2.sy[i], _lev.sof2.sx2[i], lcd);
el17arm 42:d81c008b0436 160 _sprites.soft_blocks(_lev.sof3.sx1[i], _lev.sof3.sy[i], _lev.sof3.sx2[i], lcd);
el17arm 42:d81c008b0436 161 _sprites.soft_blocks(_lev.sof4.sx1[i], _lev.sof4.sy[i], _lev.sof4.sx2[i], lcd);
el17arm 42:d81c008b0436 162 _sprites.soft_blocks(_lev.sof5.sx1[i], _lev.sof5.sy[i], _lev.sof5.sx2[i], lcd);
el17arm 41:0cf320f73424 163
el17arm 43:1ec6b6293c6b 164 _sprites.blocks(_d, 0, _lev.sol1.bx[i], _lev.sol1.by[i], lcd);
el17arm 43:1ec6b6293c6b 165 _sprites.blocks(_d, 1, _lev.sol2.bx[i], _lev.sol2.by[i], lcd);
el17arm 43:1ec6b6293c6b 166 _sprites.blocks(_d, 2, _lev.sol3.bx[i], _lev.sol3.by[i], lcd);
el17arm 43:1ec6b6293c6b 167 _sprites.blocks(_d, 3, _lev.sol4.bx[i], _lev.sol4.by[i], lcd);
el17arm 43:1ec6b6293c6b 168 _sprites.blocks(_d, 4, _lev.sol5.bx[i], _lev.sol5.by[i], lcd);
el17arm 38:55bb9da08a52 169 }
el17arm 38:55bb9da08a52 170
el17arm 38:55bb9da08a52 171 bool Gameengine::enemies(N5110 &lcd)
el17arm 41:0cf320f73424 172 {
el17arm 40:913339e324b8 173 int i = _level;
el17arm 40:913339e324b8 174 if(_enem_flag == false) {
el17arm 42:d81c008b0436 175 _sprites.enemy_init(0, _lev.enem1.ex[i], _lev.enem1.ey[i], _lev.enem1.d[i]);
el17arm 42:d81c008b0436 176 _sprites.enemy_init(1, _lev.enem2.ex[i], _lev.enem2.ey[i], _lev.enem2.d[i]);
el17arm 42:d81c008b0436 177 _sprites.enemy_init(2, _lev.enem3.ex[i], _lev.enem3.ey[i], _lev.enem3.d[i]);
el17arm 40:913339e324b8 178 _enem_flag = true;
el17arm 40:913339e324b8 179 }
el17arm 42:d81c008b0436 180 _sprites.enemy_move(0, _lev.enem1.v[i], lcd);
el17arm 42:d81c008b0436 181 _sprites.enemy_move(1, _lev.enem2.v[i], lcd);
el17arm 42:d81c008b0436 182 _sprites.enemy_move(2, _lev.enem3.v[i], lcd);
el17arm 41:0cf320f73424 183
el17arm 42:d81c008b0436 184 if(_sprites.enemy_collision(0) || _sprites.enemy_collision(1) ||
el17arm 42:d81c008b0436 185 _sprites.enemy_collision(2)) {
el17arm 40:913339e324b8 186 return true;
el17arm 40:913339e324b8 187 }
el17arm 40:913339e324b8 188 return false;
el17arm 41:0cf320f73424 189 }
el17arm 41:0cf320f73424 190
el17arm 41:0cf320f73424 191 int Gameengine::oxygen_leds()
el17arm 41:0cf320f73424 192 {
el17arm 41:0cf320f73424 193 if(_t.read() < (_time*0.33f)) {
el17arm 41:0cf320f73424 194 _oxy_state = 3;
el17arm 41:0cf320f73424 195 }
el17arm 41:0cf320f73424 196 if(_t.read() > (_time*0.33f) && _t.read() < (_time*0.66f)) {
el17arm 41:0cf320f73424 197 _oxy_state = 2;
el17arm 41:0cf320f73424 198 }
el17arm 41:0cf320f73424 199 if(_t.read() > (_time*0.66f)) {
el17arm 41:0cf320f73424 200 _oxy_state = 1;
el17arm 41:0cf320f73424 201 }
el17arm 41:0cf320f73424 202 if(_t.read() >= _time) {
el17arm 41:0cf320f73424 203 _oxy_state = 0;
el17arm 41:0cf320f73424 204 }
el17arm 41:0cf320f73424 205 return _oxy_state;
el17arm 41:0cf320f73424 206
el17arm 41:0cf320f73424 207 }
el17arm 41:0cf320f73424 208
el17arm 41:0cf320f73424 209 int Gameengine::lives_leds()
el17arm 41:0cf320f73424 210 {
el17arm 41:0cf320f73424 211 _life_state = _lives;
el17arm 41:0cf320f73424 212 return _life_state;
el17arm 41:0cf320f73424 213 }
el17arm 41:0cf320f73424 214
el17arm 41:0cf320f73424 215 void Gameengine::get_score(N5110 &lcd)
el17arm 41:0cf320f73424 216 {
el17arm 41:0cf320f73424 217 float flt_score = ((_lives +1) * _total_time + (10 * _sprites.keys_collected()));
el17arm 41:0cf320f73424 218 int int_score = static_cast<int>(flt_score);
el17arm 41:0cf320f73424 219 char buffer[14];
el17arm 41:0cf320f73424 220 sprintf(buffer,"%2d",int_score);
el17arm 41:0cf320f73424 221 lcd.printString(buffer,40,2);
el17arm 41:0cf320f73424 222 printf("score = %i \n", int_score);
el17arm 37:4d525a37d5d2 223 }