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@13:fd290d2fd917, 2020-05-26 (annotated)
- Committer:
- ll17lrc
- Date:
- Tue May 26 22:41:23 2020 +0000
- Revision:
- 13:fd290d2fd917
- Parent:
- 12:299479b6bb59
Final Submission. I have read and agreed with Statement of Academic Integrity.
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 | 13:fd290d2fd917 | 16 | //displays the start menu, initialises the ball and sets to level zero |
ll17lrc | 4:a9d5fca3b7ba | 17 | void ImpossEngine::complete(Gamepad &pad,N5110 &lcd) |
ll17lrc | 3:4494e6928194 | 18 | { |
ll17lrc | 10:df6a496270be | 19 | level = 0; |
ll17lrc | 7:35465b3bf586 | 20 | _start.complete(pad,lcd); |
ll17lrc | 7:35465b3bf586 | 21 | int x = 0; |
ll17lrc | 7:35465b3bf586 | 22 | int y = 21; |
ll17lrc | 7:35465b3bf586 | 23 | _ball.init(x,y); |
ll17lrc | 3:4494e6928194 | 24 | } |
ll17lrc | 5:5c132202b642 | 25 | |
ll17lrc | 13:fd290d2fd917 | 26 | //reads user input from the gamepad |
ll17lrc | 3:4494e6928194 | 27 | void ImpossEngine::read_input(Gamepad &pad) |
ll17lrc | 2:823dea76ff2e | 28 | { |
ll17lrc | 2:823dea76ff2e | 29 | _d = pad.get_direction(); |
ll17lrc | 2:823dea76ff2e | 30 | _mag = pad.get_mag(); |
ll17lrc | 2:823dea76ff2e | 31 | } |
ll17lrc | 2:823dea76ff2e | 32 | |
ll17lrc | 13:fd290d2fd917 | 33 | //Used to set the level to zero |
ll17lrc | 13:fd290d2fd917 | 34 | void ImpossEngine::set_level_zero() |
ll17lrc | 13:fd290d2fd917 | 35 | { |
ll17lrc | 13:fd290d2fd917 | 36 | level = 0; |
ll17lrc | 13:fd290d2fd917 | 37 | } |
ll17lrc | 13:fd290d2fd917 | 38 | |
ll17lrc | 13:fd290d2fd917 | 39 | //Draws the levels, obstacles and ball |
ll17lrc | 8:10eb578dd754 | 40 | void ImpossEngine::draw(N5110 &lcd,Gamepad &pad) |
ll17lrc | 2:823dea76ff2e | 41 | { |
ll17lrc | 2:823dea76ff2e | 42 | // draw the elements in the LCD buffer |
ll17lrc | 5:5c132202b642 | 43 | // pitch |
ll17lrc | 2:823dea76ff2e | 44 | |
ll17lrc | 7:35465b3bf586 | 45 | |
ll17lrc | 2:823dea76ff2e | 46 | if (level == 0){ |
ll17lrc | 3:4494e6928194 | 47 | _zero.draw(lcd); |
ll17lrc | 2:823dea76ff2e | 48 | } |
ll17lrc | 2:823dea76ff2e | 49 | |
ll17lrc | 2:823dea76ff2e | 50 | if (level == 1){ |
ll17lrc | 3:4494e6928194 | 51 | _one.draw(lcd); |
ll17lrc | 7:35465b3bf586 | 52 | } |
ll17lrc | 7:35465b3bf586 | 53 | |
ll17lrc | 8:10eb578dd754 | 54 | if (level == 2){ |
ll17lrc | 8:10eb578dd754 | 55 | _two.draw(lcd); |
ll17lrc | 8:10eb578dd754 | 56 | } |
ll17lrc | 8:10eb578dd754 | 57 | |
ll17lrc | 9:e2dd152867d1 | 58 | if (level == 3){ |
ll17lrc | 9:e2dd152867d1 | 59 | _three.draw(lcd); |
ll17lrc | 9:e2dd152867d1 | 60 | } |
ll17lrc | 9:e2dd152867d1 | 61 | |
ll17lrc | 9:e2dd152867d1 | 62 | if (level == 4){ |
ll17lrc | 9:e2dd152867d1 | 63 | _four.draw(lcd); |
ll17lrc | 9:e2dd152867d1 | 64 | } |
ll17lrc | 11:7a4abe731f9c | 65 | |
ll17lrc | 11:7a4abe731f9c | 66 | if (level == 5){ |
ll17lrc | 11:7a4abe731f9c | 67 | _five.draw(lcd); |
ll17lrc | 11:7a4abe731f9c | 68 | } |
ll17lrc | 12:299479b6bb59 | 69 | |
ll17lrc | 12:299479b6bb59 | 70 | if (level == 6){ |
ll17lrc | 12:299479b6bb59 | 71 | while(1){ |
ll17lrc | 12:299479b6bb59 | 72 | lcd.clear(); |
ll17lrc | 12:299479b6bb59 | 73 | lcd.printString(" Well done! ",0,0); |
ll17lrc | 12:299479b6bb59 | 74 | lcd.printString(" You beat all ",0,1); |
ll17lrc | 12:299479b6bb59 | 75 | lcd.printString("of the levels!",0,2); |
ll17lrc | 12:299479b6bb59 | 76 | lcd.printString("Press reset to",0,3); |
ll17lrc | 12:299479b6bb59 | 77 | lcd.printString(" try again! ",0,4); |
ll17lrc | 12:299479b6bb59 | 78 | pad.leds_on(); |
ll17lrc | 12:299479b6bb59 | 79 | wait(0.15); |
ll17lrc | 12:299479b6bb59 | 80 | pad.leds_off(); |
ll17lrc | 12:299479b6bb59 | 81 | wait(0.15); |
ll17lrc | 12:299479b6bb59 | 82 | lcd.refresh(); |
ll17lrc | 12:299479b6bb59 | 83 | } |
ll17lrc | 12:299479b6bb59 | 84 | } |
ll17lrc | 9:e2dd152867d1 | 85 | |
ll17lrc | 10:df6a496270be | 86 | _ball.update(_d,pad); |
ll17lrc | 5:5c132202b642 | 87 | |
ll17lrc | 5:5c132202b642 | 88 | _ball.draw(lcd); |
ll17lrc | 2:823dea76ff2e | 89 | |
ll17lrc | 2:823dea76ff2e | 90 | } |
ll17lrc | 2:823dea76ff2e | 91 | |
ll17lrc | 13:fd290d2fd917 | 92 | //Updates all parameters, checks for collisions and checks to see if the level |
ll17lrc | 13:fd290d2fd917 | 93 | //has been completed |
ll17lrc | 7:35465b3bf586 | 94 | void ImpossEngine::update(Gamepad &pad,N5110 &lcd) |
ll17lrc | 2:823dea76ff2e | 95 | { |
ll17lrc | 4:a9d5fca3b7ba | 96 | check_collision(pad,lcd); |
ll17lrc | 2:823dea76ff2e | 97 | |
ll17lrc | 9:e2dd152867d1 | 98 | check_finish(pad); |
ll17lrc | 13:fd290d2fd917 | 99 | } |
ll17lrc | 2:823dea76ff2e | 100 | |
ll17lrc | 13:fd290d2fd917 | 101 | //Checks every pixel around the ball, if any are "on"(1) then that is classed |
ll17lrc | 13:fd290d2fd917 | 102 | //as a collision |
ll17lrc | 4:a9d5fca3b7ba | 103 | void ImpossEngine::check_collision(Gamepad &pad,N5110 &lcd) |
ll17lrc | 2:823dea76ff2e | 104 | { |
ll17lrc | 2:823dea76ff2e | 105 | int _x = 0; |
ll17lrc | 2:823dea76ff2e | 106 | int _y = 0; |
ll17lrc | 3:4494e6928194 | 107 | int i = 0; |
ll17lrc | 7:35465b3bf586 | 108 | int x_pos = _ball.get_ball_x_pos() - 1; |
ll17lrc | 7:35465b3bf586 | 109 | int y_pos = _ball.get_ball_y_pos() - 1; |
ll17lrc | 2:823dea76ff2e | 110 | bool collision = false; |
ll17lrc | 2:823dea76ff2e | 111 | //check around ball to see if it has made contact with anything |
ll17lrc | 2:823dea76ff2e | 112 | |
ll17lrc | 8:10eb578dd754 | 113 | while(i < 3){ |
ll17lrc | 3:4494e6928194 | 114 | |
ll17lrc | 3:4494e6928194 | 115 | i++; |
ll17lrc | 2:823dea76ff2e | 116 | |
ll17lrc | 4:a9d5fca3b7ba | 117 | if(lcd.getPixel(x_pos + _x,y_pos + _y) == 1){ |
ll17lrc | 2:823dea76ff2e | 118 | collision = true; |
ll17lrc | 2:823dea76ff2e | 119 | } |
ll17lrc | 2:823dea76ff2e | 120 | |
ll17lrc | 2:823dea76ff2e | 121 | _x ++; |
ll17lrc | 2:823dea76ff2e | 122 | |
ll17lrc | 2:823dea76ff2e | 123 | } |
ll17lrc | 2:823dea76ff2e | 124 | |
ll17lrc | 3:4494e6928194 | 125 | i = 0; |
ll17lrc | 3:4494e6928194 | 126 | |
ll17lrc | 8:10eb578dd754 | 127 | while(i < 3){ |
ll17lrc | 3:4494e6928194 | 128 | |
ll17lrc | 3:4494e6928194 | 129 | i++; |
ll17lrc | 2:823dea76ff2e | 130 | |
ll17lrc | 4:a9d5fca3b7ba | 131 | if(lcd.getPixel(x_pos + _x,y_pos + _y) == 1){ |
ll17lrc | 2:823dea76ff2e | 132 | collision = true; |
ll17lrc | 2:823dea76ff2e | 133 | } |
ll17lrc | 2:823dea76ff2e | 134 | |
ll17lrc | 2:823dea76ff2e | 135 | _y ++; |
ll17lrc | 2:823dea76ff2e | 136 | |
ll17lrc | 2:823dea76ff2e | 137 | } |
ll17lrc | 2:823dea76ff2e | 138 | |
ll17lrc | 3:4494e6928194 | 139 | i = 0; |
ll17lrc | 3:4494e6928194 | 140 | |
ll17lrc | 8:10eb578dd754 | 141 | while(i < 3){ |
ll17lrc | 3:4494e6928194 | 142 | |
ll17lrc | 3:4494e6928194 | 143 | i++; |
ll17lrc | 2:823dea76ff2e | 144 | |
ll17lrc | 4:a9d5fca3b7ba | 145 | if(lcd.getPixel(x_pos + _x,y_pos + _y) == 1){ |
ll17lrc | 2:823dea76ff2e | 146 | collision = true; |
ll17lrc | 2:823dea76ff2e | 147 | } |
ll17lrc | 2:823dea76ff2e | 148 | |
ll17lrc | 2:823dea76ff2e | 149 | _x --; |
ll17lrc | 2:823dea76ff2e | 150 | |
ll17lrc | 2:823dea76ff2e | 151 | } |
ll17lrc | 2:823dea76ff2e | 152 | |
ll17lrc | 3:4494e6928194 | 153 | i = 0; |
ll17lrc | 3:4494e6928194 | 154 | |
ll17lrc | 8:10eb578dd754 | 155 | while(i < 3){ |
ll17lrc | 3:4494e6928194 | 156 | |
ll17lrc | 3:4494e6928194 | 157 | i++; |
ll17lrc | 2:823dea76ff2e | 158 | |
ll17lrc | 4:a9d5fca3b7ba | 159 | if(lcd.getPixel(x_pos + _x,y_pos + _y) == 1){ |
ll17lrc | 2:823dea76ff2e | 160 | collision = true; |
ll17lrc | 2:823dea76ff2e | 161 | } |
ll17lrc | 2:823dea76ff2e | 162 | |
ll17lrc | 2:823dea76ff2e | 163 | _y --; |
ll17lrc | 2:823dea76ff2e | 164 | |
ll17lrc | 13:fd290d2fd917 | 165 | //death sequence |
ll17lrc | 2:823dea76ff2e | 166 | if(collision == true){ |
ll17lrc | 11:7a4abe731f9c | 167 | lcd.clear(); |
ll17lrc | 11:7a4abe731f9c | 168 | lcd.printString(" You died! ",0,2); |
ll17lrc | 11:7a4abe731f9c | 169 | lcd.refresh(); |
ll17lrc | 11:7a4abe731f9c | 170 | wait(0.1); |
ll17lrc | 11:7a4abe731f9c | 171 | pad.leds_on(); |
ll17lrc | 11:7a4abe731f9c | 172 | wait(0.2); |
ll17lrc | 11:7a4abe731f9c | 173 | pad.leds_off(); |
ll17lrc | 11:7a4abe731f9c | 174 | wait(0.1); |
ll17lrc | 11:7a4abe731f9c | 175 | pad.leds_on(); |
ll17lrc | 11:7a4abe731f9c | 176 | wait(0.2); |
ll17lrc | 11:7a4abe731f9c | 177 | pad.leds_off(); |
ll17lrc | 11:7a4abe731f9c | 178 | |
ll17lrc | 13:fd290d2fd917 | 179 | //resets ball to start of level if a collision has been detected |
ll17lrc | 4:a9d5fca3b7ba | 180 | _ball.level_finish(); |
ll17lrc | 2:823dea76ff2e | 181 | } |
ll17lrc | 2:823dea76ff2e | 182 | } |
ll17lrc | 3:4494e6928194 | 183 | } |
ll17lrc | 3:4494e6928194 | 184 | |
ll17lrc | 13:fd290d2fd917 | 185 | //Checks to see if the ball has reached the end of the level, if it has, |
ll17lrc | 13:fd290d2fd917 | 186 | //increases the value of the level and sets the ball back to the beginning of |
ll17lrc | 13:fd290d2fd917 | 187 | //the level |
ll17lrc | 9:e2dd152867d1 | 188 | void ImpossEngine::check_finish(Gamepad &pad) |
ll17lrc | 2:823dea76ff2e | 189 | { |
ll17lrc | 2:823dea76ff2e | 190 | |
ll17lrc | 7:35465b3bf586 | 191 | int pos = _ball.get_ball_x_pos(); |
ll17lrc | 4:a9d5fca3b7ba | 192 | |
ll17lrc | 9:e2dd152867d1 | 193 | if(pos >= 82){ |
ll17lrc | 3:4494e6928194 | 194 | level++; |
ll17lrc | 4:a9d5fca3b7ba | 195 | _ball.level_finish(); |
ll17lrc | 2:823dea76ff2e | 196 | } |
ll17lrc | 3:4494e6928194 | 197 | } |