Geht das nicht auch einfacher (Arcanoid Multiball)

Status
Nicht offen für weitere Antworten.

Chris_1980

Bekanntes Mitglied
Dieses Codefragment soll 3 Extrabälle erzeugen, die aber in eine jeweils andere Richtung wie der Ursprungsball
fliegen sollen. Es gibt vier grobe Richtungen,
Bewegung auf der X-Achse, positiv oder negativ,
Bewegung auf der Y-Achse, positiv oder negativ.

Ich habe das wie folgt gelöst:

Code:
		Ball mother = b.get(0);
		Point pos = mother.getPosition();
		int mxd = mother.getDirectionX();
		int myd = mother.getDirectionY();
		
		int mdid = 0;
		if		(mxd < 0 && myd < 0) mdid = 0;
		else if (mxd < 0 && myd > 0) mdid = 1;
		else if (mxd > 0 && myd < 0) mdid = 2;
		else if (mxd > 0 && myd > 0) mdid = 3;		
		
		for(int i=0; i<4 ; i++)
		{
			if(i != mdid)
			{
				Ball ball = new Ball(p, gf.getBlockList());
				ball.setPosition(pos);
				switch(i)
				{
					case 0:						
						ball.setDirectionX(-1);
						ball.setDirectionY(-1);						
					break;
					
					case 1:						
						ball.setDirectionX(-1);
						ball.setDirectionY(1);						
					break;
					
					case 2:						
						ball.setDirectionX(1);
						ball.setDirectionY(-1);						
					break;
					
					case 3:						
						ball.setDirectionX(1);
						ball.setDirectionY(1);						
					break;					
				}
				b.add(ball);
			}
		}

Irgendwie hab ich das Gefühl das geht auch einfacher und fänd es interessant zu Wissen wie... :)

MFG, Chris
 

Marco13

Top Contributor
"Einfacher" - für den Menschen. der es schreibt, für den Menschen, der es liest, oder für den Computer? :wink:

So eine Struktur wie
Code:
for (int i=0; i<10; i++)
{
    switch (i)
    {
         case 0: ... break;
         case 1: ... break;
         case 2: ... break;
         case 3: ... break;
         case 4: ... break;
         case 5: ... break;
         case 6: ... break;
         case 7: ... break;
         case 8: ... break;
         case 9: ... break;
    }
}
wirkt halt irgendwie komisch: Man läuft eine Schleife für i von 0 bis n durch, und in jedem Durlauf sieht man nach, ob i nun gerade 0 oder 1 oder 2 oder ... oder n ist. (Kurz: Die Schleife bringt fast nichts). In diesem Fall geht es dabei ja nur darum, den Ball mit dem Index "mdid" ausschließen zu können....

In diesem Fall gibt es aber vermutlich eine (elegantere, "einfache") Lösung. Falls "getDirectionX/Y()" immer +/- 1 zurückliefert, und bei "setDirectionX/Y()" immer +/- 1 übergeben werden muss, könntest du sowas machen wie
Code:
     Ball mother = b.get(0);
     Point pos = mother.getPosition();
     b.add(createBall(b.getDirectionX(), -b.getDirectionY()));
     b.add(createBall(-b.getDirectionX(), b.getDirectionY()));
     b.add(createBall(-b.getDirectionX(), -b.getDirectionY()));

private Ball createBall(int dirX, int dirY ...)
{
     Ball ball = new Ball(p, gf.getBlockList());
     ball.setPosition(pos);
     ball.setDirectionX(dirX);
     ball.setDirectionY(dirY);                  
     return ball;
}

Falls "getDirectionX()" aber z.B. auch -10 oder so liefern kann, und bei "setDirectionX/Y()" TROTZDEM immer +/- 1 übergeben werden muss, muss man sie vorher noch "normieren":
Code:
     Ball mother = b.get(0);
     Point pos = mother.getPosition();
     int dirX = b.getDirectionX() / Math.abs(b.getDirectionX());
     int dirY = b.getDirectionY() / Math.abs(b.getDirectionY());

     b.add(createBall(dirX,-dirY));
     b.add(createBall(-dirX,dirY));
     b.add(createBall(-dirX,-dirY));
 

Chris_1980

Bekanntes Mitglied
Hey das find ich ja Klasse. :)
Natürlich, so gehts auch. :cool:
Manchmal sieht man echt den Baum vor lauter Wäldern nicht. :bae: :lol:

Danke Dir! :)

PS: Das obere reicht, es kann immer nur +1 bzw -1 sein.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Datentypen Byte geht nicht höher als 126 auch nicht mit casten? Allgemeine Java-Themen 22
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
M Test geht auf Travis und mit Github Action schief aber nicht lokal Allgemeine Java-Themen 3
M Console geht nicht auf (Windows 10) Allgemeine Java-Themen 3
W Enumeration ein Array/List als Eigenschaft mitgeben - warum geht das nicht? Allgemeine Java-Themen 0
P Erste Schritte HauptFrame geht nicht Allgemeine Java-Themen 7
L Applet Applet zu JavaWebStart migrieren - simples sample geht nicht Allgemeine Java-Themen 2
KeVoZ_ Java Mail senden - geht nicht Allgemeine Java-Themen 4
D Klassenübergreifender Befehl geht nicht Allgemeine Java-Themen 10
J Umwandeln von URL zu File und danach kopieren geht nicht Allgemeine Java-Themen 1
F Java Anwendung Remote starten geht nicht Allgemeine Java-Themen 0
K print() geht nicht ohne println() Allgemeine Java-Themen 3
V 2D-Grafik BufferdImage aus gif Datei in Jar erzeugen geht nicht. Allgemeine Java-Themen 6
Fl4sh1 Autovervollständigungfenster geht nicht (eclipse) Allgemeine Java-Themen 10
P Absatz im String / Excel / /n geht nicht Allgemeine Java-Themen 2
Z Java geht nicht im Browser Allgemeine Java-Themen 5
B Keylistener geht nicht Allgemeine Java-Themen 9
I Downloaden einer Datei geht nicht? Allgemeine Java-Themen 16
P Input/Output Ordner löschen --> geht nicht Datei --> Ja Allgemeine Java-Themen 6
G JTable mit Keylistener geht nicht Allgemeine Java-Themen 3
C Zugriff auf private Methode per reflection geht nicht mehr Allgemeine Java-Themen 3
ruutaiokwu junit mit annotations geht nicht? Allgemeine Java-Themen 5
N Java geht nicht mehr zu löschen Allgemeine Java-Themen 5
DStrohma Daten in JAR speichern geht nicht?? Allgemeine Java-Themen 22
S Viele Bilder -> Speicher ausgelastet? / (De-)serialisierung geht nicht mehr richtig Allgemeine Java-Themen 8
N List<? implements "Interface"> geht nicht Allgemeine Java-Themen 13
M Übergebener String bearbeiten geht nicht. Allgemeine Java-Themen 4
D iText und Table.setTableFitsPage(); geht nicht Allgemeine Java-Themen 12
E Cipher geht mal und mal nicht Allgemeine Java-Themen 3
G Datei löschen nach kopieren geht nicht Allgemeine Java-Themen 5
A Standalone geht - JSP u. Bean nicht Allgemeine Java-Themen 6
D Jar auf Mac starten geht nicht Allgemeine Java-Themen 3
M Klasse Desktop geht nicht mehr (EXCEPTION_ACCESS_VIOLATION) Allgemeine Java-Themen 9
S Apache Commons Net geht nicht Allgemeine Java-Themen 5
zilti Wieso geht der StreamReader/Writer nicht? Allgemeine Java-Themen 5
V JVM OutofMemory Linux geht, windows nicht Allgemeine Java-Themen 3
H Vector<T>[] vecs = new Vector<T>[10]; geht nicht Allgemeine Java-Themen 2
K java geht beim chatten nicht? Allgemeine Java-Themen 2
G Da Jikes nicht mit java 5 geht, gibt es eine andere. Allgemeine Java-Themen 4
TheJavaKid warum geht das nicht? Allgemeine Java-Themen 14
G setLastModified geht nicht Allgemeine Java-Themen 8
G parseInt geht nicht Allgemeine Java-Themen 10
L JTable: Wenn Zeile markiert dann Meldung. geht nicht Allgemeine Java-Themen 4
K Object casting geht nicht. Allgemeine Java-Themen 3
K KeyEvent in eigenem Component geht nicht Allgemeine Java-Themen 3
L Jar-Datei aus Eclipse geht nicht Allgemeine Java-Themen 2
HolyFUT Best Practice Wie geht man mit "schlechten" Projekten um? Allgemeine Java-Themen 7
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
F 2 JsonArray vergleichen, geht es auch einfacher ? Allgemeine Java-Themen 3
K API - Wie geht das? Allgemeine Java-Themen 2
M JUnit Serverseitig? Wie geht sowas? Allgemeine Java-Themen 2
G Erste Schritte Aufgabe - Geht das auch schneller ? Allgemeine Java-Themen 7
E JavaFX String-Wert geht "verloren" - ratlos Allgemeine Java-Themen 2
B Fehler beim Auslesen von Einstellungen. Zwei ähnliche Blöcke, nur eins geht. Allgemeine Java-Themen 5
H Unicode ausgeben ohne Umwandlung - geht das? Allgemeine Java-Themen 3
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
J Laden von JAR Files geht ohne ADMIN Rechte sehr langsam Allgemeine Java-Themen 6
R Wie geht man mit CachedRowSet um Allgemeine Java-Themen 2
R Geht das? JRE 1.4 global, 1.6.20 nur für eine Anwendung? Allgemeine Java-Themen 9
F externe module. geht das in Java? Allgemeine Java-Themen 3
M XML-Datei geht bei voller Festplatte verloren Allgemeine Java-Themen 4
B Komplettes Projekt als UML Diagramm mit eUML...geht das? Allgemeine Java-Themen 10
C Methodenkopf: Zu was wenns auch ohne geht? Allgemeine Java-Themen 3
A Javakonsolenfenster geht gleich wieder zu Allgemeine Java-Themen 6
M ireport (Jasper Report) geht nur auf meinen Rechner Allgemeine Java-Themen 3
S Rechner formatiert - nichts geht mehr. Allgemeine Java-Themen 2
T Geht das vielleicht noch einfacher? Allgemeine Java-Themen 7
M commapi unter vista, geht das? Allgemeine Java-Themen 4
V JavaProgramm von Konsole starten geht nichtmehr Allgemeine Java-Themen 4
D Geht es auch schneller doppelte Einträge zu löschen? Allgemeine Java-Themen 23
G Mit Java auf windows 2003 userrechte zugreifen geht sowas ? Allgemeine Java-Themen 2
R Drag und Drop von externen Files geht nur als Application Allgemeine Java-Themen 2
O Input stream geht net Allgemeine Java-Themen 2
J Threads, Doppelpufferung --> Beispiel gefunden, geht net Allgemeine Java-Themen 16
P rar.exe und variablenparameter als String geht net Allgemeine Java-Themen 4
H Ausführungsgeschwindigkeit reduzieren. Geht das? .. Allgemeine Java-Themen 21
K Mit Java kleine Freeware Programme erstellen. Geht das? Allgemeine Java-Themen 16
G Konsoleneingabe: vordefinierte werte setzen? geht das? Allgemeine Java-Themen 4
André B. geht das? Allgemeine Java-Themen 6
G Mouselistener geht aber danach Fehler bei JOptionPane Allgemeine Java-Themen 4
M Systemzeit der Java VM geht falsch Allgemeine Java-Themen 4
G Warum einfach wenns kompliziert auch geht? Allgemeine Java-Themen 12
C Was geht noch? Allgemeine Java-Themen 13
P Nur eine Instanz eines Programms zulassen, wie geht das? Allgemeine Java-Themen 15
G Geht das? Allgemeine Java-Themen 4
V StreamTokenizer ???? Wie geht das Allgemeine Java-Themen 3
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
kodela Textfeld nicht rechteckig Allgemeine Java-Themen 10
G Doppelklick auf Javaprogramm klapt nicht Allgemeine Java-Themen 1
W Timer terminiert nicht Allgemeine Java-Themen 5
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
W Überflüssige Deklaration vermeiden...war da nicht mal was? Allgemeine Java-Themen 3
N lwjgl kann textureSampler nicht finden Allgemeine Java-Themen 4
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
T .Jar kann man nicht ausführen Allgemeine Java-Themen 18
P JDK nicht installiert in Net Object Fusion Allgemeine Java-Themen 7
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
N Regex schlägt nicht an Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben