ELEC2645 (2018/19) / Mbed 2 deprecated el17arm

Dependencies:   mbed

Committer:
el17arm
Date:
Mon Apr 15 02:01:41 2019 +0000
Revision:
40:913339e324b8
Parent:
38:55bb9da08a52
Child:
41:0cf320f73424
all level object parameters are now initialised in Level class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el17arm 29:d85886364643 1 #include "Gameengine.h"
el17arm 29:d85886364643 2
el17arm 29:d85886364643 3 Gameengine::Gameengine()
el17arm 29:d85886364643 4 {
el17arm 29:d85886364643 5 }
el17arm 29:d85886364643 6
el17arm 29:d85886364643 7 Gameengine::~Gameengine()
el17arm 29:d85886364643 8 {
el17arm 29:d85886364643 9 }
el17arm 29:d85886364643 10
el17arm 29:d85886364643 11 void Gameengine::game_init()
el17arm 29:d85886364643 12 {
el17arm 40:913339e324b8 13 _turn_flag = false;
el17arm 40:913339e324b8 14 _enem_flag = false;
el17arm 40:913339e324b8 15 _key_reinit = false;
el17arm 40:913339e324b8 16 _five_keys = 5;
el17arm 40:913339e324b8 17 _level = 0;
el17arm 33:023f57d52b1c 18 _sprites.miner_init(3, 33);
el17arm 29:d85886364643 19 _lives = 3;
el17arm 29:d85886364643 20 }
el17arm 29:d85886364643 21
el17arm 29:d85886364643 22 void Gameengine::update(N5110 &lcd, Gamepad &pad)
el17arm 29:d85886364643 23 {
el17arm 40:913339e324b8 24 _l1.level_exits(lcd);
el17arm 29:d85886364643 25 read_direction(pad);
el17arm 38:55bb9da08a52 26 _sprites.miner_draw(lcd);
el17arm 33:023f57d52b1c 27 _sprites.miner_move(_d, lcd);
el17arm 33:023f57d52b1c 28 _sprites.miner_gravity(lcd);
el17arm 33:023f57d52b1c 29 _sprites.miner_jump(lcd, pad);
el17arm 33:023f57d52b1c 30 _sprites.miner_land(lcd);
el17arm 40:913339e324b8 31 _sprites.keys_collected();
el17arm 40:913339e324b8 32 key_draw(lcd, pad);
el17arm 29:d85886364643 33 lose_life(lcd);
el17arm 29:d85886364643 34 game_over();
el17arm 29:d85886364643 35 next_level(lcd);
el17arm 40:913339e324b8 36
el17arm 40:913339e324b8 37 printf("timer %f \n ", t.read());
el17arm 29:d85886364643 38 }
el17arm 29:d85886364643 39
el17arm 38:55bb9da08a52 40 void Gameengine::read_direction(Gamepad &pad)
el17arm 38:55bb9da08a52 41 {
el17arm 38:55bb9da08a52 42 _d = pad.get_direction();
el17arm 38:55bb9da08a52 43 }
el17arm 38:55bb9da08a52 44
el17arm 37:4d525a37d5d2 45 void Gameengine::draw(N5110 &lcd, Gamepad &pad)
el17arm 29:d85886364643 46 {
el17arm 40:913339e324b8 47 if (_level == 0) {
el17arm 40:913339e324b8 48
el17arm 40:913339e324b8 49 t.start();
el17arm 40:913339e324b8 50 _l1.key_pos1();
el17arm 40:913339e324b8 51 _l1.block_pos1();
el17arm 38:55bb9da08a52 52 blocks(lcd);
el17arm 40:913339e324b8 53 _l1.enem_pos1();
el17arm 40:913339e324b8 54 _l1.trap_pos1();
el17arm 40:913339e324b8 55 _l1.level_platforms1(lcd);
el17arm 40:913339e324b8 56
el17arm 29:d85886364643 57 }
el17arm 40:913339e324b8 58
el17arm 40:913339e324b8 59 if(_level == 1) {
el17arm 40:913339e324b8 60
el17arm 40:913339e324b8 61 t.start();
el17arm 40:913339e324b8 62 key_reinit();
el17arm 40:913339e324b8 63 _l1.key_pos2();
el17arm 40:913339e324b8 64 _l1.trap_pos2();
el17arm 40:913339e324b8 65 _l1.level_platforms1(lcd);
el17arm 40:913339e324b8 66 _l1.enem_pos2();
el17arm 40:913339e324b8 67 _l1.block_pos2();
el17arm 40:913339e324b8 68 blocks(lcd);
el17arm 40:913339e324b8 69
el17arm 29:d85886364643 70 lcd.drawLine(0,47,83,47,1);
el17arm 29:d85886364643 71 //printf("level 2 time = %f \n", t.read());
el17arm 29:d85886364643 72 }
el17arm 29:d85886364643 73 }
el17arm 29:d85886364643 74
el17arm 29:d85886364643 75 void Gameengine::lose_life(N5110 &lcd)
el17arm 29:d85886364643 76 {
el17arm 40:913339e324b8 77 if (trap_death(lcd) == true || enemies(lcd) == true) {
el17arm 29:d85886364643 78 _lives--;
el17arm 33:023f57d52b1c 79 _sprites.miner_init(3, 33);
el17arm 29:d85886364643 80 wait(1);
el17arm 29:d85886364643 81 }
el17arm 29:d85886364643 82 }
el17arm 29:d85886364643 83
el17arm 29:d85886364643 84 bool Gameengine::game_over()
el17arm 29:d85886364643 85 {
el17arm 38:55bb9da08a52 86 if(_lives == 0 || t.read() > 120) {
el17arm 29:d85886364643 87 t.stop();
el17arm 29:d85886364643 88 return true;
el17arm 29:d85886364643 89 } else {
el17arm 29:d85886364643 90 return false;
el17arm 29:d85886364643 91 }
el17arm 29:d85886364643 92 }
el17arm 29:d85886364643 93
el17arm 40:913339e324b8 94 bool Gameengine::level_exit(N5110 &lcd)
el17arm 38:55bb9da08a52 95 {
el17arm 40:913339e324b8 96 int i = _level;
el17arm 40:913339e324b8 97 if(_sprites.exit_level(_l1.exit1.lx[i],_l1.exit1.ly[i],lcd) == true) {
el17arm 40:913339e324b8 98 return true;
el17arm 40:913339e324b8 99 } else {
el17arm 40:913339e324b8 100 return false;
el17arm 40:913339e324b8 101 }
el17arm 40:913339e324b8 102 }
el17arm 40:913339e324b8 103
el17arm 40:913339e324b8 104 void Gameengine::next_level(N5110 &lcd)
el17arm 40:913339e324b8 105 {
el17arm 40:913339e324b8 106 if(level_exit(lcd) && _sprites.keys_collected() == _five_keys) {
el17arm 29:d85886364643 107 t.stop();
el17arm 40:913339e324b8 108 _level = _level++;
el17arm 40:913339e324b8 109 _five_keys += 5;
el17arm 40:913339e324b8 110 _sprites.miner_init(3,33);
el17arm 40:913339e324b8 111 _key_reinit = false;
el17arm 40:913339e324b8 112 t.reset();
el17arm 40:913339e324b8 113 printf("Final score is %f \n ",_lives * (60 - t.read())+ (10 * _sprites.keys_collected()));
el17arm 29:d85886364643 114 }
el17arm 34:c5a042973e0c 115 }
el17arm 34:c5a042973e0c 116
el17arm 34:c5a042973e0c 117 bool Gameengine::trap_death(N5110 &lcd)
el17arm 40:913339e324b8 118 {
el17arm 40:913339e324b8 119 int i = _level;
el17arm 40:913339e324b8 120 if(_sprites.trap(_l1.trap1.tx[i], _l1.trap1.ty[i], lcd) ||
el17arm 40:913339e324b8 121 _sprites.trap(_l1.trap2.tx[i], _l1.trap2.ty[i], lcd) ||
el17arm 40:913339e324b8 122 _sprites.trap(_l1.trap4.tx[i], _l1.trap4.ty[i], lcd)) {
el17arm 34:c5a042973e0c 123 return true;
el17arm 40:913339e324b8 124 }
el17arm 40:913339e324b8 125 return false;
el17arm 34:c5a042973e0c 126 }
el17arm 34:c5a042973e0c 127
el17arm 37:4d525a37d5d2 128 void Gameengine::key_draw(N5110 &lcd, Gamepad &pad)
el17arm 40:913339e324b8 129 {
el17arm 40:913339e324b8 130 int i = _level;
el17arm 40:913339e324b8 131 _sprites.key_collect(0, _l1.key1.kx[i], _l1.key1.ky[i], lcd, pad);
el17arm 40:913339e324b8 132 _sprites.key_collect(1, _l1.key2.kx[i], _l1.key2.ky[i], lcd, pad);
el17arm 40:913339e324b8 133 _sprites.key_collect(2, _l1.key3.kx[i], _l1.key3.ky[i], lcd, pad);
el17arm 40:913339e324b8 134 _sprites.key_collect(3, _l1.key4.kx[i], _l1.key4.ky[i], lcd, pad);
el17arm 40:913339e324b8 135 _sprites.key_collect(4, _l1.key5.kx[i], _l1.key5.ky[i], lcd, pad);
el17arm 40:913339e324b8 136 }
el17arm 40:913339e324b8 137
el17arm 40:913339e324b8 138 void Gameengine::key_reinit()
el17arm 37:4d525a37d5d2 139 {
el17arm 40:913339e324b8 140 if(_key_reinit == false) {
el17arm 40:913339e324b8 141 for(int i = 0; i<5; i++) {
el17arm 40:913339e324b8 142 _sprites._k.key[i] = false;
el17arm 40:913339e324b8 143 _key_reinit = true;
el17arm 40:913339e324b8 144 }
el17arm 40:913339e324b8 145 }
el17arm 38:55bb9da08a52 146 }
el17arm 38:55bb9da08a52 147
el17arm 38:55bb9da08a52 148 void Gameengine::blocks(N5110 &lcd)
el17arm 40:913339e324b8 149 {
el17arm 40:913339e324b8 150 int i = _level;
el17arm 40:913339e324b8 151 _sprites.soft_blocks(_l1.sof1.sx[i], _l1.sof1.sy[i], _l1.sof1.sz[i], lcd);
el17arm 40:913339e324b8 152 _sprites.soft_blocks(_l1.sof2.sx[i], _l1.sof2.sy[i], _l1.sof2.sz[i], lcd);
el17arm 40:913339e324b8 153 _sprites.soft_blocks(_l1.sof3.sx[i], _l1.sof3.sy[i], _l1.sof3.sz[i], lcd);
el17arm 40:913339e324b8 154 _sprites.blocks(_d, _l1.sol1.bx[i], _l1.sol1.by[i], lcd);
el17arm 40:913339e324b8 155 _sprites.blocks(_d, _l1.sol2.bx[i], _l1.sol2.by[i], lcd);
el17arm 38:55bb9da08a52 156 }
el17arm 38:55bb9da08a52 157
el17arm 38:55bb9da08a52 158 bool Gameengine::enemies(N5110 &lcd)
el17arm 40:913339e324b8 159 {
el17arm 40:913339e324b8 160 int i = _level;
el17arm 40:913339e324b8 161 if(_enem_flag == false) {
el17arm 40:913339e324b8 162 _sprites.enemy_init(_l1.enem1.f[i], _l1.enem1.ex[i], _l1.enem1.ey[i], _l1.enem1.d[i]);
el17arm 40:913339e324b8 163 _sprites.enemy_init(_l1.enem2.f[i], _l1.enem2.ex[i], _l1.enem2.ey[i], _l1.enem2.d[i]);
el17arm 40:913339e324b8 164 _enem_flag = true;
el17arm 40:913339e324b8 165 }
el17arm 40:913339e324b8 166 _sprites.enemy_move(_l1.enem1.f[i], _l1.enem1.v[i], lcd);
el17arm 40:913339e324b8 167 _sprites.enemy_move(_l1.enem2.f[i], _l1.enem2.v[i], lcd);
el17arm 40:913339e324b8 168 if(_sprites.enemy_collision(_l1.enem1.f[i]) || _sprites.enemy_collision(_l1.enem2.f[i])) {
el17arm 40:913339e324b8 169 return true;
el17arm 40:913339e324b8 170 }
el17arm 40:913339e324b8 171 return false;
el17arm 37:4d525a37d5d2 172 }