ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el18jgb

Dependencies:   mbed

Committer:
el18jgb
Date:
Mon May 18 12:41:06 2020 +0000
Revision:
9:2836fc3d9ede
Parent:
8:0b9a824c75fe
Child:
10:6c574b8524df
added falling spikes to be avoided;

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