Anfänger-Java-Frage - "Breakout" -Spiel. Was ist mein nächster Schritt?

9

Dies ist mein erster Beitrag zu SO!

Ich selbst habe ein paar Wochen an Stanfords "Programming Methodology" -Klasse gearbeitet, die eine Einführung in die Programmierung mit Java ist. Ich habe bisher alle Programme mit wenig Schwierigkeiten gemacht und dabei mit minimaler Schwierigkeit geforscht, was ich brauchte.

Im Moment habe ich nur einen Satz Steine ​​und einen Ball, den ich von den Wänden abprallen lassen konnte. Momentan macht der Ball nichts anderes, als in der Leinwand herumzuspringen und nur durch die Steine ​​zu laufen Es gibt viele Schritte, bei denen ich mich ziemlich sicher bin. Die, mit denen ich eine harte Zeit habe, sind ...

1) Lass den Ball von den Steinen abprallen.
2) Bringen Sie die Steine ​​zum Verschwinden, wenn der Ball von ihnen abprallt.

einige Ressourcen, die ich verwendet habe

Verwendung des ACM-Grafikpakets
Stanford PDF mit den Richtlinien für die Zuweisung

Ich denke, meine Frage ist. Was muss ich verstehen, um die oben aufgeführten Probleme lösen zu können? In einer der Vorlesungen spricht der Professor über die Verwendung von "getElementAt ()". Aber ich verstehe nicht wirklich, wie diese Methode funktioniert oder wie ich sie nutzen kann, um meinen Ball von den Steinen abprallen zu lassen und sie dann verschwinden zu lassen.

Code, den ich bisher geschrieben habe -

%Vor%

Danke Leute!

    
Sandi 21.03.2011, 17:18
quelle

3 Antworten

2

Es gibt natürlich viele Dinge, die getan werden könnten, um Ihr Programm zu verbessern. Aber um Ihr nächstes Problem zu lösen, müssen Sie ein wenig von der "Magie" der Klassen verstehen, auf die Sie angewiesen sind.

Ich habe Ihre API nicht gründlich studiert, aber es sieht so aus, als ob Ihr Aufruf add(brick); Ihren Baustein zu einem intern in GraphicsProgram gespeicherten Array / Sammlung hinzufügt (wenn Sie den Quellcode der Klassen erhalten, von denen Sie abhängen) es könnte hilfreich sein, den Code zu lesen und zu verstehen). Sie können auf die später hinzugefügten Objekte mit getElementAt zugreifen. Also, wenn Sie einen Baustein an der Stelle (10,20) hinzufügen und später getElementAt(10,20) aufrufen, sollte er diesen Baustein zurückgeben.

Sie sollten Ihre moveBall -Methode ändern, um zu prüfen, ob die neue Position des Balls einen Stein enthält, und wenn ja, entsprechend handeln. Etwas wie das:

%Vor%

Sie müssen vielleicht ein wenig mit den Werten experimentieren, die Sie in getElementAt übergeben und was genau Sie tun, wenn Sie einen Baustein finden. Sie müssen berücksichtigen, dass die Steine ​​keine Punkte sind, sondern eine Höhe und eine Breite haben, der Ball bewegt sich und auch kein Punkt ...

Bearbeiten: Dein Ball wird ebenfalls zur Sammlung hinzugefügt. So könnte es möglich sein, dass der Ball anstelle eines Steines zurückgegeben wird. Du solltest nicht die tatsächliche Position deines Balls an die getElementAt -Methode weitergeben, sondern einen Wert, bei dem sich der Ball nach der Hälfte des Ballradius bewegt, wenn kein Stein im Weg ist.

    
Arne 21.03.2011 17:46
quelle
1
%Vor%

... diese beiden Methoden funktionieren perfekt zusammen ...

%Vor%

getElementAt(x, y) - gibt das Objekt am angegebenen Punkt zurück. Zerlegen Sie das Problem so weit wie möglich, wenn Sie es nicht schnell lösen können.

    
zest 01.09.2012 23:55
quelle
0

Indizieren Sie die Bausteine ​​so, dass Sie leicht überprüfen können, ob ein Baustein an einer bestimmten Koordinate existiert.

Wenn Sie einen Baustein erstellen, fügen Sie ihn dem Container hinzu und verlieren ihn dann. Sie haben keinen Hinweis darauf, dass Sie den aktuellen Ballstandort vergleichen können.

Basierend auf Ihrem Entwurf sollten Sie dies durch ein zweidimensionales Array tun. Wenn Sie die Bausteine ​​erstellen, fügen Sie auch das Objekt GRect in ein zweidimensionales Array ein. Eine Dimension sollte die Zeile und die andere die Spalte sein. Dann können Sie mit Hilfe dieses Arrays auf diese Bausteine ​​mit X- und Y-Koordinaten zugreifen. (Dies ist, was Sie tun müssen, um einen Bounce zu erkennen.)

Wenn sich der Ball so bewegt, wie Sie ihn von Wänden abprallen sehen, prüfen Sie, ob die Position des Balls ihn an eine Stelle grenzt, an der ein Stein sein könnte. Wenn es aus irgendeiner Richtung geschieht, dann überprüfe, ob der Stein tatsächlich da ist, indem du dein Array ansiehst. Wenn dort ein Stein ist, hüpfe den Ball und entferne den Stein. Stellen Sie außerdem sicher, dass diese Position im Array auf null gesetzt wird, um anzuzeigen, dass der Baustein nicht mehr vorhanden ist.

Dann hast du auch deine Siegbedingung ... wenn alle Elemente des Arrays auf null gesetzt wurden.

    
Erick Robertson 21.03.2011 17:39
quelle

Tags und Links