Skip to content

3.5 Versteckter Punkt

Beim Projekt „Versteckter Punkt“ wird auf der Leinwand ein Punkt versteckt und der Spieler muss raten, wo er sich befindet. Bei jedem Mausklick bekommt er die Entfernung bis zu dem Punkt angezeigt. Im Projektordner des Prototyps findet sich im Unterordner dist die Datei VersteckterPunkt.jar, mit der du das Spiel einige Male spielen kannst, um den Ablauf zu verstehen.

Öffne das Projekt und arbeite in der Klasse VerteckterPunkt. Deklariere dann die Attribute mausi vom Typ SGMaus und punkt vom Typ SGKreis.

Im Konstruktor müssen nun die Objekte erzeugt werden. Der Punkt soll einen Radius von 20 haben und an einer zufälligen Position erstellt werden (siehe vorangegangenes Kapitel zu Zufallszahlen). Um das weitere Arbeiten zu erleichtern, soll er sichtbar bleiben – im späteren Spiel muss er natürlich unsichtbar sein.

Der Spielablauf soll in der Methode spiele implementiert werden. Dabei muss unter anderem der Abstand des Mausklicks vom gesuchten Punkt berechnet werden. Dazu verwende den folgenden Quelltext, der den Satz des Pythagoras nutzt.

Prototyp

Abstandsberechnung
mit dem Satz des Pythagoras

Zur Abstandsberechnung muss zuerst die Differenz der x-Werte und die Differenz der y-Werte berechnet werden, um die Länge der beiden Katheten zu erhalten. Diese beiden Längen müssen quadriert und anschließend addiert werden. Zieht man die Wurzel aus dem Ergebnis, erhält man dne Abstand der beiden Punkte.

    double dx, dy, abstand;
dx = mausi.gibX() - punkt.gibMittelpunktX();
dy = mausi.gibY() - punkt.gibMittelpunktY();
abstand = Math.sqrt(dx*dx + dy*dy):   
            
                    
        
pythagoras

Der Spielablauf soll in der Methode spiele implementiert werden. Dabei muss unter anderem der Abstand des Mausklicks vom gesuchten Punkt mit dem Satz des Pythagoras berechnet werden (siehe oben). Verwende das folgende Struktogramm für die Methode spiele:

VersteckterPunktspieleII

Zusatzaufgabe
Füge die folgenden Erweiterungen hinzu:

  • In einer Variablen wird die Anzahl der bisherigen Klicks gespeichert und bei jedem weiteren Klick ausgegeben.
  • Bei einem Klick wird an der momentanen Position ein kleiner schwarzer Punkt erstellt, um anzuzeigen, wo bereits geklickt wurde.
  • Zusätzlich soll bei einem Klick ein weiterer Kreis mit dem Radius des Abstands hinzugefügt werden.
  • Erkläre, warum man dann nie mehr als drei Versuche braucht, um den versteckten Punkt zu finden.

Hinweis

Mit  SGSystem.zeigeKonsole(true); kann die SGE-eigene Konsole eingeblendet werden.
Mit der Anweisung SGSystem.ausgabeInKonsole("Treffer"); kann dann eine Nachricht ausgegeben werden.

Hinweis

Möchte man den Wert einer Variablen in einen Text einfügen, geht das mit einer String-Verknüpfung, beispielsweise:
SGSystem.ausgabeInKonsole("Daneben! Der Abstand beträgt " + abstand);