ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el18jgb

Dependencies:   mbed

Committer:
el18jgb
Date:
Mon May 18 13:32:55 2020 +0000
Revision:
11:9661467412cf
Parent:
10:6c574b8524df
Child:
12:e3620d33629c
can't see myself on the code website depite many comitts, trying publish to see if thats why;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el18jgb 5:c37f4ed2cad3 1
el18jgb 5:c37f4ed2cad3 2 #include "Eng.h"
el18jgb 4:6f898b000797 3 Eng::Eng()
el18jgb 4:6f898b000797 4 {
el18jgb 4:6f898b000797 5
el18jgb 4:6f898b000797 6 }
el18jgb 4:6f898b000797 7
el18jgb 4:6f898b000797 8 Eng::~Eng()
el18jgb 4:6f898b000797 9 {
el18jgb 4:6f898b000797 10
el18jgb 4:6f898b000797 11 }
el18jgb 4:6f898b000797 12 // objects
el18jgb 5:c37f4ed2cad3 13 //Gamepad pad;
el18jgb 5:c37f4ed2cad3 14 //N5110 lcd;
el18jgb 5:c37f4ed2cad3 15 Aim aim;
el18jgb 4:6f898b000797 16 Heston heston;
el18jgb 7:04a7826ff7e4 17 Pup pup;
el18jgb 9:2836fc3d9ede 18 Spikes spikes;
el18jgb 4:6f898b000797 19
el18jgb 4:6f898b000797 20
el18jgb 5:c37f4ed2cad3 21 void Eng::init()
el18jgb 5:c37f4ed2cad3 22 {
el18jgb 5:c37f4ed2cad3 23
el18jgb 5:c37f4ed2cad3 24 aim.init();
el18jgb 5:c37f4ed2cad3 25 heston.init();
el18jgb 7:04a7826ff7e4 26 pup.init();
el18jgb 9:2836fc3d9ede 27 spikes.init();
el18jgb 7:04a7826ff7e4 28 pupon = 0;
el18jgb 7:04a7826ff7e4 29 _tok = 0;
el18jgb 7:04a7826ff7e4 30 flag = true;
el18jgb 9:2836fc3d9ede 31 spike_f =false;
el18jgb 4:6f898b000797 32
el18jgb 5:c37f4ed2cad3 33
el18jgb 5:c37f4ed2cad3 34 }
el18jgb 5:c37f4ed2cad3 35
el18jgb 5:c37f4ed2cad3 36 //void Eng::read_input(Gamepad &pad);
el18jgb 8:0b9a824c75fe 37 void Eng::update(Gamepad &pad, int fire, N5110 &lcd)
el18jgb 4:6f898b000797 38 {
el18jgb 8:0b9a824c75fe 39 int shot = fire;
el18jgb 8:0b9a824c75fe 40 if (shot == 1){
el18jgb 6:d560ecc21ae6 41 aim.draw(lcd, fire);
el18jgb 6:d560ecc21ae6 42 lcd.refresh();
el18jgb 10:6c574b8524df 43 check_hit(pad, lcd);
el18jgb 6:d560ecc21ae6 44 }
el18jgb 7:04a7826ff7e4 45
el18jgb 7:04a7826ff7e4 46 int c_score = heston.checkscore();
el18jgb 7:04a7826ff7e4 47 if (c_score%5 == 0 && flag == false){
el18jgb 7:04a7826ff7e4 48 flag = true;
el18jgb 7:04a7826ff7e4 49 powerup(lcd, pad);
el18jgb 7:04a7826ff7e4 50 }
el18jgb 7:04a7826ff7e4 51 if (c_score%5 == 1){
el18jgb 7:04a7826ff7e4 52 flag = false;
el18jgb 7:04a7826ff7e4 53 }
el18jgb 7:04a7826ff7e4 54
el18jgb 8:0b9a824c75fe 55 int strikes = heston.checkstrike();
el18jgb 8:0b9a824c75fe 56
el18jgb 7:04a7826ff7e4 57
el18jgb 5:c37f4ed2cad3 58 heston.update(pad);
el18jgb 5:c37f4ed2cad3 59 aim.update(pad);
el18jgb 9:2836fc3d9ede 60
el18jgb 9:2836fc3d9ede 61 if (spike_f == true){
el18jgb 9:2836fc3d9ede 62 //spikes.update();
el18jgb 9:2836fc3d9ede 63 _s1.update();
el18jgb 9:2836fc3d9ede 64 _s2.update();
el18jgb 10:6c574b8524df 65 check_s_hit(pad);
el18jgb 9:2836fc3d9ede 66 }
el18jgb 5:c37f4ed2cad3 67 }
el18jgb 5:c37f4ed2cad3 68
el18jgb 5:c37f4ed2cad3 69 void Eng::draw(N5110 &lcd)
el18jgb 5:c37f4ed2cad3 70 {
el18jgb 5:c37f4ed2cad3 71 heston.draw(lcd);
el18jgb 6:d560ecc21ae6 72 aim.draw(lcd, 0);
el18jgb 7:04a7826ff7e4 73 if (pupon == 1){
el18jgb 7:04a7826ff7e4 74 pup.draw(lcd, 0);
el18jgb 7:04a7826ff7e4 75 }
el18jgb 9:2836fc3d9ede 76 if (spike_f == true){
el18jgb 9:2836fc3d9ede 77 _s1.draw(lcd);
el18jgb 9:2836fc3d9ede 78 _s2.draw(lcd);
el18jgb 9:2836fc3d9ede 79 }
el18jgb 10:6c574b8524df 80
el18jgb 4:6f898b000797 81 }
el18jgb 5:c37f4ed2cad3 82
el18jgb 10:6c574b8524df 83 void Eng::check_hit(Gamepad &pad, N5110 &lcd)
el18jgb 5:c37f4ed2cad3 84 {
el18jgb 5:c37f4ed2cad3 85 Vector2D aim_pos = aim.get_pos();
el18jgb 5:c37f4ed2cad3 86 Vector2D h1_pos = heston.get_pos();
el18jgb 7:04a7826ff7e4 87 Vector2D pup_pos = pup.get_pos();
el18jgb 5:c37f4ed2cad3 88
el18jgb 5:c37f4ed2cad3 89 if (
el18jgb 5:c37f4ed2cad3 90 (aim_pos.y >= h1_pos.y) && //top
el18jgb 10:6c574b8524df 91 (aim_pos.y <= h1_pos.y + 12) && //bottom
el18jgb 5:c37f4ed2cad3 92 (aim_pos.x >= h1_pos.x) && //left
el18jgb 10:6c574b8524df 93 (aim_pos.x <= h1_pos.x + 11) //right
el18jgb 5:c37f4ed2cad3 94 ) {
el18jgb 5:c37f4ed2cad3 95 heston.hit(pad);
el18jgb 11:9661467412cf 96 print_score(lcd);
el18jgb 11:9661467412cf 97 lcd.refresh();
el18jgb 7:04a7826ff7e4 98 }
el18jgb 8:0b9a824c75fe 99 else if (
el18jgb 7:04a7826ff7e4 100 (pupon == 1) &&
el18jgb 7:04a7826ff7e4 101 (aim_pos.y >= pup_pos.y) && //top
el18jgb 7:04a7826ff7e4 102 (aim_pos.y <= pup_pos.y + 8) && //bottom
el18jgb 7:04a7826ff7e4 103 (aim_pos.x >= pup_pos.x) && //left
el18jgb 7:04a7826ff7e4 104 (aim_pos.x <= pup_pos.x + 8) //right
el18jgb 7:04a7826ff7e4 105 ) {
el18jgb 7:04a7826ff7e4 106 pupon = 0;
el18jgb 7:04a7826ff7e4 107 heston.set_speed(0);
el18jgb 7:04a7826ff7e4 108 pad.led(2,1);
el18jgb 7:04a7826ff7e4 109 pad.led(5,1);
el18jgb 7:04a7826ff7e4 110 }
el18jgb 7:04a7826ff7e4 111 else {
el18jgb 7:04a7826ff7e4 112 heston.miss(pad);
el18jgb 11:9661467412cf 113 print_strike(lcd);
el18jgb 10:6c574b8524df 114 lcd.refresh();
el18jgb 7:04a7826ff7e4 115 }
el18jgb 8:0b9a824c75fe 116 wait(0.4);
el18jgb 8:0b9a824c75fe 117 pad.leds_off();
el18jgb 5:c37f4ed2cad3 118 }
el18jgb 5:c37f4ed2cad3 119
el18jgb 7:04a7826ff7e4 120 void Eng::powerup(N5110 &lcd, Gamepad &pad)
el18jgb 7:04a7826ff7e4 121 {
el18jgb 7:04a7826ff7e4 122 Vector2D aim_pos = aim.get_pos();
el18jgb 7:04a7826ff7e4 123 int x = aim_pos.x;
el18jgb 7:04a7826ff7e4 124 int y = aim_pos.y;
el18jgb 7:04a7826ff7e4 125 pup.position(x, y);
el18jgb 7:04a7826ff7e4 126 pupon = 1;
el18jgb 5:c37f4ed2cad3 127 }
el18jgb 7:04a7826ff7e4 128
el18jgb 7:04a7826ff7e4 129 void Eng::tik()
el18jgb 7:04a7826ff7e4 130 {
el18jgb 7:04a7826ff7e4 131 _tok = _tok + 1;
el18jgb 7:04a7826ff7e4 132 int rem = _tok%50;
el18jgb 7:04a7826ff7e4 133 if (rem == 0){
el18jgb 7:04a7826ff7e4 134 heston.set_speed(1);
el18jgb 9:2836fc3d9ede 135 spike_f = true;
el18jgb 9:2836fc3d9ede 136 _s1.position(1);
el18jgb 9:2836fc3d9ede 137 _s2.position(2);
el18jgb 7:04a7826ff7e4 138 }
el18jgb 7:04a7826ff7e4 139 }
el18jgb 8:0b9a824c75fe 140
el18jgb 11:9661467412cf 141 void Eng::print_strike(N5110 &lcd)
el18jgb 11:9661467412cf 142 {
el18jgb 11:9661467412cf 143 // get scores from paddles
el18jgb 11:9661467412cf 144 int g_score = heston.checkstrike();
el18jgb 11:9661467412cf 145
el18jgb 11:9661467412cf 146 // print to LCD i
el18jgb 11:9661467412cf 147 char buffer1[14];
el18jgb 11:9661467412cf 148 sprintf(buffer1,"%2d",g_score);
el18jgb 11:9661467412cf 149 lcd.printString(buffer1,1,1); // font is 8 wide, so leave 4 pixel gape from middle assuming two digits
el18jgb 11:9661467412cf 150 }
el18jgb 11:9661467412cf 151
el18jgb 8:0b9a824c75fe 152 void Eng::print_score(N5110 &lcd)
el18jgb 8:0b9a824c75fe 153 {
el18jgb 8:0b9a824c75fe 154 // get scores from paddles
el18jgb 11:9661467412cf 155 int g_score = heston.checkscore();
el18jgb 8:0b9a824c75fe 156
el18jgb 8:0b9a824c75fe 157 // print to LCD i
el18jgb 8:0b9a824c75fe 158 char buffer1[14];
el18jgb 8:0b9a824c75fe 159 sprintf(buffer1,"%2d",g_score);
el18jgb 8:0b9a824c75fe 160 lcd.printString(buffer1,1,1); // font is 8 wide, so leave 4 pixel gape from middle assuming two digits
el18jgb 9:2836fc3d9ede 161 }
el18jgb 9:2836fc3d9ede 162
el18jgb 10:6c574b8524df 163 void Eng::check_s_hit(Gamepad &pad){
el18jgb 9:2836fc3d9ede 164 Vector2D s1_pos = _s1.get_pos();
el18jgb 9:2836fc3d9ede 165 Vector2D s2_pos = _s2.get_pos();
el18jgb 9:2836fc3d9ede 166 Vector2D aim_pos = aim.get_pos();
el18jgb 9:2836fc3d9ede 167
el18jgb 9:2836fc3d9ede 168 if (
el18jgb 9:2836fc3d9ede 169 (aim_pos.y >= s1_pos.y) && //top
el18jgb 9:2836fc3d9ede 170 (aim_pos.y <= s1_pos.y + 4) && //bottom
el18jgb 9:2836fc3d9ede 171 (aim_pos.x >= s1_pos.x) && //left
el18jgb 9:2836fc3d9ede 172 (aim_pos.x <= s1_pos.x + 4) //right
el18jgb 9:2836fc3d9ede 173 ) {
el18jgb 9:2836fc3d9ede 174 spike_f = false;
el18jgb 10:6c574b8524df 175 spikes.hit(pad);
el18jgb 9:2836fc3d9ede 176 }
el18jgb 9:2836fc3d9ede 177 if (
el18jgb 9:2836fc3d9ede 178 (aim_pos.y >= s2_pos.y) && //top
el18jgb 9:2836fc3d9ede 179 (aim_pos.y <= s2_pos.y + 4) && //bottom
el18jgb 9:2836fc3d9ede 180 (aim_pos.x >= s2_pos.x) && //left
el18jgb 9:2836fc3d9ede 181 (aim_pos.x <= s2_pos.x + 4) //right
el18jgb 9:2836fc3d9ede 182 ) {
el18jgb 9:2836fc3d9ede 183 spike_f = false;
el18jgb 10:6c574b8524df 184 spikes.hit(pad);
el18jgb 9:2836fc3d9ede 185 }
el18jgb 9:2836fc3d9ede 186
el18jgb 9:2836fc3d9ede 187
el18jgb 9:2836fc3d9ede 188 }