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
|
\documentclass{handout}
\csname endofdump\endcsname
\usepackage{minted}
\usepackage{hyperref}
\usepackage[ngerman]{babel}
\usepackage{hyperref}
\geometry{margin=2cm}
\title{SpaceInvaders Arbeitsauftrag 2}
\setcounter{section}{1}
\begin{document}
\thispagestyle{empty}
\subsection{\faIcon{desktop} Aliens überall!}
\begin{defbox}{Der Konstruktor}
\begin{itemize}
\item \textbf{Methode} der Klasse, die beim Erzeugen ein neues Objekt aufgerufen wird.
\item Heißt immer wie die Klasse.
\item Hat \underline{keine} Angabe eines Rückgabetyps.
\end{itemize}
\end{defbox}
\begin{enumerate}
\item (Kopiere die \texttt{Alien}-Klasse (\textit{Alien.java}) oder das ganze Projekt \textbf{SpaceInvadersVorlage2} Greenfoot-Projekt aus dem Vorlagen-Verzeichnis.)
\item Wir wollen die Aliens, die die Erde bedrohen erzeugen.
\begin{itemize}
\item Um die Anzahl der Aliens zu zählen, ergänze die Klasse \texttt{MyWorld} um das Attribut \mintinline{java}{int alienAnzahl}.
\item Wir wollen 50 Aliens in \underline{5 Reihen} aus je \underline{10 Aliens} erzeugen.
\begin{itemize}
\item Ergänze den \textbf{Konstruktor} der Klasse \texttt{MyWorld} zwei \textit{verschachtelte} \mintinline{java}{for}-Schleifen ($z \le 5$ für die \textbf{Z}eilen und $s \le 10$ für die \textbf{S}palten).
\item Erzeuge in jeder Wiederholung ein neues Alien mit \mintinline{java}{new Alien()} und füge es der Welt mit \mintinline{java}{addObject(..., 148 + s*36, 50 + z*36)} hinzu.
\item Vergiss nicht die Anzahl der Aliens in \texttt{alienAnzahl} mitzuzählen.
\end{itemize}
\end{itemize}
\end{enumerate}
\subsection{\faIcon{desktop} Pew Pew Laser Beams!}
\begin{enumerate}
\item Erzeuge die Klasse \texttt{Laser}, als Unterklasse der Klasse \texttt{Actor}.
\item Wähle das Bild \textit{Laser}.
\item Implementiere die Klasse nach folgendem Klassendiagramm: \\[0.2cm]
\begin{tikzpicture} \begin{class}[text width=4cm]{Laser}{0, 0}\attribute{geschwindigkeit}\operation{bewegen()}\end{class}\end{tikzpicture}
\item Initialisiere die Geschwindigkeit mit dem Wert 6.
\item Implementiere die Methode \mintinline{java}{void bewegen()} der Klasse \texttt{Laser}.
\begin{itemize}
\item Sie soll die neue Position des Lasers mit \\ \mintinline{java}{setLocation(getX(), getY() - geschwindigkeit);} setzen.
\item \underline{Falls} der Laser den Rand ($y=599$ \underline{oder} $y=0$) erreicht, soll der Laser mit \\ \mintinline{java}{getWorld().removeObject(this);} von der Welt entfernt werden.
\item Ergänze die Methode \texttt{act} der Klasse \texttt{Laser} um einen Aufruf der neuen Methode \texttt{bewegen}.
\end{itemize}
\item Implementiere die Methode \mintinline{java}{void schiessen()} der Klasse \texttt{Raumschiff} mit folgendem Code:
\begin{minted}{java}
Greenfoot.playSound("EnergyGun.wav");
getWorld().addObject(new Laser(), getX(),getY());
\end{minted}
\item Ergänze die Methode \texttt{act} der Klasse \texttt{Raumschiff}, dass, wenn die Leertaste (\mintinline{java}{"space"}) gedrückt ist, das Raumschiff schießt.
\item \faIcon[regular]{lightbulb} Analysiere alle Bestandteile der Zeile: \mintinline{java}{getWorld().addObject(new Laser(), getX(),getY());}
\end{enumerate}
\subsection{\faIcon{desktop} \textbf{Für Schnelle}: Die Aliens schießen zurück!}
\begin{enumerate}
\item Implementiere die Methode \mintinline{java}{void schiessen()} der Klasse \texttt{Alien} nach Vorbild der Klasse \texttt{Raumschiff}.
\item Ergänze die \texttt{act} Methode der Klasse \texttt{Alien} um einen Methodenaufruf der Methode \texttt{schiessen}.
\item \faIcon[regular]{lightbulb} Überlege Dir wie du die Geschwindigkeit des Lasers, beim Erzeugen, so initialisieren kannst, dass er sich auf dem Bildschirm nach unten bewegt.
\item Setze deine Überlegung um und passe deinen Code entsprechen an.
\item Die Aliens sollen nur mit einer gewissen Wahrscheinlichkeit einen Laser abfeuern. Feuere nur dann einen Laser ab, \underline{wenn} eine Zufallszahl von 0 bis 10000 (\mintinline{java}{Greenfoot.getRandomNumber(10000)}) kleiner gleich 4 ist.
\end{enumerate}
\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}
|