diff options
Diffstat (limited to 'src/aufgaben/blatt2')
-rwxr-xr-x | src/aufgaben/blatt2/Aufgabe1.java | 64 | ||||
-rwxr-xr-x | src/aufgaben/blatt2/Objekt.java | 65 |
2 files changed, 129 insertions, 0 deletions
diff --git a/src/aufgaben/blatt2/Aufgabe1.java b/src/aufgaben/blatt2/Aufgabe1.java new file mode 100755 index 0000000..014b2f6 --- /dev/null +++ b/src/aufgaben/blatt2/Aufgabe1.java @@ -0,0 +1,64 @@ +package aufgaben.blatt2;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import aufgaben.Aufgabe;
+import misc.Utils;
+
+public class Aufgabe1 extends Aufgabe {
+
+ private final int width = 500, height = 500;
+ private boolean done = false;
+ private volatile Objekt o;
+ private String name;
+
+ public Aufgabe1() {
+ name = "Blatt 2 - 1";
+ this.setSize(width, height);
+ this.setTitle("Blatt 1 - Aufgabe 1");
+ this.addWindowListener(
+ new WindowAdapter() {
+ @Override
+ public void windowClosing(WindowEvent e) {
+ System.out.println("close");
+ done = true;
+ }
+ }
+ );
+ }
+
+ @Override
+ public boolean done() {
+ return done;
+ }
+
+ public void paint(Graphics g) {
+ g.drawRect(o.getX(), o.getY(), 100, 100);
+ g.setColor(Color.BLACK);
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public void init() {
+ o = new Objekt(20, 200);
+ o.setMovement(0, 50);
+
+ new Thread(new Runnable(){
+ @Override
+ public void run() {
+ while(true) {
+ o.update();
+ repaint();
+ }
+ }
+ }).start();
+ }
+
+}
diff --git a/src/aufgaben/blatt2/Objekt.java b/src/aufgaben/blatt2/Objekt.java new file mode 100755 index 0000000..031b73a --- /dev/null +++ b/src/aufgaben/blatt2/Objekt.java @@ -0,0 +1,65 @@ +package aufgaben.blatt2;
+
+import java.util.Date;
+
+public class Objekt {
+
+ private float x, y, dir, v;
+ private long time;
+
+ public Objekt(int x, int y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ public void setX(int x) {
+ this.x = x;
+ }
+
+ public void setY(int y) {
+ this.y = y;
+ }
+
+ public void setMovement(float degrees, float v) {
+ this.dir = degrees;
+ this.v = v;
+ this.time = System.nanoTime();
+ }
+
+ public void update() {
+ long delta = getDelta();
+ float change = (float) (delta/1e9);
+ if(dir == 0 || dir == 360) {
+ x += change * v;
+ } else if(dir >= 0 && dir < 90) {
+ x += change * v;
+ y -= Math.tan(Math.toRadians(dir)) * change * v;
+ } else if(dir >= 90 && dir < 180) {
+ x -= Math.tan(Math.toRadians(dir-90)) * change * v;
+ y -= change * v;
+ } else if(dir >= 180 && dir < 270) {
+ x -= change * v;
+ y += Math.tan(Math.toRadians(dir-180)) * change * v;
+ } else if(dir >= 270 && dir < 360) {
+ x += Math.tan(Math.toRadians(dir-270)) * change * v;
+ y += change * v;
+ } else {
+ System.out.println("Invalid angle! (float, 0<=angle<=360)");
+ }
+ System.out.println("X = " + x + ", Y = " + y + ", fps = " + delta/1e9);
+ }
+
+ public int getX() {
+ return Math.round(x);
+ }
+
+ public int getY() {
+ return Math.round(y);
+ }
+
+ public long getDelta() {
+ long old = time;
+ time = System.nanoTime();
+ return time-old;
+ }
+}
|