SpaceInvaders: rocket survival fixed

This commit is contained in:
Patrick Haßel 2023-01-03 13:03:37 +01:00
parent 14f8512eca
commit d7464d1803

View File

@ -46,9 +46,9 @@ private:
public:
explicit SpaceInvaders(Display *display) :
Mode(display),
invadersCountX(display->width / 3),
invadersCountY(display->height / 4) {
Mode(display),
invadersCountX(display->width / 3),
invadersCountY(display->height / 4) {
swarmBegin = (Invader *) malloc(sizeof(Invader) * invadersCountX * invadersCountY);
swarmEnd = swarmBegin + invadersCountX * invadersCountY;
@ -161,7 +161,7 @@ public:
void shoot() {
for (Rocket *rocket = rocketsBegin; rocket < rocketsEnd; rocket++) {
if (!rocket->alive) {
if (!rocket->alive && rocket->flash == 0) {
rocket->alive = true;
rocket->x = heroX;
rocket->y = display->height - 2;
@ -171,20 +171,28 @@ public:
void collide() {
for (Rocket *rocket = rocketsBegin; rocket < rocketsEnd; rocket++) {
if (!rocket->alive) {
continue;
}
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->flash = 1000;
invader->alive = false;
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 {
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() {