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
Miner/Miner.cpp@32:5dc769ba4a58, 2019-04-10 (annotated)
- Committer:
- el17arm
- Date:
- Wed Apr 10 17:19:51 2019 +0000
- Revision:
- 32:5dc769ba4a58
- Parent:
- 30:6d6b48fe3679
All sprites and functions now contained in one class
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| el17arm | 27:e73dd64ef334 | 1 | #include "Miner.h" |
| el17arm | 27:e73dd64ef334 | 2 | |
| el17arm | 27:e73dd64ef334 | 3 | Miner::Miner() |
| el17arm | 27:e73dd64ef334 | 4 | { |
| el17arm | 29:d85886364643 | 5 | _enem.eflag[0] = false; |
| el17arm | 30:6d6b48fe3679 | 6 | _j_flag = false; |
| el17arm | 32:5dc769ba4a58 | 7 | _k.key[0] = false; |
| el17arm | 32:5dc769ba4a58 | 8 | _k.key[1] = false; |
| el17arm | 32:5dc769ba4a58 | 9 | _k.key[2] = false; |
| el17arm | 32:5dc769ba4a58 | 10 | _k.key[3] = false; |
| el17arm | 32:5dc769ba4a58 | 11 | _k.key[4] = false; |
| el17arm | 27:e73dd64ef334 | 12 | } |
| el17arm | 27:e73dd64ef334 | 13 | |
| el17arm | 27:e73dd64ef334 | 14 | Miner::~Miner() |
| el17arm | 27:e73dd64ef334 | 15 | { |
| el17arm | 27:e73dd64ef334 | 16 | } |
| el17arm | 27:e73dd64ef334 | 17 | |
| el17arm | 27:e73dd64ef334 | 18 | void Miner::miner_init(int x, int y) |
| el17arm | 27:e73dd64ef334 | 19 | { |
| el17arm | 27:e73dd64ef334 | 20 | _x = x; |
| el17arm | 27:e73dd64ef334 | 21 | _y = y; |
| el17arm | 27:e73dd64ef334 | 22 | } |
| el17arm | 27:e73dd64ef334 | 23 | |
| el17arm | 27:e73dd64ef334 | 24 | Vector2D Miner::get_pos() |
| el17arm | 27:e73dd64ef334 | 25 | { |
| el17arm | 27:e73dd64ef334 | 26 | Vector2D p = {_x,_y}; |
| el17arm | 29:d85886364643 | 27 | return p; |
| el17arm | 27:e73dd64ef334 | 28 | } |
| el17arm | 27:e73dd64ef334 | 29 | |
| el17arm | 27:e73dd64ef334 | 30 | void Miner::miner_draw(N5110 &lcd) |
| el17arm | 27:e73dd64ef334 | 31 | { |
| el17arm | 27:e73dd64ef334 | 32 | if (_direction == 1) { |
| el17arm | 27:e73dd64ef334 | 33 | lcd.drawSprite(_x,_y,8,3,(int *)miner_right); |
| el17arm | 27:e73dd64ef334 | 34 | } |
| el17arm | 27:e73dd64ef334 | 35 | if (_direction == 0) { |
| el17arm | 27:e73dd64ef334 | 36 | lcd.drawSprite(_x,_y,8,3,(int *)miner_left); |
| el17arm | 27:e73dd64ef334 | 37 | } |
| el17arm | 27:e73dd64ef334 | 38 | } |
| el17arm | 27:e73dd64ef334 | 39 | void Miner::miner_land(N5110 &lcd) |
| el17arm | 27:e73dd64ef334 | 40 | { |
| el17arm | 27:e73dd64ef334 | 41 | _jump = (lcd.getPixel(_x+4,_y+8) || lcd.getPixel(_x-1,_y+8)); |
| el17arm | 27:e73dd64ef334 | 42 | |
| el17arm | 27:e73dd64ef334 | 43 | _gravity = !lcd.getPixel(_x,_y+8) && !lcd.getPixel(_x+2, _y+8); |
| el17arm | 27:e73dd64ef334 | 44 | } |
| el17arm | 27:e73dd64ef334 | 45 | |
| el17arm | 27:e73dd64ef334 | 46 | void Miner::miner_move(Direction d, N5110 &lcd) |
| el17arm | 27:e73dd64ef334 | 47 | { |
| el17arm | 27:e73dd64ef334 | 48 | if (d==E || d==NE) { |
| el17arm | 27:e73dd64ef334 | 49 | _x++; |
| el17arm | 27:e73dd64ef334 | 50 | _direction = 1; //chooses right facing sprite |
| el17arm | 27:e73dd64ef334 | 51 | } |
| el17arm | 27:e73dd64ef334 | 52 | if (d==W || d==NW) { |
| el17arm | 30:6d6b48fe3679 | 53 | _x--; |
| el17arm | 27:e73dd64ef334 | 54 | _direction = 0; //chooses left facing sprite |
| el17arm | 27:e73dd64ef334 | 55 | } |
| el17arm | 29:d85886364643 | 56 | if(_x > 81) { |
| el17arm | 27:e73dd64ef334 | 57 | _x=WIDTH-3; |
| el17arm | 29:d85886364643 | 58 | } |
| el17arm | 29:d85886364643 | 59 | if(_x < 0) { |
| el17arm | 27:e73dd64ef334 | 60 | _x=0; |
| el17arm | 29:d85886364643 | 61 | } |
| el17arm | 27:e73dd64ef334 | 62 | } |
| el17arm | 27:e73dd64ef334 | 63 | |
| el17arm | 27:e73dd64ef334 | 64 | void Miner::miner_jump(N5110 &lcd, Gamepad &pad) |
| el17arm | 30:6d6b48fe3679 | 65 | { |
| el17arm | 30:6d6b48fe3679 | 66 | if(pad.check_event(Gamepad::A_PRESSED) && _jump == true) { |
| el17arm | 30:6d6b48fe3679 | 67 | _j_flag = true; |
| el17arm | 30:6d6b48fe3679 | 68 | } |
| el17arm | 30:6d6b48fe3679 | 69 | if(_j_flag == true) { |
| el17arm | 30:6d6b48fe3679 | 70 | _y--; |
| el17arm | 30:6d6b48fe3679 | 71 | _j_counter++; |
| el17arm | 27:e73dd64ef334 | 72 | } |
| el17arm | 30:6d6b48fe3679 | 73 | if(_j_counter > 7) { |
| el17arm | 30:6d6b48fe3679 | 74 | _j_flag = false; |
| el17arm | 30:6d6b48fe3679 | 75 | } |
| el17arm | 30:6d6b48fe3679 | 76 | if(_j_flag == false) { |
| el17arm | 30:6d6b48fe3679 | 77 | _j_counter = 0; |
| el17arm | 30:6d6b48fe3679 | 78 | } |
| el17arm | 30:6d6b48fe3679 | 79 | //printf("counter %i \n", _j_counter); |
| el17arm | 30:6d6b48fe3679 | 80 | //printf("flag %d \n", _j_flag); |
| el17arm | 30:6d6b48fe3679 | 81 | //printf("jumo %d \n", _jump); |
| el17arm | 30:6d6b48fe3679 | 82 | |
| el17arm | 27:e73dd64ef334 | 83 | } |
| el17arm | 27:e73dd64ef334 | 84 | |
| el17arm | 27:e73dd64ef334 | 85 | void Miner::miner_gravity(N5110 &lcd) |
| el17arm | 27:e73dd64ef334 | 86 | { |
| el17arm | 27:e73dd64ef334 | 87 | if(_gravity == 1) { |
| el17arm | 30:6d6b48fe3679 | 88 | _y++; |
| el17arm | 27:e73dd64ef334 | 89 | } |
| el17arm | 29:d85886364643 | 90 | } |
| el17arm | 29:d85886364643 | 91 | |
| el17arm | 29:d85886364643 | 92 | |
| el17arm | 29:d85886364643 | 93 | void Miner::enemy_init(int i, int x, int y, int d) |
| el17arm | 29:d85886364643 | 94 | { |
| el17arm | 29:d85886364643 | 95 | _enem.ex[i] = x; |
| el17arm | 29:d85886364643 | 96 | _enem.ey[i] = y; |
| el17arm | 29:d85886364643 | 97 | _enem.distance[i] = d; |
| el17arm | 29:d85886364643 | 98 | } |
| el17arm | 29:d85886364643 | 99 | |
| el17arm | 29:d85886364643 | 100 | void Miner::enemy_move(int i, double v, N5110 &lcd) |
| el17arm | 29:d85886364643 | 101 | { |
| el17arm | 29:d85886364643 | 102 | lcd.drawSprite(_enem.ex[i],_enem.ey[i],5,3, (int *) enemy); |
| el17arm | 29:d85886364643 | 103 | |
| el17arm | 29:d85886364643 | 104 | if (_enem.eflag[i] == false) { |
| el17arm | 29:d85886364643 | 105 | _enem.ex[i] = _enem.ex[i] + v; |
| el17arm | 29:d85886364643 | 106 | _enem.counter[i]++; |
| el17arm | 29:d85886364643 | 107 | } |
| el17arm | 29:d85886364643 | 108 | if(_enem.counter[i] == _enem.distance[i]) { |
| el17arm | 29:d85886364643 | 109 | _enem.eflag[i] = true; |
| el17arm | 29:d85886364643 | 110 | } |
| el17arm | 29:d85886364643 | 111 | if (_enem.eflag[i] == true) { |
| el17arm | 29:d85886364643 | 112 | _enem.ex[i] = _enem.ex[i] - v; |
| el17arm | 29:d85886364643 | 113 | _enem.counter[i]--; |
| el17arm | 29:d85886364643 | 114 | } |
| el17arm | 29:d85886364643 | 115 | if (_enem.counter[i] == 0) { |
| el17arm | 29:d85886364643 | 116 | _enem.eflag[i] = false; |
| el17arm | 29:d85886364643 | 117 | } |
| el17arm | 29:d85886364643 | 118 | } |
| el17arm | 29:d85886364643 | 119 | |
| el17arm | 29:d85886364643 | 120 | bool Miner::enemy_collision(int i) |
| el17arm | 29:d85886364643 | 121 | { |
| el17arm | 29:d85886364643 | 122 | Vector2D p = get_pos(); |
| el17arm | 30:6d6b48fe3679 | 123 | |
| el17arm | 29:d85886364643 | 124 | if (p.x < _enem.ex[i] + 2 && p.x + 2 > _enem.ex[i] && p.y < _enem.ey[i] + 4 |
| el17arm | 30:6d6b48fe3679 | 125 | && p.y + 9 > _enem.ey[i]) { |
| el17arm | 29:d85886364643 | 126 | return true; |
| el17arm | 29:d85886364643 | 127 | } else { |
| el17arm | 29:d85886364643 | 128 | return false; |
| el17arm | 29:d85886364643 | 129 | } |
| el17arm | 32:5dc769ba4a58 | 130 | } |
| el17arm | 32:5dc769ba4a58 | 131 | |
| el17arm | 32:5dc769ba4a58 | 132 | void Miner::key_collect(int k, int x, int y, N5110 &lcd, Gamepad &pad) |
| el17arm | 32:5dc769ba4a58 | 133 | { |
| el17arm | 32:5dc769ba4a58 | 134 | if(_k.key[k] == false) { |
| el17arm | 32:5dc769ba4a58 | 135 | lcd.drawSprite(x,y,3,4,(int *)key); |
| el17arm | 32:5dc769ba4a58 | 136 | } |
| el17arm | 32:5dc769ba4a58 | 137 | |
| el17arm | 32:5dc769ba4a58 | 138 | if ((lcd.getPixel(x-1,y+2) || lcd.getPixel(x+2,y-1) || lcd.getPixel(x+4,y+1)) && |
| el17arm | 32:5dc769ba4a58 | 139 | _k.key[k] == false) { |
| el17arm | 32:5dc769ba4a58 | 140 | _keys++; |
| el17arm | 32:5dc769ba4a58 | 141 | pad.tone(850,0.1); |
| el17arm | 32:5dc769ba4a58 | 142 | lcd.drawSprite(x,y,3,4,(int *)key_collected); |
| el17arm | 32:5dc769ba4a58 | 143 | _k.key[k]= true; |
| el17arm | 32:5dc769ba4a58 | 144 | } |
| el17arm | 32:5dc769ba4a58 | 145 | } |
| el17arm | 32:5dc769ba4a58 | 146 | |
| el17arm | 32:5dc769ba4a58 | 147 | int Miner::keys_collected() |
| el17arm | 32:5dc769ba4a58 | 148 | { |
| el17arm | 32:5dc769ba4a58 | 149 | int k = _keys; |
| el17arm | 32:5dc769ba4a58 | 150 | return k; |
| el17arm | 32:5dc769ba4a58 | 151 | } |
| el17arm | 32:5dc769ba4a58 | 152 | |
| el17arm | 32:5dc769ba4a58 | 153 | bool Miner::exit_level(int x, int y, N5110 &lcd) |
| el17arm | 32:5dc769ba4a58 | 154 | { |
| el17arm | 32:5dc769ba4a58 | 155 | lcd.drawSprite(x,y,6,5,(int *)door); |
| el17arm | 32:5dc769ba4a58 | 156 | |
| el17arm | 32:5dc769ba4a58 | 157 | if(_keys == 5 && lcd.getPixel(x-1, y+5)) { |
| el17arm | 32:5dc769ba4a58 | 158 | return true; |
| el17arm | 32:5dc769ba4a58 | 159 | } else { |
| el17arm | 32:5dc769ba4a58 | 160 | return false; |
| el17arm | 32:5dc769ba4a58 | 161 | } |
| el17arm | 32:5dc769ba4a58 | 162 | } |
| el17arm | 32:5dc769ba4a58 | 163 | |
| el17arm | 32:5dc769ba4a58 | 164 | bool Miner::trap(int x, int y, N5110 &lcd) |
| el17arm | 32:5dc769ba4a58 | 165 | { |
| el17arm | 32:5dc769ba4a58 | 166 | lcd.drawSprite(x,y,3,3,(int *)spike); |
| el17arm | 32:5dc769ba4a58 | 167 | |
| el17arm | 32:5dc769ba4a58 | 168 | if (lcd.getPixel(x,y-1) || lcd.getPixel(x+2,y-1)) { |
| el17arm | 32:5dc769ba4a58 | 169 | return true; |
| el17arm | 32:5dc769ba4a58 | 170 | } else { |
| el17arm | 32:5dc769ba4a58 | 171 | return false; |
| el17arm | 32:5dc769ba4a58 | 172 | } |
| el17arm | 32:5dc769ba4a58 | 173 | } |
| el17arm | 32:5dc769ba4a58 | 174 | |
| el17arm | 32:5dc769ba4a58 | 175 | void Miner::draw_solid_block(int x, int y, N5110 &lcd) |
| el17arm | 32:5dc769ba4a58 | 176 | { |
| el17arm | 32:5dc769ba4a58 | 177 | lcd.drawSprite(x,y,3,3,(int *)solid_block); |
| el17arm | 32:5dc769ba4a58 | 178 | lcd.drawSprite(x,y,3,3,(int *)solid_block); |
| el17arm | 32:5dc769ba4a58 | 179 | } |
| el17arm | 32:5dc769ba4a58 | 180 | |
| el17arm | 32:5dc769ba4a58 | 181 | void Miner::soft_blocks(int x, int y, N5110 &lcd) |
| el17arm | 32:5dc769ba4a58 | 182 | { |
| el17arm | 32:5dc769ba4a58 | 183 | if(lcd.getPixel(x,y) || lcd.getPixel(x+2,y) || lcd.getPixel(x+4,y)) { |
| el17arm | 32:5dc769ba4a58 | 184 | lcd.drawRect(x,y+1,6,1,FILL_WHITE); |
| el17arm | 32:5dc769ba4a58 | 185 | } else { |
| el17arm | 32:5dc769ba4a58 | 186 | lcd.drawRect(x,y+1,6,1,FILL_BLACK); |
| el17arm | 32:5dc769ba4a58 | 187 | } |
| el17arm | 27:e73dd64ef334 | 188 | } |