ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_ll17lrc_v2

Dependencies:   mbed

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?

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