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
Imposs/ImpossEngine.cpp@7:35465b3bf586, 2020-05-18 (annotated)
- Committer:
- ll17lrc
- Date:
- Mon May 18 14:28:05 2020 +0000
- Revision:
- 7:35465b3bf586
- Parent:
- 5:5c132202b642
- Child:
- 8:10eb578dd754
Ball moves, collisions detected correctly, levels 1 and 0 work, level finish works;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ll17lrc | 2:823dea76ff2e | 1 | #include "ImpossEngine.h" |
ll17lrc | 4:a9d5fca3b7ba | 2 | |
ll17lrc | 2:823dea76ff2e | 3 | |
ll17lrc | 2:823dea76ff2e | 4 | ImpossEngine::ImpossEngine() |
ll17lrc | 2:823dea76ff2e | 5 | { |
ll17lrc | 2:823dea76ff2e | 6 | |
ll17lrc | 2:823dea76ff2e | 7 | } |
ll17lrc | 2:823dea76ff2e | 8 | |
ll17lrc | 2:823dea76ff2e | 9 | ImpossEngine::~ImpossEngine() |
ll17lrc | 2:823dea76ff2e | 10 | { |
ll17lrc | 2:823dea76ff2e | 11 | |
ll17lrc | 2:823dea76ff2e | 12 | } |
ll17lrc | 2:823dea76ff2e | 13 | |
ll17lrc | 4:a9d5fca3b7ba | 14 | StartMenu _start; |
ll17lrc | 4:a9d5fca3b7ba | 15 | |
ll17lrc | 4:a9d5fca3b7ba | 16 | void ImpossEngine::complete(Gamepad &pad,N5110 &lcd) |
ll17lrc | 3:4494e6928194 | 17 | { |
ll17lrc | 7:35465b3bf586 | 18 | _start.complete(pad,lcd); |
ll17lrc | 7:35465b3bf586 | 19 | int x = 0; |
ll17lrc | 7:35465b3bf586 | 20 | int y = 21; |
ll17lrc | 7:35465b3bf586 | 21 | _ball.init(x,y); |
ll17lrc | 3:4494e6928194 | 22 | } |
ll17lrc | 5:5c132202b642 | 23 | |
ll17lrc | 3:4494e6928194 | 24 | void ImpossEngine::read_input(Gamepad &pad) |
ll17lrc | 2:823dea76ff2e | 25 | { |
ll17lrc | 2:823dea76ff2e | 26 | _d = pad.get_direction(); |
ll17lrc | 2:823dea76ff2e | 27 | _mag = pad.get_mag(); |
ll17lrc | 2:823dea76ff2e | 28 | } |
ll17lrc | 2:823dea76ff2e | 29 | |
ll17lrc | 2:823dea76ff2e | 30 | void ImpossEngine::draw(N5110 &lcd) |
ll17lrc | 2:823dea76ff2e | 31 | { |
ll17lrc | 2:823dea76ff2e | 32 | // draw the elements in the LCD buffer |
ll17lrc | 5:5c132202b642 | 33 | // pitch |
ll17lrc | 2:823dea76ff2e | 34 | |
ll17lrc | 7:35465b3bf586 | 35 | |
ll17lrc | 2:823dea76ff2e | 36 | if (level == 0){ |
ll17lrc | 3:4494e6928194 | 37 | _zero.draw(lcd); |
ll17lrc | 2:823dea76ff2e | 38 | } |
ll17lrc | 2:823dea76ff2e | 39 | |
ll17lrc | 2:823dea76ff2e | 40 | if (level == 1){ |
ll17lrc | 3:4494e6928194 | 41 | _one.draw(lcd); |
ll17lrc | 7:35465b3bf586 | 42 | } |
ll17lrc | 7:35465b3bf586 | 43 | |
ll17lrc | 7:35465b3bf586 | 44 | _ball.update(_d); |
ll17lrc | 5:5c132202b642 | 45 | |
ll17lrc | 5:5c132202b642 | 46 | _ball.draw(lcd); |
ll17lrc | 2:823dea76ff2e | 47 | |
ll17lrc | 2:823dea76ff2e | 48 | } |
ll17lrc | 2:823dea76ff2e | 49 | |
ll17lrc | 7:35465b3bf586 | 50 | void ImpossEngine::update(Gamepad &pad,N5110 &lcd) |
ll17lrc | 2:823dea76ff2e | 51 | { |
ll17lrc | 2:823dea76ff2e | 52 | |
ll17lrc | 4:a9d5fca3b7ba | 53 | check_collision(pad,lcd); |
ll17lrc | 2:823dea76ff2e | 54 | |
ll17lrc | 7:35465b3bf586 | 55 | check_finish(); |
ll17lrc | 2:823dea76ff2e | 56 | } |
ll17lrc | 2:823dea76ff2e | 57 | |
ll17lrc | 4:a9d5fca3b7ba | 58 | void ImpossEngine::set_level_zero(){ |
ll17lrc | 4:a9d5fca3b7ba | 59 | level = 0; |
ll17lrc | 4:a9d5fca3b7ba | 60 | } |
ll17lrc | 4:a9d5fca3b7ba | 61 | |
ll17lrc | 4:a9d5fca3b7ba | 62 | void ImpossEngine::set_level_one(){ |
ll17lrc | 4:a9d5fca3b7ba | 63 | level = 1; |
ll17lrc | 4:a9d5fca3b7ba | 64 | } |
ll17lrc | 4:a9d5fca3b7ba | 65 | |
ll17lrc | 4:a9d5fca3b7ba | 66 | void ImpossEngine::check_collision(Gamepad &pad,N5110 &lcd) |
ll17lrc | 2:823dea76ff2e | 67 | { |
ll17lrc | 2:823dea76ff2e | 68 | int _x = 0; |
ll17lrc | 2:823dea76ff2e | 69 | int _y = 0; |
ll17lrc | 3:4494e6928194 | 70 | int i = 0; |
ll17lrc | 7:35465b3bf586 | 71 | int x_pos = _ball.get_ball_x_pos() - 1; |
ll17lrc | 7:35465b3bf586 | 72 | int y_pos = _ball.get_ball_y_pos() - 1; |
ll17lrc | 2:823dea76ff2e | 73 | bool collision = false; |
ll17lrc | 2:823dea76ff2e | 74 | //check around ball to see if it has made contact with anything |
ll17lrc | 2:823dea76ff2e | 75 | |
ll17lrc | 3:4494e6928194 | 76 | while(i < 4){ |
ll17lrc | 3:4494e6928194 | 77 | |
ll17lrc | 3:4494e6928194 | 78 | i++; |
ll17lrc | 2:823dea76ff2e | 79 | |
ll17lrc | 4:a9d5fca3b7ba | 80 | if(lcd.getPixel(x_pos + _x,y_pos + _y) == 1){ |
ll17lrc | 2:823dea76ff2e | 81 | collision = true; |
ll17lrc | 2:823dea76ff2e | 82 | } |
ll17lrc | 2:823dea76ff2e | 83 | |
ll17lrc | 2:823dea76ff2e | 84 | _x ++; |
ll17lrc | 2:823dea76ff2e | 85 | |
ll17lrc | 2:823dea76ff2e | 86 | } |
ll17lrc | 2:823dea76ff2e | 87 | |
ll17lrc | 3:4494e6928194 | 88 | i = 0; |
ll17lrc | 3:4494e6928194 | 89 | |
ll17lrc | 3:4494e6928194 | 90 | while(i < 4){ |
ll17lrc | 3:4494e6928194 | 91 | |
ll17lrc | 3:4494e6928194 | 92 | i++; |
ll17lrc | 2:823dea76ff2e | 93 | |
ll17lrc | 4:a9d5fca3b7ba | 94 | if(lcd.getPixel(x_pos + _x,y_pos + _y) == 1){ |
ll17lrc | 2:823dea76ff2e | 95 | collision = true; |
ll17lrc | 2:823dea76ff2e | 96 | } |
ll17lrc | 2:823dea76ff2e | 97 | |
ll17lrc | 2:823dea76ff2e | 98 | _y ++; |
ll17lrc | 2:823dea76ff2e | 99 | |
ll17lrc | 2:823dea76ff2e | 100 | } |
ll17lrc | 2:823dea76ff2e | 101 | |
ll17lrc | 3:4494e6928194 | 102 | i = 0; |
ll17lrc | 3:4494e6928194 | 103 | |
ll17lrc | 3:4494e6928194 | 104 | while(i < 4){ |
ll17lrc | 3:4494e6928194 | 105 | |
ll17lrc | 3:4494e6928194 | 106 | i++; |
ll17lrc | 2:823dea76ff2e | 107 | |
ll17lrc | 4:a9d5fca3b7ba | 108 | if(lcd.getPixel(x_pos + _x,y_pos + _y) == 1){ |
ll17lrc | 2:823dea76ff2e | 109 | collision = true; |
ll17lrc | 2:823dea76ff2e | 110 | } |
ll17lrc | 2:823dea76ff2e | 111 | |
ll17lrc | 2:823dea76ff2e | 112 | _x --; |
ll17lrc | 2:823dea76ff2e | 113 | |
ll17lrc | 2:823dea76ff2e | 114 | } |
ll17lrc | 2:823dea76ff2e | 115 | |
ll17lrc | 3:4494e6928194 | 116 | i = 0; |
ll17lrc | 3:4494e6928194 | 117 | |
ll17lrc | 3:4494e6928194 | 118 | while(i < 4){ |
ll17lrc | 3:4494e6928194 | 119 | |
ll17lrc | 3:4494e6928194 | 120 | i++; |
ll17lrc | 2:823dea76ff2e | 121 | |
ll17lrc | 4:a9d5fca3b7ba | 122 | if(lcd.getPixel(x_pos + _x,y_pos + _y) == 1){ |
ll17lrc | 2:823dea76ff2e | 123 | collision = true; |
ll17lrc | 2:823dea76ff2e | 124 | } |
ll17lrc | 2:823dea76ff2e | 125 | |
ll17lrc | 2:823dea76ff2e | 126 | _y --; |
ll17lrc | 2:823dea76ff2e | 127 | |
ll17lrc | 2:823dea76ff2e | 128 | if(collision == true){ |
ll17lrc | 4:a9d5fca3b7ba | 129 | _ball.level_finish(); |
ll17lrc | 2:823dea76ff2e | 130 | } |
ll17lrc | 2:823dea76ff2e | 131 | } |
ll17lrc | 3:4494e6928194 | 132 | } |
ll17lrc | 3:4494e6928194 | 133 | |
ll17lrc | 7:35465b3bf586 | 134 | void ImpossEngine::check_finish() |
ll17lrc | 2:823dea76ff2e | 135 | { |
ll17lrc | 2:823dea76ff2e | 136 | |
ll17lrc | 7:35465b3bf586 | 137 | int pos = _ball.get_ball_x_pos(); |
ll17lrc | 4:a9d5fca3b7ba | 138 | |
ll17lrc | 7:35465b3bf586 | 139 | if(pos == 82){ |
ll17lrc | 3:4494e6928194 | 140 | level++; |
ll17lrc | 4:a9d5fca3b7ba | 141 | _ball.level_finish(); |
ll17lrc | 2:823dea76ff2e | 142 | } |
ll17lrc | 2:823dea76ff2e | 143 | |
ll17lrc | 3:4494e6928194 | 144 | } |