Subato

GeoGame

In dieser Aufgabe sollen Sie die geometrischen Objekte auf einem zweidimensionalen Spielfeld gegeneinander und vom Rand abstoßen lassen. Hierzu sei folgende Schnittstelle für die Spiellogik gegeben:
package name.panitz.oose;
import java.util.List;

public interface GeoGame {
  List<GeometricObject> getGeos();
  int getWidth();
  int getHeight();
  void move();
  void collisionCheck();
}
Implementieren Sie diese Schnittstelle mit einer Klasse SimpleGeoGame nach folgender Spezifikation.
  • List<GeometricObject> getGeos();
    die geometrischend Objekte des Spiels werden zurück gegeben.
  • int getWidth();
    die Spielfeldbreite wird zurück gegeben.
  • int getHeight();
    die Spielfeldhöhe wird zurück gegeben.
  • void move();;
    für jedes Objekt des Spiels wird genau einmal die Methode move() aufgerufen.
  • void collisionCheck();
    • Zunächst einmal wird für jedes Objekt gechekt, ob es an eine der vier Seiten des Spielfelds anstößt. Wenn dieses der Fall ist, so wird bei einer Berührung an der linken oder rechten Seite, der y-Wert der velocity invertiert, bei einer Berührung oben oder unten entsprechend der x-Wert.
    • Anschließend werden alle Objekte miteinander einmal geprüft, ob sie sich berühren. Sollte das der Fall sein, tauschen die beiden Objekte jeweils ihr velocity-Objekt.
Die Tests dieser Aufgabe erstellen ein Spiel mit fünf Objekten und lassen die Anweisungsfolge move();collisionCheck(); mehrere hundert Mal ausführen und vergleicht, ob die Eckpunkte der Objekte dann an den erwarteten Punkten liegt. Einen optischen Eindruck, ob Ihre Implementierung zumindest stimmig ist, auch wenn die Tests nicht zu 100% die erwarteten Ergebnisse geben, können Sie wieder mit der Klasse Play erhalten.

package name.panitz.oose; import java.util.List; import java.util.ArrayList; public class SimpleGeoGame implements GeoGame { List<GeometricObject> geos = new ArrayList<>(); int width; int height; public SimpleGeoGame(int width,int height, GeometricObject... geos) { for (var geo:geos) this.geos.add(geo); this.width = width; this.height = height; } public SimpleGeoGame(GeometricObject... geometricObjects) { this(800,600,geometricObjects); } //TODO //fehlenden Methoden nach Spezifikation implementieren }
java