aboutsummaryrefslogtreecommitdiff
path: root/Info
diff options
context:
space:
mode:
Diffstat (limited to 'Info')
-rw-r--r--Info/9/3/SpaceInvaders/.gitignore2
-rw-r--r--Info/9/3/SpaceInvaders/arbeitsauftrag2.tex73
l---------Info/9/3/SpaceInvaders/project1
-rw-r--r--Info/9/3/SpaceInvaders/slides.md159
4 files changed, 234 insertions, 1 deletions
diff --git a/Info/9/3/SpaceInvaders/.gitignore b/Info/9/3/SpaceInvaders/.gitignore
index 8f3ce7dd..c903fe1c 100644
--- a/Info/9/3/SpaceInvaders/.gitignore
+++ b/Info/9/3/SpaceInvaders/.gitignore
@@ -1,2 +1,2 @@
-arbeitsauftrag1.pdf
+arbeitsauftrag*.pdf
*modellierung_handout.pdf
diff --git a/Info/9/3/SpaceInvaders/arbeitsauftrag2.tex b/Info/9/3/SpaceInvaders/arbeitsauftrag2.tex
new file mode 100644
index 00000000..afe3615f
--- /dev/null
+++ b/Info/9/3/SpaceInvaders/arbeitsauftrag2.tex
@@ -0,0 +1,73 @@
+\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, 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.
+\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}
diff --git a/Info/9/3/SpaceInvaders/project b/Info/9/3/SpaceInvaders/project
new file mode 120000
index 00000000..da8596de
--- /dev/null
+++ b/Info/9/3/SpaceInvaders/project
@@ -0,0 +1 @@
+/home/muhq/code/greenfoot-examples/SpaceInvaders \ No newline at end of file
diff --git a/Info/9/3/SpaceInvaders/slides.md b/Info/9/3/SpaceInvaders/slides.md
index 1a262943..2ebe9bff 100644
--- a/Info/9/3/SpaceInvaders/slides.md
+++ b/Info/9/3/SpaceInvaders/slides.md
@@ -112,3 +112,162 @@ Startet einen **EVA**-Loop und ruft während dem `Update`-Schritt die `act`-Meth
* Kopiere das Greenfoot-Projekt **SpaceInvaders** aus dem Vorlagen-Laufwerk und öffne es in Greenfoot.
* Bearbeite den Arbeitsauftrag **SpaceInvaders AA 1.pdf**
+
+## \faIcon{chalkboard} Raumschiff & Alien {.standout}
+
+Das Projekt **SpaceInvadersVorlage2** enthält eine mögliche Lösung für den Arbeitsauftrag 1
+
+## Von der Klassenkarte zum Code
+
+::: {.columns align=center}
+:::: {.column width=30%}
+\begin{tikzpicture}
+\begin{class}[text width=4cm]{Raumschiff}{0, 0}
+\attribute{x}
+\attribute{y}
+\operation{bewegen()}
+\end{class}
+\end{tikzpicture}
+::::
+
+:::: {.column width=60%}
+```java
+public class Raumschiff // Klassendefinition
+{ // Attribute
+ int x;
+ int y;
+
+ // Methoden
+ public void bewegen() {
+ ...
+ }
+}
+```
+::::
+:::
+
+## Von der Klasse zum Objekt
+
+::: {.columns align=center}
+:::: {.column width=45%}
+\begin{tikzpicture}
+\begin{class}[text width=4cm]{Raumschiff}{0, 0}
+\attribute{x}
+\attribute{y}
+\operation{bewegen()}
+\end{class}
+\end{tikzpicture}
+::::
+
+:::: {.column width=5%}
+\Large $\Rightarrow$
+::::
+
+:::: {.column width=45%}
+\pause
+\begin{tikzpicture}
+\begin{object}[text width=4cm]{rs1: Raumschiff}{0, 0}
+\attribute{x = 300}
+\attribute{y = 565}
+\end{object}
+\end{tikzpicture}
+::::
+:::
+
+\vspace{1cm}
+\pause
+### \faIcon{lightbulb} Wo kommen die Attributwerte her?
+
+\pause
+Sie müssen beim Erzeugen eines Objekts angegeben werden.
+
+## Objekte erzeugen
+
+Objekte einer Klasse werden mit dem Schlüsselwort `new`{.java} erzeugt.
+
+\pause
+### \faIcon{pencil-alt} [Der Konstruktor]{.underline}
+
+>- **Methode** der Klasse, die beim Erzeugen ein neues Objekt aufgerufen wird.
+>- Heißt immer wie die Klasse.
+>- Hat [keine]{.underline} Angabe eines Rückgabetyps.
+
+\pause
+::: {.columns}
+:::: {.column width=35%}
+\begin{tikzpicture}
+\begin{class}[text width=4cm]{Raumschiff}{0, 0}
+\attribute{x}
+\attribute{y}
+\operation{bewegen()}
+\end{class}
+\end{tikzpicture}
+::::
+
+:::: {.column width=65%}
+```java
+public class Raumschiff {
+int x; // Attribute
+int y;
+public Raumschiff () { // Konstruktor
+ x = 300;
+ y = 565;
+}
+```
+::::
+:::
+
+## \faIcon{pencil-alt} Konstruktor \only<2->{mit Parametern}
+
+### \faIcon{lightbulb} Was wenn die Attributwerte nicht immer gleich sein sollen?
+
+\pause
+$\Rightarrow$ Wir können dem Konstruktor Parameter übergeben.
+
+::: {.columns align=center}
+:::: {.column width=40%}
+\pause
+`new Raumschiff(13, 12);`{.java}
+::::
+
+:::: {.column width=5%}
+\Large $\Rightarrow$
+::::
+
+:::: {.column width=45%}
+\pause
+\begin{tikzpicture}
+\begin{object}[text width=4cm]{rs1: Raumschiff}{0, 0}
+\attribute{x = 13}
+\attribute{y = 12}
+\end{object}
+\end{tikzpicture}
+::::
+:::
+
+## \faIcon{desktop} Arbeitsauftrag - Erzeuge neue Aliens 20min
+
+\centering
+Bearbeite den Arbeitsauftrag **SpaceInvaders AA 2.pdf**
+
+## Methoden aufrufen
+
+### Was wir bereits können:
+
+Methoden des eigenen Objekts aufrufen.
+
+`bewegen(); // Ruft die Methode bewegen auf dem Objekt selbst auf`{.java}
+
+### Was wir neues brauchen:
+
+Methoden anderer Objekte aufrufen.
+
+```java
+ // Ruft die Methode bewegen auf anderesObject auf
+anderesObject.bewegen();
+```
+
+## \faIcon{desktop} Arbeitsauftrag - Schiessen Schiessen Schiessen 15min
+
+\centering
+Bearbeite den Arbeitsauftrag **SpaceInvaders AA 2.pdf**