aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Info/11/NTG/Intro/WhackAMole_Angabe.json1
-rw-r--r--Info/11/NTG/Intro/WhackAMole_Lsg.json1
-rw-r--r--Info/11/NTG/Intro/handout.tex55
-rw-r--r--Info/11/NTG/Intro/img/mentimeter_qr_code.pngbin0 -> 15524 bytes
-rw-r--r--Info/11/NTG/Intro/img/whack_a_mole_arcade.jpgbin0 -> 153978 bytes
-rw-r--r--Info/11/NTG/Intro/img/whack_a_mole_online_ide.jpgbin0 -> 3662 bytes
-rw-r--r--Info/11/NTG/Intro/slides.md184
7 files changed, 241 insertions, 0 deletions
diff --git a/Info/11/NTG/Intro/WhackAMole_Angabe.json b/Info/11/NTG/Intro/WhackAMole_Angabe.json
new file mode 100644
index 00000000..cf72c5e6
--- /dev/null
+++ b/Info/11/NTG/Intro/WhackAMole_Angabe.json
@@ -0,0 +1 @@
+{"name":"WhackAMole","modules":[{"name":"WhackAMole","text":"class WhackAMole implements Runnable {\n /**\n * Feld aller Maulwuerfe\n * TODO 1: Deklariere ein Feld/Array vom Typ Mole mit Namen moles\n */\n\n /**\n * Bereits vergangene Zeit\n */\n int ticks = 0;\n\n /**\n * Erzeugt einen neues Spiel und erstellt alle 9 Maulwuerfe\n */\n public WhackAMole() {\n // TODO: Initialisiere das Feld moles mit der Laenge 9\n for (int i = 0; i < 0 /* FIXME 1: moles.length */; i++) {\n int x = ((i % 3) + 1) * 200;\n int y = ((i / 3) + 1) * 150;\n Mole mole = new Mole(x, y); \n // TODO 1: Speichere das neue Objekt mole im Feld moles an der Stelle i\n\n // Die Maulwuerfe starten unsichtbar\n // TODO 2: Setze die Sichtbarkeit des neuen Maulwurfs auf false\n // FIXME 2: mole.setVisible(false);\n }\n }\n\n /**\n * Entscheidet ob ein Maulwurf auftaucht oder verschwindet\n * \n * Die Wahrscheinlichkeit dafuer dass ein Maulwurf auftaucht liegt bei 3%.\n * Die Wahrscheinlichkeit fuer das Verschwinden eines Maulwurfs betraegt 5%.\n */\n public void handleMole(Mole mole) {\n if(mole.isVisible()) {\n if(Math.random() <= 0.05) {\n // TODO 2: Setze die Sichtbarkeit des Maulwurfs auf false\n }\n } else {\n if(Math.random() <= 0.03) {\n // TODO 2: Setze die Sichtbarkeit des Maulwurfs auf true\n }\n }\n }\n\n /**\n * Aktiviert alle nicht zerstoerten Maulwuerfe\n * \n * Die Methode wird alle 100 Millisekunden aufgerufen.\n * Das Spiel wird beendet falls kein Maulwurf mehr aktiviert wurde.\n */\n public void run() {\n\n\n for (int i = 0; i < 0 /* FIXME 1: moles.length */; i++) {\n Mole mole /* FIXME 1: Speichere das aktuelle Objekt in der Variable mole */;\n // TODO 2: Die Anweisung soll ausgefuehrt werden wenn der Maulwurf NICHT zerstoert ist\n if(false /* FIXME 2: isDestroyed() liefert ob der Maulwurf bereits zerstoert wurde*/) {\n handleMole(mole);\n }\n }\n\n // TODO 3: Beende das Spiel falls keine Maulwurfe mehr uebrig sind\n }\n\n /**\n * Startet das Spiel\n */\n public void start() {\n Timer.repeat(this, 100);\n }\n \n /**\n * Beendet das Spiel\n */\n public void gameOver() {\n println(\"Game Over!\");\n System.exit(0);\n }\n}\n\nWhackAMole game = new WhackAMole();\ngame.start();\n","identical_to_repository_version":true,"is_copy_of_id":1395509,"repository_file_version":3},{"name":"Mole","text":"class Mole extends Sprite {\n /**\n * Die Zeit bis ein getroffener Maulwurf tatsaechlich verschwindet.\n * -1 beduetet der Maulwurf wurde noch nicht getroffen.\n */\n int timeToDestruction = -1;\n\n /**\n * Erzeugt einen neuen Maulwurf\n * \n * @param x Die X-Koordinate des Maulwurfs\n * @param y Die y-Koordinate des Maulwurfs\n */\n Mole(int x, int y) {\n super(x, y, SpriteLibrary.Minesweeper, 18);\n scale(2);\n reactToMouseEventsWhenInvisible(false);\n }\n\n /**\n * behandlet geklickte Maulwuerfe\n * \n * Die Methode act wird ca. 30 mal pro Sekunde aufgerufen.\n * Sie reduziert die Zeit bis der Maulwurf zerstoert werden soll\n * und zerstoert in wenn die Zeit aubgelaufen ist.\n */\n public void act() {\n if(timeToDestruction == -1) {\n return;\n }\n\n timeToDestruction = timeToDestruction - 1;\n if(timeToDestruction == 0) {\n destroy();\n }\n }\n\n /**\n * anedert das Bild und startet die Behandlung eines geklickten Maulwurfs\n */\n public void onMouseDown(double x, double y, int key) {\n setImageIndex(17);\n timeToDestruction = 10;\n }\n}","identical_to_repository_version":true,"is_copy_of_id":1395511,"repository_file_version":2}],"settings":{"libraries":[]}} \ No newline at end of file
diff --git a/Info/11/NTG/Intro/WhackAMole_Lsg.json b/Info/11/NTG/Intro/WhackAMole_Lsg.json
new file mode 100644
index 00000000..c340528b
--- /dev/null
+++ b/Info/11/NTG/Intro/WhackAMole_Lsg.json
@@ -0,0 +1 @@
+{"name":"WhackAMole","modules":[{"name":"WhackAMole","text":"class WhackAMole implements Runnable {\n /**\n * Feld aller Maulwuerfe\n */\n Mole[] moles;\n\n /**\n * Bereits vergangene Zeit\n */\n int ticks = 0;\n\n /**\n * Erzeugt einen neues Spiel und erstellt alle 9 Maulwuerfe\n */\n public WhackAMole() {\n moles = new Mole[9];\n for (int i = 0; i < moles.length; i++) {\n int x = ((i % 3) + 1) * 200;\n int y = ((i / 3) + 1) * 150;\n moles[i] = new Mole(x, y);\n moles[i].setVisible(false);\n }\n }\n\n /**\n * Entscheidet ob ein Maulwurf auftaucht oder verschwindet\n * \n * Die Wahrscheinlichkeit dafuer dass ein Maulwurf auftaucht liegt bei 3%.\n * Die Wahrscheinlichkeit fuer das Verschwinden eines Maulwurfs betraegt 5%.\n */\n public void handleMole(Mole mole) {\n if(mole.isVisible()) {\n if(Math.random() <= 0.05) {\n mole.setVisible(false);\n }\n } else {\n if(Math.random() <= 0.03) {\n mole.setVisible(true);\n }\n }\n }\n\n /**\n * Aktiviert alle nicht zerstoerten Maulwuerfe\n * \n * Die Methode wird alle 100 Millisekunden aufgerufen.\n * Das Spiel wird beendet falls kein Maulwurf mehr aktiviert wurde.\n */\n public void run() {\n boolean molesLeft = false;\n for (int i = 0; i < moles.length; i++) {\n Mole mole = moles[i];\n if(!mole.isDestroyed()) {\n handleMole(mole);\n molesLeft = true;\n }\n }\n\n if(!molesLeft) {\n gameOver();\n }\n }\n\n /**\n * Startet das Spiel\n */\n public void start() {\n Timer.repeat(this, 100);\n }\n \n /**\n * Beendet das Spiel\n */\n public void gameOver() {\n println(\"Game Over!\");\n System.exit(0);\n }\n}\n\nWhackAMole game = new WhackAMole();\ngame.start();\n","identical_to_repository_version":true,"is_copy_of_id":1395509,"repository_file_version":2},{"name":"Mole","text":"class Mole extends Sprite {\n /**\n * Die Zeit bis ein getroffener Maulwurf tatsaechlich verschwindet.\n * -1 beduetet der Maulwurf wurde noch nicht getroffen.\n */\n int timeToDestruction = -1;\n\n /**\n * Erzeugt einen neuen Maulwurf\n * \n * @param x Die X-Koordinate des Maulwurfs\n * @param y Die y-Koordinate des Maulwurfs\n */\n Mole(int x, int y) {\n super(x, y, SpriteLibrary.Minesweeper, 18);\n scale(2);\n reactToMouseEventsWhenInvisible(false);\n }\n\n /**\n * behandlet geklickte Maulwuerfe\n * \n * Die Methode act wird ca. 30 mal pro Sekunde aufgerufen.\n * Sie reduziert die Zeit bis der Maulwurf zerstoert werden soll\n * und zerstoert in wenn die Zeit aubgelaufen ist.\n */\n public void act() {\n if(timeToDestruction == -1) {\n return;\n }\n\n timeToDestruction = timeToDestruction - 1;\n if(timeToDestruction == 0) {\n destroy();\n }\n }\n\n /**\n * anedert das Bild und startet die Behandlung eines geklickten Maulwurfs\n */\n public void onMouseDown(double x, double y, int key) {\n setImageIndex(17);\n timeToDestruction = 10;\n }\n}","identical_to_repository_version":true,"is_copy_of_id":1395511,"repository_file_version":2}],"settings":{"libraries":[]}} \ No newline at end of file
diff --git a/Info/11/NTG/Intro/handout.tex b/Info/11/NTG/Intro/handout.tex
new file mode 100644
index 00000000..a89dd9c2
--- /dev/null
+++ b/Info/11/NTG/Intro/handout.tex
@@ -0,0 +1,55 @@
+\documentclass[a5paper]{handout}
+\csname endofdump\endcsname
+\usepackage{minted}
+\usepackage{hyperref}
+
+\begin{document}
+\thispagestyle{empty}
+\section*{\faIcon{desktop} Arbeitsauftrag: Wiederholung Java}
+
+\textbf{Erklärung}
+\begin{itemize}
+\item \mintinline{java}{// TODO n: } markiert eine Stelle, die in Aufgabe \textbf{n} bearbeitet werden muss.
+\item \mintinline{java}{/* FIXME n: */} markiert bestehenden Code, der in Aufgabe \textbf{n} verändert werden muss.
+\end{itemize}
+
+\textbf{Start}
+\begin{enumerate}
+\item Öffne die Online-IDE (\url{www.online-ide.de}) in deinem Browser.
+\item Melde dich mit dem von mir erhaltenen Nutzer Namen und Passwort an.
+\item Öffne das Projekt \textit{WhackAMole}.
+\end{enumerate}
+
+
+\subsection*{1. \faIcon{desktop} Felder - 10 min}
+
+\begin{defbox}{Erinnerung}
+Relevante Stellen sind mit \mintinline{java}{// TODO 1:} und \mintinline{java}{/* FIXME 1: /*} markiert.
+\end{defbox}
+
+\begin{enumerate}
+\item \textit{Deklariere} und \textit{Initialisiere} ein Feld \texttt{moles}, in dem mehrere Objekte der Klasse \texttt{Mole} gespeichert werden sollen.
+\item Verwende die \textit{Länge} des Feldes \texttt{moles} als Obergrenze für die Zählvariable \texttt{i} in den beiden \mintinline{java}{for}-Schleifen.
+\item Speichere jedes neu erzeugte Objekt der Klasse \texttt{Mole} in dem Feld \texttt{moles}.
+\end{enumerate}
+
+\subsection*{2. \faIcon{desktop} Objekte verwenden - 10 min}
+
+\begin{enumerate}
+\item Setze die Sichtbarkeit neuer Maulwürfe auf \mintinline{java}{false}.
+\item Behandle alle \underline{nicht} zerstörten Maulwürfe in der Methode \texttt{run}.
+\item Setze die Sichtbarkeit des behandelten Maulwurfs entsprechend.
+\end{enumerate}
+
+\subsection*{3. \faIcon{desktop} Spiellogik - 10 min}
+
+Implementiere einen Algorithmus, der erkennt, dass keine Maulwürfe mehr übrig sind und beende anschließend das Spiel.
+
+\vspace{0.3cm}
+\textbf{Für Schnelle:}
+\begin{enumerate}
+\item Spaß haben.
+\item Implementiere einen Highscore in Abhängigkeit von der Zeit.
+\item Färbe zufällig Maulwürfe in einer anderen Farbe, die dann nicht angeklickt werden dürfen.
+\end{enumerate}
+\end{document}
diff --git a/Info/11/NTG/Intro/img/mentimeter_qr_code.png b/Info/11/NTG/Intro/img/mentimeter_qr_code.png
new file mode 100644
index 00000000..18f1f02a
--- /dev/null
+++ b/Info/11/NTG/Intro/img/mentimeter_qr_code.png
Binary files differ
diff --git a/Info/11/NTG/Intro/img/whack_a_mole_arcade.jpg b/Info/11/NTG/Intro/img/whack_a_mole_arcade.jpg
new file mode 100644
index 00000000..553d3d66
--- /dev/null
+++ b/Info/11/NTG/Intro/img/whack_a_mole_arcade.jpg
Binary files differ
diff --git a/Info/11/NTG/Intro/img/whack_a_mole_online_ide.jpg b/Info/11/NTG/Intro/img/whack_a_mole_online_ide.jpg
new file mode 100644
index 00000000..f8f89cd2
--- /dev/null
+++ b/Info/11/NTG/Intro/img/whack_a_mole_online_ide.jpg
Binary files differ
diff --git a/Info/11/NTG/Intro/slides.md b/Info/11/NTG/Intro/slides.md
new file mode 100644
index 00000000..3576804d
--- /dev/null
+++ b/Info/11/NTG/Intro/slides.md
@@ -0,0 +1,184 @@
+---
+author: Florian Fischer
+theme: metropolis
+aspectratio: 169
+header-includes: |
+ \makeatletter
+ \beamer@ignorenonframefalse
+ \makeatother
+---
+
+
+## Organisatorisches
+
+**Name**: Herr Fischer
+
+### Material
+
+* Papier, Order/Schnellhefter, Tablet
+* Buch (falls angekündigt)
+
+### \faIcon{pencil-alt} Noten pro Halbjahr
+
+* 1 Kurzarbeit
+* (angekündigter kleiner Leistungsnachweis)
+
+### \faIcon{comment} Noten
+
+* Unterrichtsbeiträge (aus $\approx$ 3 Beobachtungen)
+* (Schriftliche Abfragen)
+
+## Logins {.standout}
+
+Ab diesem Jahr Login mit dem eigenen Microsoft Account.
+
+vorname.nachname
+
+\faIcon{desktop} Startet eure Rechner und meldet euch an
+
+## Umfrage
+
+::: {.columns align=center}
+:::: {.column width=50%}
+\vspace{0.2cm}
+![](img/mentimeter_qr_code.png)
+::::
+
+:::: {.column width=55%}
+\large
+**[https://www.menti.com/al8bhhx74siu](https://www.menti.com/al8bhhx74siu)**
+::::
+:::
+
+## \faIcon{hands-helping} / \faIcon{chalkboard} Arbeitsauftrag: Modellierung \hfill{} 1/5
+
+### Diskutiert folgende Aussage:
+
+\vspace{1cm}
+> Jeder Mensch hat ja ein Geburtsdatum, deshalb kann ich die Geburtsdaten als Attributwerte in der Klasse `Mensch` speichern.
+
+## \faIcon{hands-helping} / \faIcon{chalkboard} Arbeitsauftrag: Algorithmik \hfill{} 2/5
+
+### Diskutiert folgende Aussage:
+
+\vspace{1cm}
+> Wiederholungen mit fester Anzahl (`for`{.java}) sind doch total sinnlos!
+> Ich kann immer einfach eine Wiederholung mit Bedingung (`while`{.java}) und eine Variable benutzen.
+
+## \faIcon{hands-helping} / \faIcon{chalkboard} Arbeitsauftrag: Felder \hfill{} 3/5
+
+### Diskutiert folgende Aussage:
+
+\vspace{1cm}
+> Felder/Arrays dienen zur Speicherung verschiedener Datentypen in einer Variable.
+> Sie sind außerdem leicht an den geschweiften Klammern zu erkennen.
+
+## \faIcon{hands-helping} / \faIcon{chalkboard} Arbeitsauftrag: Code verstehen \hfill{} 4/5
+
+### Diskutiert folgende Aussage:
+
+::: {.columns}
+:::: {.column width=45%}
+```java
+int f(int[] zahlen) {
+ int m = zahlen[0];
+ for (int i = 1; i < zahlen.length; i++) {
+ if (zahlen[i] > m) {
+ m = zahlen[i];
+ }
+ return m;
+}
+
+```
+::::
+
+:::: {.column width=55%}
+\vspace{2.5cm}
+> Die Funktion `f` berechnet immer etwas anderes, daher folgt das Ergebnis keiner Logik.
+::::
+:::
+
+## \faIcon{hands-helping} / \faIcon{chalkboard} Arbeitsauftrag: Polymorphismus \hfill{} 5/5
+
+### Diskutiert folgende Aussage:
+
+::: {.columns}
+:::: {.column width=45%}
+```java
+class Tier {
+ public void gibLaut() {
+ println("Laut");
+ }
+}
+class Hund extends Tier {
+ public void gibLaut() {
+ println("Wuff");
+ }
+}
+```
+::::
+
+:::: {.column width=55%}
+```java
+Tier tier = new Hund();
+tier.gibLaut();
+```
+
+\vspace{1cm}
+> Der Code gibt `"Laut"` aus, da der Hund als seine Oberklasse `Tier` verwendet wird.
+::::
+:::
+
+
+## \faIcon{desktop} Arbeitsauftrag: Wiederholung Java
+
+\begin{center}
+\begin{tikzpicture}
+\node {\includegraphics[keepaspectratio, width=5cm]{img/whack_a_mole_arcade.jpg}};
+\only<2->{
+\node[rotate=3] {\includegraphics[keepaspectratio, width=6cm]{img/whack_a_mole_online_ide.jpg}};
+}
+\end{tikzpicture}
+\end{center}
+
+## \faIcon{desktop} Arbeitsauftrag: Wiederholung Java
+
+### Erklärung
+
+* `// TODO n: `{.java} markiert eine Stelle, die in Aufgabe **n** bearbeitet werden muss.
+* `/* FIXME n: */`{.java} markiert bestehenden Code, der in Aufgabe **n** verändert werden muss.
+
+### Start
+
+1. Öffne die Online-IDE **[www.online-ide.de](www.online-ide.de)** in deinem Browser.
+2. Melde dich mit dem von mir erhaltenen Nutzer Namen und Passwort an.
+3. Öffne das Projekt *WhackAMole*.
+
+
+## \faIcon{desktop} Aufgabe 1: Felder - 10 min 1/3
+
+### Erinnerung
+
+Relevante Stellen sind mit `// TODO 1:`{.java} und `/* FIXME 1: /*`{.java} markiert.
+
+### Aufgabe
+
+1. *Deklariere* und *Initialisiere* ein Feld `moles`, in dem mehrere Objekte der Klasse `Mole` gespeichert werden sollen.
+2. Verwende die *Länge* des Feldes `moles` als Obergrenze für die Zählvariable `i` in den beiden `for`{.java}-Schleifen.
+3. Speichere jedes neu erzeugte Objekt der Klasse `Mole` in dem Feld `moles`.
+
+## \faIcon{desktop} Aufgabe 2: Objekte verwenden - 10 min 2/3
+
+1. Setze die Sichtbarkeit neuer Maulwürfe auf `false`{.java}.
+2. Behandle alle [nicht]{.underline} zerstörten Maulwürfe in der Methode `run`.
+3. Setze die Sichtbarkeit des behandelten Maulwurfs entsprechend.
+
+## \faIcon{desktop} Aufgabe 3: Spiellogik - 10 min 3/3
+
+Implementiere einen Algorithmus, der erkennt, dass keine Maulwürfe mehr übrig sind und beende anschließend das Spiel.
+
+**Für Schnelle:**
+
+1. Spaß haben.
+2. Implementiere einen Highscore in Abhängigkeit von der Zeit.
+3. Färbe zufällig Maulwürfe in einer anderen Farbe, die dann nicht angeklickt werden dürfen.