aboutsummaryrefslogtreecommitdiff
path: root/Info/9/3/SpaceInvaders/arbeitsauftrag1.tex
blob: d2528939d2028f52474bfbbd25a56fa268569d6b (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
\documentclass{handout}
\csname endofdump\endcsname
\usepackage{minted}
\usepackage{hyperref}
\usepackage[ngerman]{babel}
\usepackage{hyperref}
\geometry{margin=2cm}

\title{SpaceInvaders Arbeitsauftrag 1}
\setcounter{section}{1}

\begin{document}
\thispagestyle{empty}

\subsection{\faIcon{desktop} Erste Klasse: Das Raumschiff}
\begin{enumerate}
\item Kopiere die \textbf{SpaceInvaders} Greenfoot-Projekt Vorlage aus dem Vorlagen-Verzeichnis.
\item Erstelle eine neue Klasse \texttt{Raumschiff} als Unterklasse von \texttt{Actor}:
  \begin{itemize}
  \item Klicke mit der rechten Maustaste auf die Klasse \texttt{Actor} und wähle "\textit{neue Unterklasse}".
  \item Wähle als Bild "\textit{shuttle}" aus.
  \item Ergänze die Klasse \texttt{Raumschiff} um die Methode \texttt{pruefeTastatur()}.
    \begin{itemize}
    \item Sie soll mithilfe der von Greenfoot bereit gestellten Methode \newline \mintinline{java}{Greenfoot.isKeyDown(String keyName)} prüfen, ob die linke bzw. rechte Pfeiltaste (\mintinline{java}{"left"} bzw. \mintinline{java}{"right"}) gedrückt ist und entsprechend das Raumschiff um \underline{drei} Felder nach links bzw. rechts bewegen.
    \end{itemize}
  \item Ergänze dazu die Klasse \texttt{Raumschiff} um die Methode \mintinline{java}{bewegen(int felder)}.
    \begin{itemize}
    \item Die Position eines Actors kannst du mit der Methode \mintinline{java}{setLocation(int x, int y)} setzen.
    \item Setze die neue Position auf den Punkt $P(x_{alt} - \text{felder}| y_{alt})$
    \end{itemize}
  \end{itemize}
\end{enumerate}

\begin{defbox}{Methoden der Klasse \texttt{Actor}}
\begin{itemize}
\item \mintinline{java}{int getX()} - liefert die aktuelle X-Position
\item \mintinline{java}{int getY()} - liefert die aktuelle Y-Position
\item \mintinline{java}{void setLocation(int x, int y)} - setzt das Objekt auf den Punkt $P(x | y)$.
\end{itemize}
\end{defbox}

\subsection{\faIcon{desktop} Das Raumschiff ist Teil der Welt}

\begin{itemize}
\item Erzeuge ein neues Raumschiff, wie du es gewohnt bist und teste es, indem du die \mintinline{java}{bewegen(int felder)} Methode aufrufst.
\item Damit das Raumschiff nicht erst per Hand neu erzeugt werden muss, füge in der Methode \texttt{MyWorld} der Klasse \texttt{MyWorld} folgende Zeilen hinzu:
    \begin{minted}{java}
  Raumschiff raumschiff;
  raumschiff = new Raumschiff();
  addObject(raumschiff, 300, 565);
    \end{minted}
\item Teste deine Welt, indem du den Start-Knopf drückst.
\end{itemize}


\subsection{\faIcon{lightbulb} \underline{Für Schnelle}: Was macht dieser Code?}

Stelle eine Vermutung auf, was jede Zeile des neuen Codes in der Methode \texttt{MyWorld} bewirkt.
Was kommt dir davon bekannt vor?
Versuche die Werte in \mintinline{java}{addObject} zu verändern und überprüfe deine Vermutung.

\subsection{\faIcon{desktop} \underline{Für sehr Schnelle}: Die Klasse Alien}

Implementiere analog zu deinem Vorgehen bei der Klasse \texttt{Raumschiff} die Klasse \texttt{Alien} als Unterklasse von \texttt{Actor}, mit dem Bild "\textit{Alien1}".
\begin{itemize}
\item Ergänze die Klasse \texttt{Alien} um das Attribut \texttt{geschwindigkeit} und initialisiere es mit dem Wert \mintinline{java}{2}.
\item Die Klasse \mintinline{java}{act()} soll zunächst nur die Methode \mintinline{java}{bewegen()} aufrufen.
\item Implementiere die Methode \mintinline{java}{bewegen()} der Klasse \texttt{Alien}.
  \begin{itemize}
  \item Die Methode soll das Alien immer um \texttt{geschwindigkeit} Felder nach rechts bewegen.
  \item Prüfe, ob das Alien den linken ($x = 0$) oder rechten Seitenrand  ($x = 599$) berührt.
  \item Falls ja, drehe das Vorzeichen der Geschwindigkeit und setze die neue Position mit \newline \mintinline{java}{setLocation(getX() + geschwindigkeit, getY() + 36);}.
  \end{itemize}
\end{itemize}

\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}