SpaceInvaders: rocket survival fixed
This commit is contained in:
parent
14f8512eca
commit
d7464d1803
@ -46,9 +46,9 @@ private:
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
explicit SpaceInvaders(Display *display) :
|
explicit SpaceInvaders(Display *display) :
|
||||||
Mode(display),
|
Mode(display),
|
||||||
invadersCountX(display->width / 3),
|
invadersCountX(display->width / 3),
|
||||||
invadersCountY(display->height / 4) {
|
invadersCountY(display->height / 4) {
|
||||||
|
|
||||||
swarmBegin = (Invader *) malloc(sizeof(Invader) * invadersCountX * invadersCountY);
|
swarmBegin = (Invader *) malloc(sizeof(Invader) * invadersCountX * invadersCountY);
|
||||||
swarmEnd = swarmBegin + invadersCountX * invadersCountY;
|
swarmEnd = swarmBegin + invadersCountX * invadersCountY;
|
||||||
@ -161,7 +161,7 @@ public:
|
|||||||
|
|
||||||
void shoot() {
|
void shoot() {
|
||||||
for (Rocket *rocket = rocketsBegin; rocket < rocketsEnd; rocket++) {
|
for (Rocket *rocket = rocketsBegin; rocket < rocketsEnd; rocket++) {
|
||||||
if (!rocket->alive) {
|
if (!rocket->alive && rocket->flash == 0) {
|
||||||
rocket->alive = true;
|
rocket->alive = true;
|
||||||
rocket->x = heroX;
|
rocket->x = heroX;
|
||||||
rocket->y = display->height - 2;
|
rocket->y = display->height - 2;
|
||||||
@ -171,20 +171,28 @@ public:
|
|||||||
|
|
||||||
void collide() {
|
void collide() {
|
||||||
for (Rocket *rocket = rocketsBegin; rocket < rocketsEnd; rocket++) {
|
for (Rocket *rocket = rocketsBegin; rocket < rocketsEnd; rocket++) {
|
||||||
|
if (!rocket->alive) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
for (Invader *invader = swarmBegin; invader < swarmEnd; invader++) {
|
for (Invader *invader = swarmBegin; invader < swarmEnd; invader++) {
|
||||||
if (invader->alive && rocket->alive && collide(rocket, invader)) {
|
if (!invader->alive) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (collide(rocket, invader)) {
|
||||||
rocket->alive = false;
|
rocket->alive = false;
|
||||||
rocket->flash = 1000;
|
rocket->flash = 1000;
|
||||||
invader->alive = false;
|
invader->alive = false;
|
||||||
invadersAlive--;
|
invadersAlive--;
|
||||||
// Serial.printf("Killed invader at (%2u/%2u): %2u/%2u alive.\n", invader->x, invader->y, invadersAlive, invadersCountX * invadersCountY);
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool collide(const Rocket *rocket, const Invader *invader) const {
|
bool collide(const Rocket *rocket, const Invader *invader) const {
|
||||||
return swarmY + invader->y * 2 == rocket->y && swarmX + invader->x * 3 <= rocket->x && rocket->x <= swarmX + invader->x * 3 + 1;
|
return swarmY + invader->y * 2 == rocket->y
|
||||||
|
&& swarmX + invader->x * 3 <= rocket->x
|
||||||
|
&& swarmX + invader->x * 3 + 1 >= rocket->x;
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw() {
|
void draw() {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user