diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2026-04-17 20:44:47 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2026-04-17 20:44:47 +0200 |
| commit | c38d85decda449be5b7e557f6052d8ed3bd41cdc (patch) | |
| tree | 31982e5432272788f945951cae587b31b44bf552 /Info/10/2/JumpNRun/arbeitsauftrag3.tex | |
| parent | 102ab3bede6592dff2771fe5d818d0837f5d3308 (diff) | |
| download | unterricht-c38d85decda449be5b7e557f6052d8ed3bd41cdc.tar.gz unterricht-c38d85decda449be5b7e557f6052d8ed3bd41cdc.zip | |
significantly improve jumpnrun material
* mention combining of collision detection and handling
* specify the need to cast to InteractiveElement
Diffstat (limited to 'Info/10/2/JumpNRun/arbeitsauftrag3.tex')
| -rw-r--r-- | Info/10/2/JumpNRun/arbeitsauftrag3.tex | 63 |
1 files changed, 7 insertions, 56 deletions
diff --git a/Info/10/2/JumpNRun/arbeitsauftrag3.tex b/Info/10/2/JumpNRun/arbeitsauftrag3.tex index 6ad4311a..c4285715 100644 --- a/Info/10/2/JumpNRun/arbeitsauftrag3.tex +++ b/Info/10/2/JumpNRun/arbeitsauftrag3.tex @@ -22,7 +22,7 @@ interface InteractiveElement { void onCollisionWithPlayer(Player player, JumpNRun jumpNRun); } \end{minted} -\item Ergänze die Klasse \texttt{Level} um das Attribut \texttt{interactiveObjects}, das die *Gruppe* aller interaktiver Objekte speichern soll. +\item Ergänze die Klasse \texttt{Level} um das Attribut \texttt{interactiveObjects}, das die \emph{Gruppe} aller interaktiver Objekte speichern soll. \item Zerstöre auch alle interaktiven Objekte, wenn das gesamte Level zerstört wird. (\textbf{Tipp:} \mintinline{java}|Level.destroy() { ... }|) \end{itemize} @@ -32,7 +32,10 @@ interface InteractiveElement { \begin{itemize} \item Ergänze die Methode \texttt{act} der Klasse \texttt{Player}, um die Kollisionserkennung mit allen interaktiven Objekten eines Levels. \\ (Tipp: Du kannst viel von der Kollisionserkennung der \texttt{solidObjekts} kopieren.) - \item Rufe für jedes kollidierende interaktive Objekt die Methode \texttt{onCollisionWithPlayer} mit dem Player Objekt (\mintinline{java}{this}) und dem gesamten \texttt{jumpNRun} Spiel-Objekts auf. + \item Rufe für jedes kollidierende interaktive Objekt die Methode \texttt{onCollisionWithPlayer} mit dem Player Objekt (\mintinline{java}{this}) und dem gesamten \texttt{jumpNRun} Spiel-Objekts auf. \\ + (\textbf{Hinweis}: Um die Methode \mintinline{java}{onCollisionWithPlayer(...)} aufzurufen, musst das Objekt vom Typ \texttt{InteractiveElement} sein. + Wandle das Shape mit dem \href{https://inf-schule.de/oop/java/experten/vererbung/konzept_typumwandlung}{Cast}: \mintinline{java}{((InteractiveElement)shape).onC...}) + \end{itemize} \subsubsection{\faIcon{desktop} Ziel in Sicht} @@ -56,9 +59,9 @@ Verändere das nun fertige Grundspiel nach deinen Vorstellungen. \begin{tcolorbox}[] \begin{itemize} - \item Ergänze eine Stopuhr pro Level. + \item Ergänze eine Stoppuhr pro Level. \item Füge sich bewegende Hindernisse/Gegner hinzu. - \item Ergänze Powerups die eingesammelt werden müssen. + \item Ergänze Powerups die eingesammelt werden können. \item Erweitere das Spiel um einen zweiten Spieler. \item ... \end{itemize} @@ -69,55 +72,3 @@ Verändere das nun fertige Grundspiel nach deinen Vorstellungen. Dieses Werk ist lizenziert unter einer \href{https://creativecommons.org/licenses/by-sa/4.0/}{CC BY-SA 4.0} Lizenz \faCreativeCommons\ \faCreativeCommonsBy\ \faCreativeCommonsSa. \end{document} - -% Damit unsere \textit{Snake}-Variante tatsächlich zu einem echten Spiel wird, müssen wir gewissen Ereignisse erkennen und behandeln. - -% \subsubsection{\faIcon{desktop} Interaktive Objekte verwalten} - -% Wenn der Kopf der Schlange das Essen berührt, soll das Essen verschwinden und die Schlange soll wachsen. -% \begin{defbox}{Kollision} -% \begin{tabular}{p{0.75\textwidth} p{0.5cm} p{0.2\textwidth}} -% \vspace{-1.8cm} -% Von einer Kollision spricht man, wenn zwei Objekte sich \textbf{überschneiden}. -% Eine solche Überschneidung zu erkennen kann je nach Form der Objekte kompliziert sein. -% Unsere Spieleengine \textit{GraphicAndGames} bietet dazu die Methode \mintinline{java}{GrafikSymbol.Schneidet(Area)} an. & & -% \begin{tikzpicture} -% \node[draw, opacity=0.7, minimum size=1.5cm, fill=red] {}; -% \node[circle, draw, minimum size=1cm, fill=blue] at (0.5, 0.5) {}; -% \end{tikzpicture} \\ -% \end{tabular} -% \end{defbox} - -% \begin{itemize} -% \item Implementiere eine Methode \mintinline{java}{beruehrt(Rechteck)} in der Klasse \texttt{Schlange}, die überprüft, ob der Kopf der Schlange ein anderes Rechteck schneidet (das \texttt{GrafikSymbol} der Klasse \texttt{Rechteck} ist dessen Attribut \texttt{symbol}, jedes \texttt{GrafikSymbol} hat wiederum ein Attribut \texttt{form} vom Typ \texttt{Area}). -% \item Ergänze die Methode \texttt{Ausführen} der Klasse \Snake{} um die Überprüfung, ob die Schlange das Essen berührt. Falls ja, entferne das Essen und rufe die \texttt{wachsen}-Methode der Schlange mit den Koordinaten des Essens auf. -% \end{itemize} - -% \subsubsection{\faIcon{desktop} Mit Interaktive Objekte interagieren} - -% Da es sich bei dem Rand der Welt nicht um ein Objekt handelt, können wir nicht auf die \texttt{beruehrt}-Methode der Klasse \texttt{Schlange} zurückgreifen. - -% \begin{itemize} -% \item Ändere die Methode \texttt{bewegen} der Klasse \texttt{Schlange}, sodass sie als Rückgabewert immer \mintinline{java}{true} liefert. -% \item Erweitere die Methode \texttt{bewegen} der Klasse \texttt{Schlange} um eine Überprüfung, ob der die Koordinaten des Kopfes außerhalb der Welt liegen (die Welt ist \textbf{800x600} Pixel groß). Falls der Kopf außerhalb der Welt liegt, soll \mintinline{java}{false} zurückgegeben werden. -% \end{itemize} - -% \subsubsection{\faIcon{desktop} Kollision mit sich selbst} -% Erweitere die Methode \texttt{bewegen} der Klasse \texttt{Schlange} um eine Überprüfung, ob der Kopf der Schlange eines der im folgenden Körperteile berührt (dazu kannst du auf die Methode \texttt{beruehrt} zurückgreifen). Falls ja, soll \mintinline{java}{false} zurückgegeben werden. - -% \subsection{\faIcon{desktop} Spielende} -% Nachdem die Methode \texttt{bewegen} eine Kollision festgestellt hat (Rückgabewert \mintinline{java}{false}) soll das Spiel beendet werden. - -% \begin{itemize} -% \item Implementiere eine Methode \texttt{gameOver} der Klasse \Snake{}, die das Spiel mittels der Methode \mintinline{java}{Zeichenfenster.TaktgeberStoppen();} anhält. -% \item Erweitere die Methode \texttt{gameOver} um die Ausgabe einer Nachricht. Die Klasse \texttt{Text} erlaubt es dir Text auf dem Zeichenfenster anzuzeigen. -% \end{itemize} - -% \subsection{\faIcon{desktop} Für Schnelle} -% Es fehlt unserem Spiel an einigen Ecken noch an Feinschliff. - -% \begin{itemize} -% \item Sorge dafür das Essen nur auf gerader Linie der Schlange erscheint (Ein Vielfaches der Seitenlänge des Rechtecks). -% \item Ergänze das Spiel um einen Highscore (du kannst bspw. das Attribut \texttt{ticks} wiederverwenden). -% \item Implementiere, dass die Geschwindigkeit des Spiels zunimmt. Du kannst die Taktfrequenz, in der die \texttt{Ausführen}-Methode aufgerufen wird, mit der Methode \mintinline{java}{Zeichenfenster.TaktdauerSetzen(ms);} ändern. -% \end{itemize} |
