Zombiepolis / zombiepolis

GNU General Public License v3.0
0 stars 0 forks source link

Radius Jäger #18

Closed kellerCarlo closed 10 years ago

kellerCarlo commented 10 years ago

Radius um das Jägerhaus in dem sich der zugehörige Jäger bewegen kann

gerbeni commented 10 years ago

package micropolisj.engine;

public class HunterSprite extends Sprite {

int count;
int destX;
int destY;
int origX;
int origY;

int radius = 50;

static int [] CDx = { 0,  0,  3,  5,  3,  0, -3, -5, -3 };
static int [] CDy = { 0, -5, -3,  0,  3,  5,  3,  0, -3 };
static final int SOUND_FREQ = 200;

public HunterSprite(Micropolis engine, int xpos, int ypos)
{
    super(engine, SpriteKind.HUN);
    this.x = xpos * 16 + 8;
    this.y = ypos * 16 + 8;
    this.width = 32;
    this.height = 32;
    this.offx = -16;
    this.offy = -16;

    this.destX = city.PRNG.nextInt(city.getWidth()) * 16 + 8;
    this.destY = city.PRNG.nextInt(city.getHeight()) * 16 + 8;

    this.origX = x;
    this.origY = y;
    this.count = 20; //war 1500
    this.frame = 5;
}

@Override
public void moveImpl()
{
    if (this.count > 0) {
        this.count--;
    }

    if (this.count == 0) {

        // attract hunter to zombies
        if (city.hasSprite(SpriteKind.ZOM)) {

            ZombieSprite zombie = (ZombieSprite) city.getSprite(SpriteKind.ZOM);

            if (getDis(origX, origY, zombie.x, zombie.y) < radius){
            this.destX = zombie.x;
            this.destY = zombie.y;
            }
            else {
                this.destX = origX;
                this.destY = origY;
            }

        }
        else {
            this.destX = origX;
            this.destY = origY;
        }

        if (getDis(x, y, origX, origY) < 50) {
            // made it back to airport, go ahead and land.
            this.frame = 0;
            return;
        }
    }

    int z = this.frame;
    if (city.acycle % 3 == 0) {
        int d = getDir(x, y, destX, destY);
        z = turnTo(z, d);
        this.frame = z;
    }
    x += CDx[z];
    y += CDy[z];

    for (Sprite s : city.allSprites())
    {
        if (checkSpriteCollision(s) &&
            (s.kind == SpriteKind.ZOM)
            ) {
            s.explodeSprite();
        }
    }

}

}

aranas commented 10 years ago

Jäger fliegt über dem Haus. Mit jedem Tick überprüft er die Standorte der Zombies. Befindet sich einer oder mehrere der Zombies in seinem Radius, prüft er welcher die kleinste Distanz zu ihm selbst hat und steuert diesen dann gezielt an.