import java.awt.*; import java.util.LinkedList; public class Enemy1 extends MovingObject { public int dy = 0; //hastighet i x-led public int dx = 0; //hastighet i y-led public double speed = 8.0; //šnskad fšrflyttningshastighet public Point visitPoint1 = new Point(); public Point visitPoint2 = new Point(); public Point visitPoint3 = new Point(); public Point visitPoint4 = new Point(); public LinkedList points = new LinkedList(); public double distanceVectorX; //Vektorn mellan šnskad punkt och nuvarande (X) public double distanceVectorY; //Vektorn mellan šnskad punkt och nuvarande (Y) public double normDistX; //normaliserade vektorn public double normDistY; //normaliserade vektorn public Point tempPoint = new Point(); //TemporŠr punkt public Enemy1() { //skapar ett kolissions-polygon this.polygon.addPoint(x, y); this.polygon.addPoint(x, y + height); this.polygon.addPoint(x + width, y + height); this.polygon.addPoint(x + width, y); visitPoint1.x = 0; visitPoint1.y = 300; visitPoint2.x = 100; visitPoint2.y = 120; visitPoint3.x = 400; visitPoint3.y = 600; points.add(visitPoint1); points.add(visitPoint2); points.add(visitPoint3); points.add(visitPoint4); } public void draw(Graphics g) { g.setColor(Color.BLACK); g.fillRect(x, y, width, height); //Ritar ut objektet i vald fŠrg //g.setColor(Color.PINK); //g.drawPolygon(polygon); } public void setdxdy() { tempPoint = (Point) points.element(); //tempPoint <- Fšrsta punkten pŒ listan distanceVectorX = tempPoint.x - this.x; //RŠknar ut vektorn mellan šnskad punkt och nuvarande (X) distanceVectorY = tempPoint.y - this.y; //RŠknar ut vektorn mellan šnskad punkt och nuvarande (Y) normDistX = distanceVectorX / (Math.sqrt((double) (Math.pow(distanceVectorX, 2) + Math.pow(distanceVectorY, 2)))); //Normaliserar vektorn (X) normDistY = distanceVectorY / (Math.sqrt((double) (Math.pow(distanceVectorX, 2) + Math.pow(distanceVectorY, 2)))); //Normaliserar vektorn (Y) if (speed <= (Math.sqrt(Math.pow(distanceVectorX, 2) + Math.pow(distanceVectorY, 2)))) { //kollar om absolutbeloppet av vektorn Šr mindre Šn hastigheten dx = (int) (speed * normDistX); //SŠtter dx till hastigheten i x-led utifrŒn vektorns riktining dy = (int) (speed * normDistY); //SŠtter dy till hastigheten i y-led utifrŒn vektorns riktning } else { //SlŠnger den fšrsta punkten sist pŒ listan tempPoint = (Point) points.remove(); points.add(tempPoint); } } public void clockTick() { setdxdy(); //AnvŠnder metoden setdxdy() fšr att bestŠmma hastigheten this.y += dy; //fšrflyttar objektet i y-ledd this.x += dx; //fšrflyttar objektet i x-ledd //Fšrflyttar Šven objektets kollissionspolygon Polygon polly = new Polygon(); polly.addPoint(x, y); polly.addPoint(x, y + height); polly.addPoint(x + width, y + height); polly.addPoint(x + width, y); this.polygon = polly; } }