ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_ll17lrc_v2

Dependencies:   mbed

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?

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