aboutsummaryrefslogtreecommitdiff
path: root/Info/9/3/SpaceInvaders/arbeitsauftrag3.tex
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2024-07-12 11:29:32 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2024-07-12 11:29:32 +0200
commit48ac3a27151eda2f96a52474065e48ff5a19df57 (patch)
tree0381f2850402d96f3bf444d7641017d9aa3deaa5 /Info/9/3/SpaceInvaders/arbeitsauftrag3.tex
parentaacdb7f8abd6ab3de8df255d155ab9684a932ec3 (diff)
downloadunterricht-48ac3a27151eda2f96a52474065e48ff5a19df57.tar.gz
unterricht-48ac3a27151eda2f96a52474065e48ff5a19df57.zip
improve SpaceInvaderrs material
Diffstat (limited to 'Info/9/3/SpaceInvaders/arbeitsauftrag3.tex')
-rw-r--r--Info/9/3/SpaceInvaders/arbeitsauftrag3.tex94
1 files changed, 94 insertions, 0 deletions
diff --git a/Info/9/3/SpaceInvaders/arbeitsauftrag3.tex b/Info/9/3/SpaceInvaders/arbeitsauftrag3.tex
new file mode 100644
index 00000000..52f66697
--- /dev/null
+++ b/Info/9/3/SpaceInvaders/arbeitsauftrag3.tex
@@ -0,0 +1,94 @@
+\documentclass{handout}
+\csname endofdump\endcsname
+\usepackage{minted}
+\usepackage{hyperref}
+\usepackage[ngerman]{babel}
+\usepackage{hyperref}
+\geometry{margin=2cm}
+
+\title{SpaceInvaders Arbeitsauftrag 3}
+\setcounter{section}{1}
+
+\newcommand{\M}[1]{Methode \texttt{#1}}
+\newcommand{\K}[1]{Klasse \texttt{#1}}
+\newcommand{\javainline}[1]{\mintinline{java}{#1}}
+
+\begin{document}
+\thispagestyle{empty}
+
+\subsection{\faIcon{desktop} Schießen aber bitte einfach!}
+
+\begin{defbox}{Vererbung}
+Eine Klasse kann \underline{alle} Methoden und Attribute einer anderen Klasse \boldred{erben}.
+Vererbung wird in Java mit dem Schlüsselwort \mintinline{java}{extends Oberklasse} in der Klassendefinition der Unterklasse ausgedrückt.
+
+\begin{center}
+\begin{tikzpicture}
+\begin{class}[text width=4cm]{Oberklasse}{0, 0}
+\end{class}
+\begin{class}[text width=4cm]{Unterklasse}{7, 0}
+\inherit{Oberklasse}
+\end{class}
+\end{tikzpicture}
+\end{center}
+
+Im Klassendiagramm wird die Vererbung durch eine unausgefüllte Pfeilspitze ausgedrückt.
+\end{defbox}
+
+\begin{enumerate}
+\item Erzeuge eine neue \K{Projektil} als Unterklasse von \texttt{Actor} (wähle kein Bild aus).
+\item Implementiere die Bewegung sowie das Entfernen des Projektils, falls es einen Rand berührt, in der \texttt{act}-Methode der \K{Projektil} (vgl. deine \texttt{Laser} Implementierung).
+\item Definiere die \K{Laser} als Unterklasse von \texttt{Projektil} und initialisiere die Geschwindigkeit mit dem Wert 6 im Konstruktor der \K{Laser}.
+\item Implementiere die Schüsse der Aliens in der \K{Lazer} (wähle das Bild \textit{laser2}) und initialisiere die Geschwindigkeit mit dem Wert $-5$.
+\item Passe die \M{schiessen} der \K{Alien} entsprechend an, sodass neue \texttt{Lazer} Objekte erzeugt werden.
+\end{enumerate}
+
+\subsection{\faIcon{desktop} Oh nein getroffen!}
+
+Um zu überprüfen, ob ein Alien oder das Raumschiff von einem feindlichen Projektil getroffen wurden, muss überprüft werden, ob die Objekte sich berühren.
+\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.
+In \textit{Greenfoot} bietet dazu die \K{Actor} die Methode \mintinline{java}{IsTouching(Class)} 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{enumerate}
+\item Implementiere in der \K{Raumschiff} die \M{pruefeKollision()}, in der du mittels \\ \javainline{isTouching(Lazer.class)} überprüfst, ob das Raumschiff getroffen wurde und gegebenenfalls die \M{verloren} der Welt aufrufst (\javainline{((MyWorld)getWorld()).verloren();}).
+
+Ergänze die \M{act} der \K{Raumschiff} um einen Aufruf der \M{pruefeKollision}.
+\item Implementiere in der \K{Alien} die \M{pruefeKollision()}, in der du mittels \\ \javainline{isTouching(Laser.class)} überprüfst, ob das Alien getroffen wurde.
+Falls das Alien getroffen wurde, entferne das Projektil (\javainline{removeTouching(Laser.class);}), sowie das Alien selbst (\javainline{getWorld().removeObject(this);}).
+
+Spiele zusätzlich einen Explosions-Ton ab (\javainline{Greenfoot.playSound("Explosion.wav");}).
+
+\item Wurden alle Aliens zerstört?
+\begin{enumerate}
+ \item Implementiere in der \K{MyWorld} eine \M{reduziereAlienAnzahl}, in der du die \texttt{alienAnzahl} um 1 reduzierst.
+ \item Reduziere die Alien Anzahl in der \M{pruefeKollision}, falls das Alien getroffen wurde (\javainline{((MyWorld)getWorld()).reduziereAlienAnzahl();}).
+\item Ergaenze die \M{act} der \K{MyWorld} um eine Ueberpruefung ob alle Aliens zerstört wurden und rufe gegebenenfalls die \M{gewonnen} auf.
+\end{enumerate}
+\end{enumerate}
+
+\subsection{\faIcon{desktop} Die Erde ist verloren!}
+
+Das Spiel ist auch verloren, wenn eins der Aliens den unteren Bildschirmrand, die Erde, erreicht hat.
+
+\begin{enumerate}
+\item Implementiere eine \M{pruefeSieg} in der \K{Alien}, die überprüft ob die aktuelle Y Position (\javainline{getY()}) größer oder gleich 590 ist. Falls ja soll die \M{verloren} der \K{MyWorld} aufgerufen werde.
+\item Rufe die \M{pruefeSieg} in der \M{act} des Aliens auf.
+\end{enumerate}
+
+\subsection{\faIcon{desktop} \textbf{Für Schnelle}: Tob dich aus!}
+
+Sei kreativ und erweitere das Spiel um weitere Level, andere Gegner, Projektile oder einen Highscore.
+
+\vfill
+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}