Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Eng.cpp@9:2836fc3d9ede, 2020-05-18 (annotated)
- 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?
User | Revision | Line number | New 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 | } |