diff options
| -rw-r--r-- | Info/9/3/SpaceInvaders/.gitignore | 2 | ||||
| -rw-r--r-- | Info/9/3/SpaceInvaders/arbeitsauftrag1.tex | 79 | ||||
| -rw-r--r-- | Info/9/3/SpaceInvaders/img/greenfoot_buttons.png | bin | 0 -> 2173 bytes | |||
| -rw-r--r-- | Info/9/3/SpaceInvaders/img/space-invaders.png | bin | 0 -> 11288 bytes | |||
| -rw-r--r-- | Info/9/3/SpaceInvaders/modellierung_handout.tex | 55 | ||||
| -rw-r--r-- | Info/9/3/SpaceInvaders/modellierung_handout_print.tex | 6 | ||||
| -rw-r--r-- | Info/9/3/SpaceInvaders/slides.md | 114 |
7 files changed, 256 insertions, 0 deletions
diff --git a/Info/9/3/SpaceInvaders/.gitignore b/Info/9/3/SpaceInvaders/.gitignore new file mode 100644 index 00000000..8f3ce7dd --- /dev/null +++ b/Info/9/3/SpaceInvaders/.gitignore @@ -0,0 +1,2 @@ +arbeitsauftrag1.pdf +*modellierung_handout.pdf diff --git a/Info/9/3/SpaceInvaders/arbeitsauftrag1.tex b/Info/9/3/SpaceInvaders/arbeitsauftrag1.tex new file mode 100644 index 00000000..d2528939 --- /dev/null +++ b/Info/9/3/SpaceInvaders/arbeitsauftrag1.tex @@ -0,0 +1,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} + diff --git a/Info/9/3/SpaceInvaders/img/greenfoot_buttons.png b/Info/9/3/SpaceInvaders/img/greenfoot_buttons.png Binary files differnew file mode 100644 index 00000000..8aab0fc9 --- /dev/null +++ b/Info/9/3/SpaceInvaders/img/greenfoot_buttons.png diff --git a/Info/9/3/SpaceInvaders/img/space-invaders.png b/Info/9/3/SpaceInvaders/img/space-invaders.png Binary files differnew file mode 100644 index 00000000..a80c4fd2 --- /dev/null +++ b/Info/9/3/SpaceInvaders/img/space-invaders.png diff --git a/Info/9/3/SpaceInvaders/modellierung_handout.tex b/Info/9/3/SpaceInvaders/modellierung_handout.tex new file mode 100644 index 00000000..a35bfaa1 --- /dev/null +++ b/Info/9/3/SpaceInvaders/modellierung_handout.tex @@ -0,0 +1,55 @@ +\documentclass[a5paper]{handout} +\csname endofdump\endcsname +\usepackage{minted} + +\title{Von der Klassenkarte zum Code} + +\begin{document} +\thispagestyle{empty} +\makedate + +\begin{defbox}{Klassenkarte $\Rightarrow$ Code} +\iftoggle{lehrerversion}{\iftrue}{\iffalse} +\begin{tabular}{p{0.5\textwidth} p{0.5\textwidth}} +\vspace{0.01cm} +\begin{tikzpicture} +\begin{class}[text width=4cm]{Lazer}{0, 0} +\attribute{x} +\attribute{y} +\attribute{geschwindigkeit} +\operation{bewegen()} +\end{class} +\end{tikzpicture} +& +\begin{minted}[]{java} +public class Lazer +{ + int x; + int y; + int geschwindigkeit; + + public void bewegen() { + ... + } +} +\end{minted} +\\ +\end{tabular} +\else +\vspace{7cm} +\fi +\end{defbox} + +\section*{Schritte} +\begin{enumerate}[itemsep=0.2cm] +\item Klasse mithilfe des \gap{{\Huge Klassennamen}} definieren. +\item Attribute mit geeigneten \gap{{\Huge Datentypen}} deklarieren. +\vspace{0.3cm} +\item Methoden mit geeignetem \iflehrer{{\Huge Rückgabetyp und Parametern}}{\ruletoend{0.1pt}} \\ + definieren. +\end{enumerate} + +\subsection*{Hinweis \faIcon{lightbulb}} +Attribute sind wie Variablen mit dem Unterschied, dass sie innerhalb eines Objekts gültig sind. +Das bedeutet Attribute können, ohne neu deklariert werden zu müssen, in mehreren Methoden verwendet werden. +\end{document} diff --git a/Info/9/3/SpaceInvaders/modellierung_handout_print.tex b/Info/9/3/SpaceInvaders/modellierung_handout_print.tex new file mode 100644 index 00000000..4ca794ac --- /dev/null +++ b/Info/9/3/SpaceInvaders/modellierung_handout_print.tex @@ -0,0 +1,6 @@ +\documentclass[landscape]{article} +\usepackage{pdfpages} +\begin{document} +\pagestyle{empty} +\includepdf[pages={1,1}, nup=2x1]{modellierung_handout.pdf} +\end{document} diff --git a/Info/9/3/SpaceInvaders/slides.md b/Info/9/3/SpaceInvaders/slides.md new file mode 100644 index 00000000..1a262943 --- /dev/null +++ b/Info/9/3/SpaceInvaders/slides.md @@ -0,0 +1,114 @@ +--- +header-includes: | + \makeatletter + \beamer@ignorenonframefalse + \makeatother +--- + +## Ziel + +{.center} + +## \faIcon{pencil-alt} Arbeitsauftrag - Modellierung 10 min {.standout} + +Erstelle eine Klassendiagramm (mehrere Klassenkarten) zu allen Klassen, die +du bei SpaceInvaders entdecken kannst. + +## Exkurs: Wie funktioniert ein Spiel? + +* Wer zeichnet das Bild? +* Wer spielt den Ton ab? +* Wer prüft ob eine Taste gedrückt wurde? +* Wer ruft die Methoden unserer Objekte auf und wann? + +\pause + +Eine \boldred{Engine} und in unserem Fall Greenfoot. + +## Exkurs: EVA-Prinzip {.t} + +::: {.columns} +:::: {.column width=65%} +\vspace{0.2cm} +\only<2->{ +Trennung der Datenverarbeitung in: + +\begin{itemize} +\item \boldred{E}ingabe: \texttt{input()} +\item \boldred{V}erarbeitung: \texttt{update()} +\item \boldred{A}usgabe: \texttt{output()} +\end{itemize} +} + +\vspace{0.1cm} +\only<3->{\textbf{\faIcon{lightbulb} Wie oft müssen wir die drei Schritte ausführen?}} + +\only<4->{ +Solange das Spiel läuft! + +\begin{block}{EVA-Loop} +\phantomsection\label{eva-loop} + +\texttt{solange Spiel aktiv}\\ +~~\texttt{input()}\\ +~~\texttt{update()}\\ +~~\texttt{output()}\\ +\end{block} +} +:::: + +:::: {.column width=30%} +\vspace{1.5cm} +\begin{tikzpicture} +\only<2->{ + \node[line width=1pt, draw, minimum width=3cm, rounded corners=5pt] (e) {Eingabe}; + \node[line width=1pt, draw, minimum width=3cm, rounded corners=5pt, below=of e] (v) {Verarbeitung}; + \node[line width=1pt, draw, minimum width=3cm, rounded corners=5pt, below=of v] (a) {Ausgabe}; + + \draw[-{Triangle}, line width=1pt] (e) to (v); + \draw[-{Triangle}, line width=1pt] (v) to (a); +} + +\only<4>{ + \draw[-{Triangle}, line width=1pt, dashed] + (a.east) -- + ($(a.east) + (0.5, 0)$) -- + ($(e.east) + (0.5, 0)$) -- + (e.east); +} +\end{tikzpicture} +:::: +::: + +## `Update()` - der spannende Teil + +Greenfoot hat zwei wichtige Klassen: + +* World - Die Spielwelt +* Actor - Ein Objekt, das Teil der Welt ist und etwas tun kann + +### Ein Actor + +Damit Grennfoot ein Objekt etwas tun lassen kann, muss es ein `Actor` *sein*. + +### Wie geht das? (Genaueres beim nächsten Mal) + +* Die Klassendefinition muss `class Klassenname extends Actor { ... }`{.java} enthalten +* Die Klassen muss die Methode`public void act() { ... }`{.java} definieren + +## Greenfoot und die geheimnisvollen Knöpfe + +{.center} + +### Act + +Ruft die `act`-Methode jedes Actors [einmal]{.underline} auf. + +### Run + +Startet einen **EVA**-Loop und ruft während dem `Update`-Schritt die `act`-Methode jedes Actors auf. + +## \faIcon{desktop} Arbeitsauftrag - Implementiere die Klasse Raumschiff + +* Kopiere das Greenfoot-Projekt **SpaceInvaders** aus dem Vorlagen-Laufwerk und öffne es in Greenfoot. +* Bearbeite den Arbeitsauftrag **SpaceInvaders AA 1.pdf** |
