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.
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):

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
:

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);