Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Gameengine/Levelobjects.cpp@27:e73dd64ef334, 2019-04-09 (annotated)
- Committer:
- el17arm
- Date:
- Tue Apr 09 18:46:14 2019 +0000
- Revision:
- 27:e73dd64ef334
Moving enemies that will kill my character on contact and make him lose a life
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| el17arm | 27:e73dd64ef334 | 1 | #include "Levelobjects.h" |
| el17arm | 27:e73dd64ef334 | 2 | |
| el17arm | 27:e73dd64ef334 | 3 | Levelobjects::Levelobjects() |
| el17arm | 27:e73dd64ef334 | 4 | { |
| el17arm | 27:e73dd64ef334 | 5 | _turn_flag = 0; |
| el17arm | 27:e73dd64ef334 | 6 | _counter =0; |
| el17arm | 27:e73dd64ef334 | 7 | } |
| el17arm | 27:e73dd64ef334 | 8 | |
| el17arm | 27:e73dd64ef334 | 9 | Levelobjects::~Levelobjects() |
| el17arm | 27:e73dd64ef334 | 10 | { |
| el17arm | 27:e73dd64ef334 | 11 | } |
| el17arm | 27:e73dd64ef334 | 12 | |
| el17arm | 27:e73dd64ef334 | 13 | void Levelobjects::game_init() |
| el17arm | 27:e73dd64ef334 | 14 | { |
| el17arm | 27:e73dd64ef334 | 15 | _level_select = 1; |
| el17arm | 27:e73dd64ef334 | 16 | _miner.miner_init(3, 33); |
| el17arm | 27:e73dd64ef334 | 17 | //enemy_init(20, 78, 40); |
| el17arm | 27:e73dd64ef334 | 18 | enemy_init(22, 20, 40); |
| el17arm | 27:e73dd64ef334 | 19 | _lives = 3; |
| el17arm | 27:e73dd64ef334 | 20 | } |
| el17arm | 27:e73dd64ef334 | 21 | |
| el17arm | 27:e73dd64ef334 | 22 | /*void Levelobjects::get_miner_pos() |
| el17arm | 27:e73dd64ef334 | 23 | { |
| el17arm | 27:e73dd64ef334 | 24 | Vector2D p = _miner.get_pos(); |
| el17arm | 27:e73dd64ef334 | 25 | |
| el17arm | 27:e73dd64ef334 | 26 | printf("miner x %f \n", p.x); |
| el17arm | 27:e73dd64ef334 | 27 | printf("miner y %f \n", p.y); |
| el17arm | 27:e73dd64ef334 | 28 | }*/ |
| el17arm | 27:e73dd64ef334 | 29 | |
| el17arm | 27:e73dd64ef334 | 30 | void Levelobjects::read_direction(Gamepad &pad) |
| el17arm | 27:e73dd64ef334 | 31 | { |
| el17arm | 27:e73dd64ef334 | 32 | _d = pad.get_direction(); |
| el17arm | 27:e73dd64ef334 | 33 | } |
| el17arm | 27:e73dd64ef334 | 34 | |
| el17arm | 27:e73dd64ef334 | 35 | void Levelobjects::update(N5110 &lcd, Gamepad &pad) |
| el17arm | 27:e73dd64ef334 | 36 | { |
| el17arm | 27:e73dd64ef334 | 37 | t.start(); |
| el17arm | 27:e73dd64ef334 | 38 | read_direction(pad); |
| el17arm | 27:e73dd64ef334 | 39 | //get_miner_pos(); |
| el17arm | 27:e73dd64ef334 | 40 | _miner.miner_move(_d, lcd); |
| el17arm | 27:e73dd64ef334 | 41 | _miner.miner_gravity(lcd); |
| el17arm | 27:e73dd64ef334 | 42 | _miner.miner_jump(lcd, pad); |
| el17arm | 27:e73dd64ef334 | 43 | _miner.miner_land(lcd); |
| el17arm | 27:e73dd64ef334 | 44 | lose_life(lcd); |
| el17arm | 27:e73dd64ef334 | 45 | game_over(); |
| el17arm | 27:e73dd64ef334 | 46 | next_level(lcd); |
| el17arm | 27:e73dd64ef334 | 47 | } |
| el17arm | 27:e73dd64ef334 | 48 | |
| el17arm | 27:e73dd64ef334 | 49 | void Levelobjects::draw(Key _k, N5110 &lcd, Gamepad &pad) |
| el17arm | 27:e73dd64ef334 | 50 | { |
| el17arm | 27:e73dd64ef334 | 51 | if (_level_select == 1) { |
| el17arm | 27:e73dd64ef334 | 52 | |
| el17arm | 27:e73dd64ef334 | 53 | _miner.miner_draw(lcd); |
| el17arm | 27:e73dd64ef334 | 54 | _l1.level_platforms(lcd); |
| el17arm | 27:e73dd64ef334 | 55 | _l1.soft_blocks(lcd); |
| el17arm | 27:e73dd64ef334 | 56 | _l1.solid_blocks(lcd); |
| el17arm | 27:e73dd64ef334 | 57 | _l1.keys(lcd, pad); |
| el17arm | 27:e73dd64ef334 | 58 | _l1.keys_collected(); |
| el17arm | 27:e73dd64ef334 | 59 | _l1.traps(lcd); |
| el17arm | 27:e73dd64ef334 | 60 | enemy_move(lcd); |
| el17arm | 27:e73dd64ef334 | 61 | enemy_collision(); |
| el17arm | 27:e73dd64ef334 | 62 | } |
| el17arm | 27:e73dd64ef334 | 63 | if(_level_select == 2) { |
| el17arm | 27:e73dd64ef334 | 64 | |
| el17arm | 27:e73dd64ef334 | 65 | _miner.miner_draw(lcd); |
| el17arm | 27:e73dd64ef334 | 66 | lcd.drawLine(0,47,83,47,1); |
| el17arm | 27:e73dd64ef334 | 67 | //printf("level 2 time = %f \n", t.read()); |
| el17arm | 27:e73dd64ef334 | 68 | } |
| el17arm | 27:e73dd64ef334 | 69 | } |
| el17arm | 27:e73dd64ef334 | 70 | |
| el17arm | 27:e73dd64ef334 | 71 | void Levelobjects::lose_life(N5110 &lcd) |
| el17arm | 27:e73dd64ef334 | 72 | { |
| el17arm | 27:e73dd64ef334 | 73 | |
| el17arm | 27:e73dd64ef334 | 74 | if (_l1.traps(lcd) == 1 || enemy_collision() == true) { |
| el17arm | 27:e73dd64ef334 | 75 | _lives--; |
| el17arm | 27:e73dd64ef334 | 76 | _miner.miner_init(3, 33); |
| el17arm | 27:e73dd64ef334 | 77 | wait(1); |
| el17arm | 27:e73dd64ef334 | 78 | } |
| el17arm | 27:e73dd64ef334 | 79 | } |
| el17arm | 27:e73dd64ef334 | 80 | |
| el17arm | 27:e73dd64ef334 | 81 | bool Levelobjects::game_over() |
| el17arm | 27:e73dd64ef334 | 82 | { |
| el17arm | 27:e73dd64ef334 | 83 | if(_lives == 0 || t.read() > 60) { |
| el17arm | 27:e73dd64ef334 | 84 | t.stop(); |
| el17arm | 27:e73dd64ef334 | 85 | return true; |
| el17arm | 27:e73dd64ef334 | 86 | } else { |
| el17arm | 27:e73dd64ef334 | 87 | return false; |
| el17arm | 27:e73dd64ef334 | 88 | } |
| el17arm | 27:e73dd64ef334 | 89 | } |
| el17arm | 27:e73dd64ef334 | 90 | |
| el17arm | 27:e73dd64ef334 | 91 | void Levelobjects::next_level(N5110 &lcd) |
| el17arm | 27:e73dd64ef334 | 92 | { |
| el17arm | 27:e73dd64ef334 | 93 | if(_l1.level1_exit(lcd) == true) { |
| el17arm | 27:e73dd64ef334 | 94 | t.stop(); |
| el17arm | 27:e73dd64ef334 | 95 | _level_select = 2; |
| el17arm | 27:e73dd64ef334 | 96 | _miner.miner_init(3,0); |
| el17arm | 27:e73dd64ef334 | 97 | printf("Final score is %f \n ",_lives * (60 - t.read())+ (10 * _l1.keys_collected())); |
| el17arm | 27:e73dd64ef334 | 98 | } |
| el17arm | 27:e73dd64ef334 | 99 | } |
| el17arm | 27:e73dd64ef334 | 100 | |
| el17arm | 27:e73dd64ef334 | 101 | void Levelobjects::enemy_init(int x, int y, volatile int d) |
| el17arm | 27:e73dd64ef334 | 102 | { |
| el17arm | 27:e73dd64ef334 | 103 | _x = x; |
| el17arm | 27:e73dd64ef334 | 104 | _y = y; |
| el17arm | 27:e73dd64ef334 | 105 | _distance = d; |
| el17arm | 27:e73dd64ef334 | 106 | } |
| el17arm | 27:e73dd64ef334 | 107 | |
| el17arm | 27:e73dd64ef334 | 108 | void Levelobjects::enemy_move(N5110 &lcd) |
| el17arm | 27:e73dd64ef334 | 109 | { |
| el17arm | 27:e73dd64ef334 | 110 | lcd.drawSprite(_x,_y,5,3, (int *) enemy); |
| el17arm | 27:e73dd64ef334 | 111 | if (_turn_flag == 0) { |
| el17arm | 27:e73dd64ef334 | 112 | _x = _x + 0.5; |
| el17arm | 27:e73dd64ef334 | 113 | _counter++; |
| el17arm | 27:e73dd64ef334 | 114 | } |
| el17arm | 27:e73dd64ef334 | 115 | if(_counter == _distance) { |
| el17arm | 27:e73dd64ef334 | 116 | _turn_flag = 1; |
| el17arm | 27:e73dd64ef334 | 117 | } |
| el17arm | 27:e73dd64ef334 | 118 | if (_turn_flag == 1) { |
| el17arm | 27:e73dd64ef334 | 119 | _x = _x - 0.5; |
| el17arm | 27:e73dd64ef334 | 120 | _counter--; |
| el17arm | 27:e73dd64ef334 | 121 | } |
| el17arm | 27:e73dd64ef334 | 122 | if (_counter == 0) { |
| el17arm | 27:e73dd64ef334 | 123 | _turn_flag = 0; |
| el17arm | 27:e73dd64ef334 | 124 | } |
| el17arm | 27:e73dd64ef334 | 125 | } |
| el17arm | 27:e73dd64ef334 | 126 | |
| el17arm | 27:e73dd64ef334 | 127 | bool Levelobjects::enemy_collision() |
| el17arm | 27:e73dd64ef334 | 128 | { |
| el17arm | 27:e73dd64ef334 | 129 | Vector2D p = _miner.get_pos(); |
| el17arm | 27:e73dd64ef334 | 130 | |
| el17arm | 27:e73dd64ef334 | 131 | if (p.x < _x+2 && p.x+2 > _x && p.y < _y+4 && p.y+8 > _y) { |
| el17arm | 27:e73dd64ef334 | 132 | return true; |
| el17arm | 27:e73dd64ef334 | 133 | } else { |
| el17arm | 27:e73dd64ef334 | 134 | return false; |
| el17arm | 27:e73dd64ef334 | 135 | } |
| el17arm | 27:e73dd64ef334 | 136 | } |