aboutsummaryrefslogtreecommitdiff
path: root/Info/10/2/JumpNRun/arbeitsauftrag3.tex
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2026-04-17 20:44:47 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2026-04-17 20:44:47 +0200
commitc38d85decda449be5b7e557f6052d8ed3bd41cdc (patch)
tree31982e5432272788f945951cae587b31b44bf552 /Info/10/2/JumpNRun/arbeitsauftrag3.tex
parent102ab3bede6592dff2771fe5d818d0837f5d3308 (diff)
downloadunterricht-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.tex63
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}