diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2024-07-12 11:29:32 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2024-07-12 11:29:32 +0200 |
| commit | 48ac3a27151eda2f96a52474065e48ff5a19df57 (patch) | |
| tree | 0381f2850402d96f3bf444d7641017d9aa3deaa5 /Info/9/3/SpaceInvaders/arbeitsauftrag3.tex | |
| parent | aacdb7f8abd6ab3de8df255d155ab9684a932ec3 (diff) | |
| download | unterricht-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.tex | 94 |
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} |
