ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el18jgb

Dependencies:   mbed

Committer:
el18jgb
Date:
Mon May 18 13:12:35 2020 +0000
Revision:
10:6c574b8524df
Parent:
9:2836fc3d9ede
Child:
11:9661467412cf
spikes /working better;

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 7:04a7826ff7e4 96 }
el18jgb 8:0b9a824c75fe 97 else if (
el18jgb 7:04a7826ff7e4 98 (pupon == 1) &&
el18jgb 7:04a7826ff7e4 99 (aim_pos.y >= pup_pos.y) && //top
el18jgb 7:04a7826ff7e4 100 (aim_pos.y <= pup_pos.y + 8) && //bottom
el18jgb 7:04a7826ff7e4 101 (aim_pos.x >= pup_pos.x) && //left
el18jgb 7:04a7826ff7e4 102 (aim_pos.x <= pup_pos.x + 8) //right
el18jgb 7:04a7826ff7e4 103 ) {
el18jgb 7:04a7826ff7e4 104 pupon = 0;
el18jgb 7:04a7826ff7e4 105 heston.set_speed(0);
el18jgb 7:04a7826ff7e4 106 pad.led(2,1);
el18jgb 7:04a7826ff7e4 107 pad.led(5,1);
el18jgb 7:04a7826ff7e4 108 }
el18jgb 7:04a7826ff7e4 109 else {
el18jgb 7:04a7826ff7e4 110 heston.miss(pad);
el18jgb 10:6c574b8524df 111 print_score(lcd);
el18jgb 10:6c574b8524df 112 lcd.refresh();
el18jgb 7:04a7826ff7e4 113 }
el18jgb 8:0b9a824c75fe 114 wait(0.4);
el18jgb 8:0b9a824c75fe 115 pad.leds_off();
el18jgb 5:c37f4ed2cad3 116 }
el18jgb 5:c37f4ed2cad3 117
el18jgb 7:04a7826ff7e4 118 void Eng::powerup(N5110 &lcd, Gamepad &pad)
el18jgb 7:04a7826ff7e4 119 {
el18jgb 7:04a7826ff7e4 120 Vector2D aim_pos = aim.get_pos();
el18jgb 7:04a7826ff7e4 121 int x = aim_pos.x;
el18jgb 7:04a7826ff7e4 122 int y = aim_pos.y;
el18jgb 7:04a7826ff7e4 123 pup.position(x, y);
el18jgb 7:04a7826ff7e4 124 pupon = 1;
el18jgb 5:c37f4ed2cad3 125 }
el18jgb 7:04a7826ff7e4 126
el18jgb 7:04a7826ff7e4 127 void Eng::tik()
el18jgb 7:04a7826ff7e4 128 {
el18jgb 7:04a7826ff7e4 129 _tok = _tok + 1;
el18jgb 7:04a7826ff7e4 130 int rem = _tok%50;
el18jgb 7:04a7826ff7e4 131 if (rem == 0){
el18jgb 7:04a7826ff7e4 132 heston.set_speed(1);
el18jgb 9:2836fc3d9ede 133 spike_f = true;
el18jgb 9:2836fc3d9ede 134 _s1.position(1);
el18jgb 9:2836fc3d9ede 135 _s2.position(2);
el18jgb 7:04a7826ff7e4 136 }
el18jgb 7:04a7826ff7e4 137 }
el18jgb 8:0b9a824c75fe 138
el18jgb 8:0b9a824c75fe 139 void Eng::print_score(N5110 &lcd)
el18jgb 8:0b9a824c75fe 140 {
el18jgb 8:0b9a824c75fe 141 // get scores from paddles
el18jgb 8:0b9a824c75fe 142 int g_score = heston.checkstrike();
el18jgb 8:0b9a824c75fe 143
el18jgb 8:0b9a824c75fe 144 // print to LCD i
el18jgb 8:0b9a824c75fe 145 char buffer1[14];
el18jgb 8:0b9a824c75fe 146 sprintf(buffer1,"%2d",g_score);
el18jgb 8:0b9a824c75fe 147 lcd.printString(buffer1,1,1); // font is 8 wide, so leave 4 pixel gape from middle assuming two digits
el18jgb 9:2836fc3d9ede 148 }
el18jgb 9:2836fc3d9ede 149
el18jgb 10:6c574b8524df 150 void Eng::check_s_hit(Gamepad &pad){
el18jgb 9:2836fc3d9ede 151 Vector2D s1_pos = _s1.get_pos();
el18jgb 9:2836fc3d9ede 152 Vector2D s2_pos = _s2.get_pos();
el18jgb 9:2836fc3d9ede 153 Vector2D aim_pos = aim.get_pos();
el18jgb 9:2836fc3d9ede 154
el18jgb 9:2836fc3d9ede 155 if (
el18jgb 9:2836fc3d9ede 156 (aim_pos.y >= s1_pos.y) && //top
el18jgb 9:2836fc3d9ede 157 (aim_pos.y <= s1_pos.y + 4) && //bottom
el18jgb 9:2836fc3d9ede 158 (aim_pos.x >= s1_pos.x) && //left
el18jgb 9:2836fc3d9ede 159 (aim_pos.x <= s1_pos.x + 4) //right
el18jgb 9:2836fc3d9ede 160 ) {
el18jgb 9:2836fc3d9ede 161 spike_f = false;
el18jgb 10:6c574b8524df 162 spikes.hit(pad);
el18jgb 9:2836fc3d9ede 163 }
el18jgb 9:2836fc3d9ede 164 if (
el18jgb 9:2836fc3d9ede 165 (aim_pos.y >= s2_pos.y) && //top
el18jgb 9:2836fc3d9ede 166 (aim_pos.y <= s2_pos.y + 4) && //bottom
el18jgb 9:2836fc3d9ede 167 (aim_pos.x >= s2_pos.x) && //left
el18jgb 9:2836fc3d9ede 168 (aim_pos.x <= s2_pos.x + 4) //right
el18jgb 9:2836fc3d9ede 169 ) {
el18jgb 9:2836fc3d9ede 170 spike_f = false;
el18jgb 10:6c574b8524df 171 spikes.hit(pad);
el18jgb 9:2836fc3d9ede 172 }
el18jgb 9:2836fc3d9ede 173
el18jgb 9:2836fc3d9ede 174
el18jgb 9:2836fc3d9ede 175 }