Ergebnis 1 bis 10 von 10
Thema: Java - Brauche hilfe
-
17.03.2008, 10:19 #1triple
Java - Brauche hilfe
ich muss ein Java-Programm haben, welches einen Blitz zeichnet, von oben vom Fenster per Zufallsgenerator nach unten. Kann mir jemand helfen? Schön wäre noch ein Punkt Unten am Fenster, welchen den Blitz anzieht, d.h. dass der Blitz bei 10 mal ausführen etwa 7 mal in den Punkt einschlägt. Ich dachte mir irgendwie mit einem Koordinaten-System.
(P.S. über nicht all zu kompliziertes Java wäre ich sehr dankbar, da ich das Programm verstehen muss)
Herzlichen Dank,
Gruss triple
-
-
17.03.2008, 19:37 #2Mire
AW: Java - Brauche hilfe
Hi,
die Aufgabe ist 80% Mathematik und 18% Logisches Denken und 2% in Java implementieren. Wo hakts? Ach und.. womit muesst ihr das machen? SWT? Swing?
Du meinst doch in etwa sowas, oder?
-
17.03.2008, 20:16 #3triple
AW: Java - Brauche hilfe
Hi,
danke für die Antwort, naja, swing, glaube ich, die Mathematik ist eigentlich kein Problem, die Logik auch nicht so sehr, aber mehr das Java-Programmieren.
Bin nun schon ziemlich weit, aber es hapert noch ein bisschen beim mehrfachen zeichnen, hier mein code, hoffentlich kannst du mir helfen.
Herzlichen Dank
Code:import javax.swing.*; import java.awt.*; public class PaintingLine extends JComponent { static int x, y, a = 1, xold, yold; public static void GetX() { int rand; xold = x; rand = (int) ((Math.random() * 100) + 50); if (x >= 650) { a = 2; } else if (x <= 150) { a = 1; } switch (a) { case 1: x = x + rand; a = 2; break; case 2: x = x - rand; a = 1; break; } } public static void GetY() { int rand; yold = y; rand = (int) ((Math.random() * 50) + 50); y = y + rand; } public PaintingLine() { super(); } public void paint(Graphics g) { g.setColor(Color.BLACK); g.drawLine(xold, yold, x, y); } public static void main(String[] args) { x = 400; y = 0; JFrame f = new JFrame("Blitz"); f.setSize(800, 600); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.getContentPane().add(new PaintingLine()); f.setVisible(true); while (y <= 600) { GetX(); GetY(); } } }
-
17.03.2008, 20:42 #4Mire
AW: Java - Brauche hilfe
Oh, das sieht kompliziert zu berichtigen aus *g*
Ich habe mein Beispiel in SWT gemacht, aber in Swing sollte das nicht viel anders sein. Ich glaube nicht, dass es viel bringt, wenn ich meinen Code hier poste.. darum ein paar Tips. Wie dein Code aussieht, moechte ich behaupten, du kennst dich gut genug mit Java aus.. aber die vorgehensweise fuer was du ueberhaupt erstellen willst ist nicht 100% klar ;)
Zuerst.. wenn du oben links anfangen willst, dann sind die ersten Koordinaten 0,0. Wie brauchen pro Linie immer 2 Koordinaten/Punkte. Einmal fuer "Von" und einmal "Bis" - halt fuer Anfang und Ende einer Linie die wir zeichnen moechten. "Von" ist also (0,0). "Bis" musst du ausrechnen. Laenge habe ich statisch gewaehlt, 100 pixel oder so.. kommt auf die Aufgabenstellung drauf an ;)
Also, lt. Aufgabe.. erstelle einen random Winkel von 1-90 Grad (weil wir ja nur nach unten rechts wollen) ..mit Math.random(). Der Zielpunkt ist dann nach lustiger Trigonometrie (-> Wikipedia, Bild im Anhang in diesem Post) x = Cosinus(winkel), y = Sinus(winkel). In Java ausgedrueckt:
x = (int) (Math.abs(Math.cos(degree))*100);
y = (int) (Math.abs(Math.sin(degree))*100);
Das Zeichnen muss natuerlich durch eine Schleife rennen, weil ein Blitz aus vielen Linien besteht, und wir fuer jeden Durchgang durch die Schleife neue VON und BIS Koordinaten brauchen. Meine Schleife ist statisch und macht 10 oder so Schritte fuer einen Blitz, aber du kannst natuerlich auch pruefen wie groß das Fenster ist usw.. aber erstmal das einfache Zeug machen.
In der Schleife: BIS wir nun zu VON, weil wir direkt weiterzeichnen wollen von wo wir aufgehoert haben. Das ist einfach. Fuer das neue BIS brauchen wir einen neuen random Winkel. Die Laenge bleibt, ausserdem musst du den alten Punkt dazurechnen, sonst gehts ja evtl wieder zurueck nach oben links. Also, in Java:
pTo.x = (int) (Math.abs(Math.cos(degree))*100) + pFrom.x;
pTo.y = (int) (Math.abs(Math.sin(degree))*100) + pFrom.y;
-
17.03.2008, 20:57 #5Mire
AW: Java - Brauche hilfe DOPPELPOST WOOT
Code:public void paint(Graphics g) { g.setColor(Color.BLACK); int degree = 1 + (int) (Math.random() * 90); Point pFrom = new Point(0,0); Point pTo = new Point((int) (Math.abs(Math.cos(degree))*100),(int) (Math.abs(Math.sin(degree))*100)); for (int i=0; i<12; i++) { g.drawLine(pFrom.x, pFrom.y, pTo.x, pTo.y); pFrom.x = pTo.x; pFrom.y = pTo.y; pTo.x = (int) (Math.abs(Math.cos(degree))*100) + pFrom.x; pTo.y = (int) (Math.abs(Math.sin(degree))*100) + pFrom.y; degree = 1 + (int) (Math.random() * 90); } }
-
17.03.2008, 21:00 #6triple
AW: Java - Brauche hilfe
Hi Mire,
danke für die Antwort, du hast mir geholfen, ohne dass du es dort gewollt hast.
Ich starte primär von der Mitt oben, daher die Koordinaten 400, 0 (Fenstergrösse 800 Pixel) und gehe danach gerade nach unten, also mehr ein "reality-blitz". Aber habe dank deiner Antwort mein fehler Gefunden, habe die Schlauf ins Main reingetan anstatt in die paint-methode. nun funktionierts eigentlich ganz gut, hier mein code mit dem Resultat, welches ich so in etwa wollte.
Achja, ich habe es ohne Grad und länge gemacht, sondern zufallszahlen, welche die neuen Koordinaten beinhalten.
Gruss triple
Code:package point; import javax.swing.*; import java.awt.*; public class PaintingLine extends JComponent { static int x, y, a = 1, xold, yold; public static void GetX() { int rand; xold = x; rand = (int) ((Math.random() * 100) + 25); if (x >= 650) { a = 2; } else if (x <= 150) { a = 1; } switch (a) { case 1: x = x + rand; a = 2; break; case 2: x = x - rand; a = 1; break; } } public static void GetY() { int rand; yold = y; rand = (int) ((Math.random() * 25) + 25); y = y + rand; if (y < 0) { y = 0; } } public PaintingLine() { super(); } public void paint(Graphics g) { g.setColor(Color.BLACK); while (y <= 600) { GetX(); GetY(); g.drawLine(xold, yold, x, y); } } public static void main(String[] args) { x = 400; y = 0; JFrame f = new JFrame("Blitz"); f.setSize(800, 600); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.getContentPane().add(new PaintingLine()); f.setVisible(true); } }
-
17.03.2008, 21:19 #7Mire
AW: Java - Brauche hilfe
Sieht doch gut aus ;)
Winkel brauchst du auch nicht wenn du nur von oben nach unten willst, stimmt.
Allerdings geht dein Blitz kaputt sobald man ihn neuzeichnen laesst. Wie zB durch Fenstergroeße veraendern usw. Das kannst du dadurch verhindern, dass du die y Koordinate wieder auf 0 Setzt, sobald alles fertig ist. Also hier:
Code:public void paint(Graphics g) { g.setColor(Color.BLACK); while (y <= 600) { GetX(); GetY(); g.drawLine(xold, yold, x, y); } y = 0; // <--------- }
-
17.03.2008, 21:27 #8triple
AW: Java - Brauche hilfe
Ja stimmt, hast recht, nur, das problem ist, ich muss dann die Fenstergrösse irgendwie dynamisch als untere Grenze definieren, aber dafür bin ich DEFEÌNITIV zu schlecht in java, denn wenn ich das Fenster vergrössere, geht der Blitz nur bis 600 Pixel.
Weisst du wie das geht? Naja, ich könnte auch bei 550 Pixel eine Linie als "Boden" machen, dann wäre das Problem gelöst.
Gruss triple
-
17.03.2008, 21:38 #9Mire
AW: Java - Brauche hilfe
Code:f.setResizable(false); f.setAlwaysOnTop(true);
Code:f.getContentPane().add(new PaintingLine(f));
Code:public class PaintingLine extends JComponent { static int x, y, a = 1, xold, yold; JFrame wuwu;
Code:public PaintingLine(JFrame wuwu) { super(); this.wuwu = wuwu; }
Code:g.drawString("Hoehe: " + String.valueOf(wuwu.bounds().height), 100, 100); g.drawString("Breite: " + String.valueOf(wuwu.bounds().width), 100, 112);
Edit: Abschließend nochmal alles zusammen :p
Swing:Code:import javax.swing.*; import java.awt.*; public class PaintingLine extends JComponent { static int x, y, a = 1, xold, yold; JFrame wuwu; public static void GetX() { int rand; xold = x; rand = (int) ((Math.random() * 100) + 25); if (x >= 650) { a = 2; } else if (x <= 150) { a = 1; } switch (a) { case 1: x = x + rand; a = 2; break; case 2: x = x - rand; a = 1; break; } } public static void GetY() { int rand; yold = y; rand = (int) ((Math.random() * 25) + 25); y = y + rand; if (y < 0) { y = 0; } } public static int col() { return (int) (Math.random() *256); } public PaintingLine(JFrame wuwu) { super(); this.wuwu = wuwu; } public void paint(Graphics g) { // g.drawString("Hoehe: " + String.valueOf(wuwu.bounds().height), 100, 100); // g.drawString("Breite: " + String.valueOf(wuwu.bounds().width), 100, 112); for (int i=0; i<10; i++) { g.setColor(new Color(col(), col(), col())); while (y <= wuwu.bounds().height) { GetX(); GetY(); g.drawLine(xold, yold, x, y); } y = 0 ; x = wuwu.bounds().width / 2; } } public static void main(String[] args) { x = 400; y = 0; JFrame f = new JFrame("Blitz"); f.setSize(800, 600); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.getContentPane().add(new PaintingLine(f)); f.setVisible(true); } }
Code:import org.eclipse.swt.*; import org.eclipse.swt.events.*; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.*; import org.eclipse.swt.layout.*; public class blitz { public void run() { Display display = new Display(); Shell shell = new Shell(display); shell.setText("Test"); createContents(shell); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } private void createContents(Shell shell) { shell.setLayout(new FillLayout()); Canvas canvas = new Canvas(shell, SWT.NONE); canvas.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { e.gc.setLineWidth(3); for (int i=1; i<10; i++) { drawBlitz(e); } } }); } public static void drawBlitz(PaintEvent e) { e.gc.setForeground(e.display.getSystemColor(1+(int)(Math.random()*16))); int degree = 1 + (int) (Math.random() * 90); Point pFrom = new Point(0,0); Point pTo = new Point((int) (Math.abs(Math.cos(degree))*100),(int) (Math.abs(Math.sin(degree))*100)); for (int i=0; i<12; i++) { e.gc.drawLine(pFrom.x, pFrom.y, pTo.x, pTo.y); pFrom.x = pTo.x; pFrom.y = pTo.y; pTo.x = (int) (Math.abs(Math.cos(degree))*100) + pFrom.x; pTo.y = (int) (Math.abs(Math.sin(degree))*100) + pFrom.y; degree = 1 + (int) (Math.random() * 90); } } public static void main(String[] args) { new blitz().run(); } }
-
18.03.2008, 07:44 #10triple
AW: Java - Brauche hilfe
@Mire
Herzlichen Dank, das hat mir sehr geholfen, ich denke so ist das machbar.
Nochmals, danke viel mal.
Gruss triple
Ähnliche Themen
-
Hilfe bei Java-Script: hallo, ich bin hier grad im IT-Unterricht meiner Schule und solle in Script erstellen mit einer while-schleife. die Aufgabe: Erstelle ein... -
Brauche Hilfe bei Java-Programmierung: Hallo :) Ich beschäftige mich gerade mit der Java-Programmierung. Das heißt ich wollte eigentlich... doch bei mir funktioniert gar nichts :( ich... -
Brauche hilfe Brauche die mss32.dll für cod4 (PC): Hallo erstmal, Also mir ist die mss32.dll datei für cod4 (PC) abhanten gekommen ich habe eine schon mal eine mss32.dll runtergaladen und in den... -
HILFE! Mathe probleme brauche sofort dringend hilfe!: Hab da so ne dumme Satzaufgabe die ich überhaupt nicht verstehe:( Ich hoffe dass mir jemand jetzt noch helfen kann, da ich sonst probleme mit der... -
Java Script Hilfe: Hallo :cool: Wir müssen jetzt inner Schule ein Rechentrainer mit JavaScript erstellen. Da wir bisher noch relativ wenig JS gemacht haben bräuchte...
Spike Spiegel Stimme dir in allen Punkten zu. Eine Fortsetzung wäre Ideal gewesen, um den Schwung der Pinguin Serie mitzunehmen. Allerdings sind wir...
The Batman-Part 2