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