ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_ll17lrc_v2

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }