summaryrefslogtreecommitdiff
path: root/ws2015/eip/blaetter/10/1/de/lmu/ifi/tcs/HuepfendeBaelle.java
diff options
context:
space:
mode:
Diffstat (limited to 'ws2015/eip/blaetter/10/1/de/lmu/ifi/tcs/HuepfendeBaelle.java')
-rw-r--r--ws2015/eip/blaetter/10/1/de/lmu/ifi/tcs/HuepfendeBaelle.java129
1 files changed, 129 insertions, 0 deletions
diff --git a/ws2015/eip/blaetter/10/1/de/lmu/ifi/tcs/HuepfendeBaelle.java b/ws2015/eip/blaetter/10/1/de/lmu/ifi/tcs/HuepfendeBaelle.java
new file mode 100644
index 0000000..f6e1eef
--- /dev/null
+++ b/ws2015/eip/blaetter/10/1/de/lmu/ifi/tcs/HuepfendeBaelle.java
@@ -0,0 +1,129 @@
1package de.lmu.ifi.tcs;
2
3import java.awt.Color;
4import java.awt.Point;
5import java.awt.Rectangle;
6import java.awt.Shape;
7import java.awt.geom.Ellipse2D;
8import java.util.ArrayList;
9import java.util.Random;
10
11
12public class HuepfendeBaelle {
13
14 private ArrayList<Ball> baelle;
15 private GraphicsWindow gw;
16
17 // Parameter
18 private final static int max_x = 640;
19 private final static int max_y = 480;
20 private final static int ballgroesse = 20;
21 private final static int knopfgroesse = 40;
22 /**
23 * @param args
24 * @throws InterruptedException
25 */
26 public static void main(String[] args) throws InterruptedException {
27
28 Point randpunkt = new Point(max_x-ballgroesse,max_y-ballgroesse);
29 ArrayList<Ball> baelle = new ArrayList<Ball>();
30
31 Ball b = new Ball(randpunkt, new Point(50,60), 100,90, Color.MAGENTA);
32 baelle.add(b);
33 b = new Ball(randpunkt, new Point(200,100), -5,20, Color.ORANGE);
34 baelle.add(b);
35 b = new Ball(randpunkt, new Point(323,243), 10,-30, Color.GREEN);
36 baelle.add(b);
37 b = new Ball(randpunkt, new Point(23,43), -199,-200);
38
39 GraphicsWindow gw = new GraphicsWindow(max_x,max_y);
40 gw.setText("Bälle anklicken; blaue Leiste zum Beenden anklicken.");
41
42 HuepfendeBaelle hb = new HuepfendeBaelle(baelle, gw);
43
44
45 //while( true ) {
46 for (Ball ball : baelle) {
47 ball.updatePosition();
48 }
49 hb.zeichneAlleBaelle();
50 //}
51
52 // Vearbeitung der Mouse-clicks.
53 Point click = gw.mouseClick();
54 Random zufall = new Random();
55 while (click.x >= 0 && click.x <= max_x && click.y >= knopfgroesse && click.y <= max_y) {
56 if (hb.treffer(click)) {
57 gw.setText("Treffer! ("+ click.x + "," + click.y +")");
58 } else {
59 gw.setText("Daneben! ("+ click.x + "," + click.y +")");
60 b = new Ball(randpunkt, click, (zufall.nextDouble()-0.5)*200, (zufall.nextDouble()-0.5)*200);
61 hb.plusBall(b);
62 }
63 for (Ball ball : baelle) {
64 ball.updatePosition();
65 }
66 hb.zeichneAlleBaelle();
67 click = gw.mouseClick(); // Warten auf Mausklick
68 }
69 gw.setText("Auf Wiedersehen!");
70 gw.sleep(8000);
71
72 System.exit(0);
73 }
74
75 /**
76 * @param baelle
77 * @param gw
78 */
79 public HuepfendeBaelle(ArrayList<Ball> baelle, GraphicsWindow gw) {
80 this.baelle = baelle;
81 this.gw = gw;
82 }
83
84
85 /* Zeichnet alle Baelle ins GraphicsWindow ein */
86 public void zeichneAlleBaelle() {
87 gw.clear();
88 zeichneEnde();
89 for (Ball ball : baelle) {
90 gw.setColor(ball.getFarbe());
91 zeichneBallBei(ball.holePosition());
92 }
93 }
94
95 /* Zeichnet einen Ball bei einer speziellen Position */
96 public void zeichneBallBei(Point p) {
97 Shape ball = new Ellipse2D.Double(p.getX(), p.getY(), ballgroesse, ballgroesse);
98 gw.fill(ball);
99 }
100
101 /* Fügt einen weiteren Ball hinzu */
102 public void plusBall(Ball b) {
103 this.baelle.add(b);
104 }
105
106 /* Prüft ab, ob sich an einer gegebenen Position ein Ball befindet
107 * und wechselt ggf. dessen Farbe.
108 */
109 public boolean treffer(Point schuss) {
110 for (Ball ball : baelle) {
111 Point bpos = ball.holePosition();
112 bpos.translate(ballgroesse/2, ballgroesse/2);
113 if (schuss.distance(bpos) <= ballgroesse+5) {
114 ball.wechsleFarbe();
115 return true;
116 }
117 }
118 return false;
119 }
120
121 /*
122 * Zeichnet einfach nur einen blauen Balken am oberen Fensterrand.
123 */
124 public void zeichneEnde() {
125 Rectangle ende = new Rectangle(0,0,max_x, knopfgroesse);
126 gw.setColor(Color.BLUE);
127 gw.fill(ende);
128 }
129}