diff options
| -rw-r--r-- | Info/11/NTG/Intro/WhackAMole_Angabe.json | 1 | ||||
| -rw-r--r-- | Info/11/NTG/Intro/WhackAMole_Lsg.json | 1 | ||||
| -rw-r--r-- | Info/11/NTG/Intro/handout.tex | 55 | ||||
| -rw-r--r-- | Info/11/NTG/Intro/img/mentimeter_qr_code.png | bin | 0 -> 15524 bytes | |||
| -rw-r--r-- | Info/11/NTG/Intro/img/whack_a_mole_arcade.jpg | bin | 0 -> 153978 bytes | |||
| -rw-r--r-- | Info/11/NTG/Intro/img/whack_a_mole_online_ide.jpg | bin | 0 -> 3662 bytes | |||
| -rw-r--r-- | Info/11/NTG/Intro/slides.md | 184 |
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 Binary files differnew file mode 100644 index 00000000..18f1f02a --- /dev/null +++ b/Info/11/NTG/Intro/img/mentimeter_qr_code.png diff --git a/Info/11/NTG/Intro/img/whack_a_mole_arcade.jpg b/Info/11/NTG/Intro/img/whack_a_mole_arcade.jpg Binary files differnew file mode 100644 index 00000000..553d3d66 --- /dev/null +++ b/Info/11/NTG/Intro/img/whack_a_mole_arcade.jpg 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 Binary files differnew file mode 100644 index 00000000..f8f89cd2 --- /dev/null +++ b/Info/11/NTG/Intro/img/whack_a_mole_online_ide.jpg 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} + +:::: + +:::: {.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. |
