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
95
96
97
98
99
100
101
102
103
|
\documentclass{handout}
\csname endofdump\endcsname
\usepackage{minted}
\usepackage{hyperref}
\usepackage[ngerman]{babel}
\geometry{margin=2cm}
\newcommand{\Snake}{\texttt{Snake}}
\title{Snake Arbeitsauftrag 2}
\setcounter{section}{2}
\begin{document}
\thispagestyle{empty}
\subsection{\faIcon{desktop} Essen}
\begin{itemize}
\item Erstelle eine neue Klasse \texttt{Essen}.
\item Ergänze die Klasse Essen um ein \textit{Attribut} \texttt{symbol} vom Typ \texttt{Rechteck}/
\item Implementiere den \textit{Konstruktor} der Klasse \texttt{Essen}:
\begin{itemize}
\item Es soll die Position übergeben werden.
\item Initialisiere \texttt{symbol} mit einem neuen roten Rechteck an der richtigen Position mit der Größe 20x20.
\end{itemize}
\item Implementiere eine Methode \texttt{entferne()} der Klasse \texttt{Essen}, die das \texttt{symbol} mittels dessen Methode \texttt{Entfernen()} von der Zeichenfläche löscht.
\item Teste deine Klasse \texttt{Essen}, indem du neue Objekte von ihr anlegst und wieder entfernst.
\end{itemize}
\subsection{\faIcon{desktop} Zeitgesteuertes Essen}
\begin{defbox}{Zeitgesteuerte Ereignisse}
Die Methode \mintinline{java}{public void Ausführen()} unserer Spiel-Klasse wird für jedes neue Bild von der Spiel-Engine aufgerufen. \\[0.2cm]
Um Aktionen in Abhängigkeit von der Zeit auszuführen, müssen wir wissen wie viel „\textit{Zeit}“ bereits vergangen ist.
\end{defbox}
\begin{itemize}
\item Ergänze die Klasse \Snake{} um eine \textit{Attribut} \texttt{ticks}, das die Anzahl der bereits gezeichneten Bilder speichert.
\item Importiere in der Klasse \Snake{} die Java Klasse \texttt{Random}, indem du außerhalb deiner Klasse \Snake{} die Zeile \mintinline{java}{import java.util.Random;} einfügst.
\item Ergänze die Klasse \Snake{} um ein \textit{Attribut} \texttt{zufall} vom Typ \texttt{Random}, initialisiere das \textit{Attribut} im \textit{Konstruktor}.
\item Ergänze die Methode \mintinline{java}{Snake.Ausführen}:
\begin{itemize}
\item Erhöhe zu Beginn die Anzahl der bereits gezeichneten Bilder.
\item Falls das aktuelle Bild ein Vielfaches von 30 ist:
\begin{itemize}
\item Falls ein Essen in dem \textit{Attribut} \texttt{essen} der Klasse \Snake{} gespeichert ist, entferne es.
\item Erzeuge eine neues \texttt{Essen}-Objekt an einer zufälligen Position (\mintinline{java}{zufall.nextInt(max)} liefert dir eine Zufallszahl zwischen 0 und \texttt{max}).
\end{itemize}
\end{itemize}
\end{itemize}
\begin{defbox}{Modulo}
Die \boldred{Modulo-Operation}, in Java das Zeichen \texttt{\%}, liefert als Ergebnis, den Rest der Ganzzahldivision zweier Zahlen. \\[0.1cm]
\textbf{Beispiele}: \mintinline{java}{7 % 3 == 1; 64 % 30 == 4}
\end{defbox}
\newpage
\subsection{\faIcon{desktop} Wachstum}
Damit unsere Schlange wachsen kann, muss sie aus mehr Körperteilen als nur dem Kopf bestehen.
\begin{itemize}
\item Ersetze das \textit{Attribut} Kopf der Schlange durch ein Feld namens \texttt{koerper} vom Typ \texttt{Rechteck}.
\item Initialisiere das Feld im \textit{Konstruktor} der Klasse \texttt{Schlange} mit Länge 0.
\item Ergänze die Klasse \texttt{Schlange} um die Methode \mintinline{java}{wachsen(int x, int y)}:
\begin{itemize}
\item Erzeuge ein neues Feld, das um ein Element länger ist als der aktuelle Körper der Schlange.
\item Erzeuge einen neuen Kopf an der richtigen Position (grün und 20x20 Pixel groß).
\item Speichere den neuen Kopf als erstes Element in dem neu erzeugten Feld.
\item Kopiere alle Elemente des aktuellen Körpers in das neue Feld. \\
\textbf{Vergiss nicht}: Das neue Feld enthält bereits den Kopf am Index 0.
\item Speichere das neue Feld in dem \textit{Attribut} \texttt{koerper}.
\end{itemize}
\end{itemize}
\subsection{\faIcon{desktop} Bewegung der Schlange}
\begin{defbox}{Bewegung mehrere Körperteile}
\begin{tabular}{p{0.65\textwidth} p{5cm}}
\vspace{-3.5cm}
Es bietet sich an bei der Bewegung der Schlange die Bewegung der Raupen in der Natur nachzuahmen.
Dabei wird jedes Körperteil an die Position des Vorgängers gezogen.
Du kannst ein Feld rückwärts durchlaufen, indem du die dir bereits bekannte \mintinline{java}{for} Schleife leicht modifizierst.
\begin{minted}{java}
for (int i = feld.length -1; i >= 0; i--) {
...
}
\end{minted}
&
\includegraphics[keepaspectratio, width=5cm]{img/Copyrighted/caterpillar_movement.png} \\
\end{tabular}
\end{defbox}
\begin{itemize}
\item Beginnend mit dem letzten Körperteil setze die Position auf die des Körperteils davor.
\item Verschiebe anschließend den Kopf wie gewohnt in die aktuelle Richtung.
\item Teste deine Methoden \texttt{bewegen} und \texttt{wachsen}, indem du alle 40 Bilder die Schlange in die aktuelle Richtung wachsen lässt.
\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}
|