aboutsummaryrefslogtreecommitdiff
path: root/Info/9/3/SpaceInvaders/arbeitsauftrag3.tex
blob: 52f666972b95c30e0c304c3e0c0b04e6282ef5f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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}