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@11:7a4abe731f9c, 2020-05-25 (annotated)
- Committer:
- ll17lrc
- Date:
- Mon May 25 16:40:59 2020 +0000
- Revision:
- 11:7a4abe731f9c
- Parent:
- 10:df6a496270be
- Child:
- 12:299479b6bb59
Removed level select.; Added level 6
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ll17lrc | 11:7a4abe731f9c | 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 | 10:df6a496270be | 18 | level = 0; |
ll17lrc | 7:35465b3bf586 | 19 | _start.complete(pad,lcd); |
ll17lrc | 7:35465b3bf586 | 20 | int x = 0; |
ll17lrc | 7:35465b3bf586 | 21 | int y = 21; |
ll17lrc | 7:35465b3bf586 | 22 | _ball.init(x,y); |
ll17lrc | 3:4494e6928194 | 23 | } |
ll17lrc | 5:5c132202b642 | 24 | |
ll17lrc | 3:4494e6928194 | 25 | void ImpossEngine::read_input(Gamepad &pad) |
ll17lrc | 2:823dea76ff2e | 26 | { |
ll17lrc | 2:823dea76ff2e | 27 | _d = pad.get_direction(); |
ll17lrc | 2:823dea76ff2e | 28 | _mag = pad.get_mag(); |
ll17lrc | 2:823dea76ff2e | 29 | } |
ll17lrc | 2:823dea76ff2e | 30 | |
ll17lrc | 8:10eb578dd754 | 31 | void ImpossEngine::draw(N5110 &lcd,Gamepad &pad) |
ll17lrc | 2:823dea76ff2e | 32 | { |
ll17lrc | 2:823dea76ff2e | 33 | // draw the elements in the LCD buffer |
ll17lrc | 5:5c132202b642 | 34 | // pitch |
ll17lrc | 2:823dea76ff2e | 35 | |
ll17lrc | 7:35465b3bf586 | 36 | |
ll17lrc | 2:823dea76ff2e | 37 | if (level == 0){ |
ll17lrc | 3:4494e6928194 | 38 | _zero.draw(lcd); |
ll17lrc | 2:823dea76ff2e | 39 | } |
ll17lrc | 2:823dea76ff2e | 40 | |
ll17lrc | 2:823dea76ff2e | 41 | if (level == 1){ |
ll17lrc | 3:4494e6928194 | 42 | _one.draw(lcd); |
ll17lrc | 7:35465b3bf586 | 43 | } |
ll17lrc | 7:35465b3bf586 | 44 | |
ll17lrc | 8:10eb578dd754 | 45 | if (level == 2){ |
ll17lrc | 8:10eb578dd754 | 46 | _two.draw(lcd); |
ll17lrc | 8:10eb578dd754 | 47 | } |
ll17lrc | 8:10eb578dd754 | 48 | |
ll17lrc | 9:e2dd152867d1 | 49 | if (level == 3){ |
ll17lrc | 9:e2dd152867d1 | 50 | _three.draw(lcd); |
ll17lrc | 9:e2dd152867d1 | 51 | } |
ll17lrc | 9:e2dd152867d1 | 52 | |
ll17lrc | 9:e2dd152867d1 | 53 | if (level == 4){ |
ll17lrc | 9:e2dd152867d1 | 54 | _four.draw(lcd); |
ll17lrc | 9:e2dd152867d1 | 55 | } |
ll17lrc | 11:7a4abe731f9c | 56 | |
ll17lrc | 11:7a4abe731f9c | 57 | if (level == 5){ |
ll17lrc | 11:7a4abe731f9c | 58 | _five.draw(lcd); |
ll17lrc | 11:7a4abe731f9c | 59 | } |
ll17lrc | 9:e2dd152867d1 | 60 | |
ll17lrc | 10:df6a496270be | 61 | _ball.update(_d,pad); |
ll17lrc | 5:5c132202b642 | 62 | |
ll17lrc | 5:5c132202b642 | 63 | _ball.draw(lcd); |
ll17lrc | 2:823dea76ff2e | 64 | |
ll17lrc | 2:823dea76ff2e | 65 | } |
ll17lrc | 2:823dea76ff2e | 66 | |
ll17lrc | 7:35465b3bf586 | 67 | void ImpossEngine::update(Gamepad &pad,N5110 &lcd) |
ll17lrc | 2:823dea76ff2e | 68 | { |
ll17lrc | 4:a9d5fca3b7ba | 69 | check_collision(pad,lcd); |
ll17lrc | 2:823dea76ff2e | 70 | |
ll17lrc | 9:e2dd152867d1 | 71 | check_finish(pad); |
ll17lrc | 2:823dea76ff2e | 72 | } |
ll17lrc | 2:823dea76ff2e | 73 | |
ll17lrc | 4:a9d5fca3b7ba | 74 | void ImpossEngine::set_level_zero(){ |
ll17lrc | 4:a9d5fca3b7ba | 75 | level = 0; |
ll17lrc | 4:a9d5fca3b7ba | 76 | } |
ll17lrc | 4:a9d5fca3b7ba | 77 | |
ll17lrc | 4:a9d5fca3b7ba | 78 | void ImpossEngine::set_level_one(){ |
ll17lrc | 4:a9d5fca3b7ba | 79 | level = 1; |
ll17lrc | 4:a9d5fca3b7ba | 80 | } |
ll17lrc | 10:df6a496270be | 81 | |
ll17lrc | 10:df6a496270be | 82 | void ImpossEngine::set_level_two(){ |
ll17lrc | 10:df6a496270be | 83 | level = 2; |
ll17lrc | 10:df6a496270be | 84 | } |
ll17lrc | 10:df6a496270be | 85 | |
ll17lrc | 10:df6a496270be | 86 | void ImpossEngine::set_level_three(){ |
ll17lrc | 10:df6a496270be | 87 | level = 3; |
ll17lrc | 10:df6a496270be | 88 | } |
ll17lrc | 10:df6a496270be | 89 | |
ll17lrc | 10:df6a496270be | 90 | void ImpossEngine::set_level_four(){ |
ll17lrc | 10:df6a496270be | 91 | level = 4; |
ll17lrc | 10:df6a496270be | 92 | } |
ll17lrc | 10:df6a496270be | 93 | |
ll17lrc | 4:a9d5fca3b7ba | 94 | |
ll17lrc | 4:a9d5fca3b7ba | 95 | void ImpossEngine::check_collision(Gamepad &pad,N5110 &lcd) |
ll17lrc | 2:823dea76ff2e | 96 | { |
ll17lrc | 2:823dea76ff2e | 97 | int _x = 0; |
ll17lrc | 2:823dea76ff2e | 98 | int _y = 0; |
ll17lrc | 3:4494e6928194 | 99 | int i = 0; |
ll17lrc | 7:35465b3bf586 | 100 | int x_pos = _ball.get_ball_x_pos() - 1; |
ll17lrc | 7:35465b3bf586 | 101 | int y_pos = _ball.get_ball_y_pos() - 1; |
ll17lrc | 2:823dea76ff2e | 102 | bool collision = false; |
ll17lrc | 2:823dea76ff2e | 103 | //check around ball to see if it has made contact with anything |
ll17lrc | 2:823dea76ff2e | 104 | |
ll17lrc | 8:10eb578dd754 | 105 | while(i < 3){ |
ll17lrc | 3:4494e6928194 | 106 | |
ll17lrc | 3:4494e6928194 | 107 | i++; |
ll17lrc | 2:823dea76ff2e | 108 | |
ll17lrc | 4:a9d5fca3b7ba | 109 | if(lcd.getPixel(x_pos + _x,y_pos + _y) == 1){ |
ll17lrc | 2:823dea76ff2e | 110 | collision = true; |
ll17lrc | 2:823dea76ff2e | 111 | } |
ll17lrc | 2:823dea76ff2e | 112 | |
ll17lrc | 2:823dea76ff2e | 113 | _x ++; |
ll17lrc | 2:823dea76ff2e | 114 | |
ll17lrc | 2:823dea76ff2e | 115 | } |
ll17lrc | 2:823dea76ff2e | 116 | |
ll17lrc | 3:4494e6928194 | 117 | i = 0; |
ll17lrc | 3:4494e6928194 | 118 | |
ll17lrc | 8:10eb578dd754 | 119 | while(i < 3){ |
ll17lrc | 3:4494e6928194 | 120 | |
ll17lrc | 3:4494e6928194 | 121 | i++; |
ll17lrc | 2:823dea76ff2e | 122 | |
ll17lrc | 4:a9d5fca3b7ba | 123 | if(lcd.getPixel(x_pos + _x,y_pos + _y) == 1){ |
ll17lrc | 2:823dea76ff2e | 124 | collision = true; |
ll17lrc | 2:823dea76ff2e | 125 | } |
ll17lrc | 2:823dea76ff2e | 126 | |
ll17lrc | 2:823dea76ff2e | 127 | _y ++; |
ll17lrc | 2:823dea76ff2e | 128 | |
ll17lrc | 2:823dea76ff2e | 129 | } |
ll17lrc | 2:823dea76ff2e | 130 | |
ll17lrc | 3:4494e6928194 | 131 | i = 0; |
ll17lrc | 3:4494e6928194 | 132 | |
ll17lrc | 8:10eb578dd754 | 133 | while(i < 3){ |
ll17lrc | 3:4494e6928194 | 134 | |
ll17lrc | 3:4494e6928194 | 135 | i++; |
ll17lrc | 2:823dea76ff2e | 136 | |
ll17lrc | 4:a9d5fca3b7ba | 137 | if(lcd.getPixel(x_pos + _x,y_pos + _y) == 1){ |
ll17lrc | 2:823dea76ff2e | 138 | collision = true; |
ll17lrc | 2:823dea76ff2e | 139 | } |
ll17lrc | 2:823dea76ff2e | 140 | |
ll17lrc | 2:823dea76ff2e | 141 | _x --; |
ll17lrc | 2:823dea76ff2e | 142 | |
ll17lrc | 2:823dea76ff2e | 143 | } |
ll17lrc | 2:823dea76ff2e | 144 | |
ll17lrc | 3:4494e6928194 | 145 | i = 0; |
ll17lrc | 3:4494e6928194 | 146 | |
ll17lrc | 8:10eb578dd754 | 147 | while(i < 3){ |
ll17lrc | 3:4494e6928194 | 148 | |
ll17lrc | 3:4494e6928194 | 149 | i++; |
ll17lrc | 2:823dea76ff2e | 150 | |
ll17lrc | 4:a9d5fca3b7ba | 151 | if(lcd.getPixel(x_pos + _x,y_pos + _y) == 1){ |
ll17lrc | 2:823dea76ff2e | 152 | collision = true; |
ll17lrc | 2:823dea76ff2e | 153 | } |
ll17lrc | 2:823dea76ff2e | 154 | |
ll17lrc | 2:823dea76ff2e | 155 | _y --; |
ll17lrc | 2:823dea76ff2e | 156 | |
ll17lrc | 2:823dea76ff2e | 157 | if(collision == true){ |
ll17lrc | 11:7a4abe731f9c | 158 | lcd.clear(); |
ll17lrc | 11:7a4abe731f9c | 159 | lcd.printString(" You died! ",0,2); |
ll17lrc | 11:7a4abe731f9c | 160 | lcd.refresh(); |
ll17lrc | 11:7a4abe731f9c | 161 | wait(0.1); |
ll17lrc | 11:7a4abe731f9c | 162 | pad.leds_on(); |
ll17lrc | 11:7a4abe731f9c | 163 | wait(0.2); |
ll17lrc | 11:7a4abe731f9c | 164 | pad.leds_off(); |
ll17lrc | 11:7a4abe731f9c | 165 | wait(0.1); |
ll17lrc | 11:7a4abe731f9c | 166 | pad.leds_on(); |
ll17lrc | 11:7a4abe731f9c | 167 | wait(0.2); |
ll17lrc | 11:7a4abe731f9c | 168 | pad.leds_off(); |
ll17lrc | 11:7a4abe731f9c | 169 | |
ll17lrc | 4:a9d5fca3b7ba | 170 | _ball.level_finish(); |
ll17lrc | 2:823dea76ff2e | 171 | } |
ll17lrc | 2:823dea76ff2e | 172 | } |
ll17lrc | 3:4494e6928194 | 173 | } |
ll17lrc | 3:4494e6928194 | 174 | |
ll17lrc | 9:e2dd152867d1 | 175 | void ImpossEngine::check_finish(Gamepad &pad) |
ll17lrc | 2:823dea76ff2e | 176 | { |
ll17lrc | 2:823dea76ff2e | 177 | |
ll17lrc | 7:35465b3bf586 | 178 | int pos = _ball.get_ball_x_pos(); |
ll17lrc | 4:a9d5fca3b7ba | 179 | |
ll17lrc | 9:e2dd152867d1 | 180 | if(pos >= 82){ |
ll17lrc | 3:4494e6928194 | 181 | level++; |
ll17lrc | 4:a9d5fca3b7ba | 182 | _ball.level_finish(); |
ll17lrc | 2:823dea76ff2e | 183 | } |
ll17lrc | 9:e2dd152867d1 | 184 | |
ll17lrc | 9:e2dd152867d1 | 185 | if(pad.Y_pressed() == true){ |
ll17lrc | 9:e2dd152867d1 | 186 | level++; |
ll17lrc | 9:e2dd152867d1 | 187 | } |
ll17lrc | 9:e2dd152867d1 | 188 | if(pad.X_pressed() == true){ |
ll17lrc | 9:e2dd152867d1 | 189 | level--; |
ll17lrc | 9:e2dd152867d1 | 190 | } |
ll17lrc | 2:823dea76ff2e | 191 | |
ll17lrc | 3:4494e6928194 | 192 | } |