Zum Inhalt springen

Zufällig herumspringender Ball


rysiek

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...