rysiek Geschrieben 7. Januar 2007 Geschrieben 7. Januar 2007 Guten Tag, mir liegt ein Java Programm vor in dem ein sich bewegender Ball in einem Rechteck , immer wenn er gegen eine Wand trifft ein die entegengesetzte Richtung abspringt. Dies geschicht mit hilfe der if Schleifen: if ((a+du==ecr+bre) | (a-1==ecr)) { r1=r1*(-1); } if ((b+du==ecu+hoe) | (b-1==ecu)) { r2=r2*(-1); } a=a+r1; b=b+r2; if (Schritte>AnzSchr) { Abbruch =true; } [/PHP] Natürlich wurden zuvor die Variablen [b]ecr[/b], [b]ecu[/b], [b]bre[/b], [b]hoe[/b], [b]du[/b], [b]rad[/b] und [b]sialt[/b] bestimmt. In diesem Fall: [PHP] int si=0, Grenze = 4,r1=1, r2=1, Schritte=0,AnzSchr=1000, da=0, dax=0, ecr=50, ecu=50,bre=200,hoe=20, du=10, rad=du/2, sialt=0; int a,b,c,d; Meine Frage ist: Wie kann ich es anstellen , dass sich der Ball bzw. der Körper zufällig bewegt wenn er gegen eine der Wänder auftrifft und nicht gegen die Richtung? Ich danke schonmal im vorraus jedem der sich die Mühe macht sich das vorliegende Problem anzuschauen und evtl.helfen kann. Anbei das ganze Programm.PingPong3.rar Zitieren
kingofbrain Geschrieben 7. Januar 2007 Geschrieben 7. Januar 2007 Servus, ich habe das Teil jetzt nur schnell überflogen und schätze, das es die folgende Zeile ist: r2=r2*(-1); Hier wird für die Variable r2 (tolle Namen, deshalb habe ich nicht versucht, das Teil wirklich zu lesen) der neue Wert gebildet, indem sie mit -1 multipliziert wird. Das sollte der Funktionalität "Einfallswinkel = Ausfallswinkel" entsprechen. Wenn Du hier also statt r2*(-1) eine zufällig generierte Zahl zwischen 1 und 180 (Winkel) einsetzt, sollte es funktionieren. Peter Zitieren
geloescht_Newlukai Geschrieben 7. Januar 2007 Geschrieben 7. Januar 2007 Ich denke nicht, daß es ganz so pauschal ist. Ich vermute (denn auch ich lese den Quelltext nicht), daß r1 und r2 die Geschwindigkeiten des Balls in x- bzw. y-Richtung sind. Daher solltest Du in beiden Zeilen r1 und r2 neu zufällig berechnen, natürlich mit dem entsprechenden Vorzeichen. Zitieren
rysiek Geschrieben 7. Januar 2007 Autor Geschrieben 7. Januar 2007 Hi, ich habe mich etwas schlau gemacht über Zufallswerte in Java , bin aber immer noch nicht schlau genug. Also um einen Zufall zu erstellen muss ich eine switch Funktionen erstellen und die Möglichkeiten case 1 , 2 , 3 etc. auflisten. Meinst du ich soll es so machen? Wenn ja , könnte ich dann do durch switch einfach ersetzen? Wenn ja , wo/wie müsste ich dann die case Sachen eintragen , denn ich habe ja schon if Schleifen, die besagen was getan wird wenn der Ball eines der Wände berührt. Zur verdeutlichung die bisherige do Schleife: do { Schritte++; dax++; g.setColor(Color.black); g.fillOval(a,b,du,du); Pause(1000); g.setColor(Color.white); g.fillOval(a,b,du,du); if ((a+du==ecr+bre) | (a-1==ecr)) { r1=r1*(-1); } if ((b+du==ecu+hoe) | (b-1==ecu)) { r2=r2*(-1); } a=a+r1; b=b+r2; if (Schritte>AnzSchr) { Abbruch =true; } } [/PHP] Oder gibt es eine andere Möglichkeit für einen Zufallswert? Danke für jede weitere Hilfe! Zitieren
geloescht_Newlukai Geschrieben 7. Januar 2007 Geschrieben 7. Januar 2007 Thema Zufallsgenerator: Benutze das hier: Random randomizer = new Random(); r1 = randomizer.nextInt(); Thema do durch switch ersetzen: Ich erinnere mich an das erste Halbjahr Programmieren in der Berufsschule. Es wurden die verschiedenen Kontrollstrukturen in Programmiersprachen behandelt. Also Abfragen, Schleifen, Blöcke, etc. do {...} while() ist eine Schleife. switch() {...} eine Mehrfachauswahl. Wie hattes Du denn vor, das eine durch das andere zu ersetzen? Zitieren
Dragon8 Geschrieben 7. Januar 2007 Geschrieben 7. Januar 2007 als erstes an rysiek, bitte sag nie wieder if-schleife. das heißt if-anweisung oder abfrage, aber keine schleife. und dann zu dem problem, also ich würde der idee von newlukai mit der zufallszahl auch zustimmen, jedoch sollte man den bereich in welchem die zahl erzeugt wird beschränken, da sich sonst wohl zu große sprünge des balles ergeben. also wenn man das richtig korrekt machen will, müssen wohl beide variablen, r1 und r2 irgendwie verändert werden. Zitieren
rysiek Geschrieben 7. Januar 2007 Autor Geschrieben 7. Januar 2007 Hi, danke für eure zahlreichen Antworten. Ich habe es versucht , doch der Code wird irgendwie nicht akzeptiert: r3 = randomizer.nextInt(); ^ PingPong4.java:15: <identifier> expected r4 = randomizer.nextInt(); ^ [/PHP] Ich habe zurvor nur [PHP] import java.awt.*; import java.applet.*; geladen und vermute zu diesem Zufallsgenerator gehört noch etwas. Kann das sein? Wenn ja was muss ich noch laden? Finde das Forum übrigens super , weil einem sehr schnell geholfen wird und man dann nicht so lange warten muss bis man weiterprobieren kann! Edit: Das ,,^" wird beim ersten Ausdruck hier imForum falsch angezeigt , eigentlich steht es unterm ,,=" zeichen. Zitieren
Amstelchen Geschrieben 7. Januar 2007 Geschrieben 7. Januar 2007 RTM. Random ist zu finden in java.util. Random (Java 2 Platform SE v1.4.2) s'Amstel Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.