diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2024-04-15 16:02:44 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2024-04-15 16:03:28 +0200 |
| commit | a77b62bb20a7bb5649024fe5b3700d1bf2a79488 (patch) | |
| tree | a5e87e05b83f3179f5244dddde29ce6894037cfb | |
| parent | 8e095e9f9a774b789205359617e303a5b359161e (diff) | |
| download | unterricht-a77b62bb20a7bb5649024fe5b3700d1bf2a79488.tar.gz unterricht-a77b62bb20a7bb5649024fe5b3700d1bf2a79488.zip | |
complete slides for the second part of the snake project
| -rw-r--r-- | Info/10/2/Snake/img/tischlein_deck_dich.png | bin | 0 -> 3162696 bytes | |||
| -rw-r--r-- | Info/10/2/Snake/slides.md | 91 |
2 files changed, 90 insertions, 1 deletions
diff --git a/Info/10/2/Snake/img/tischlein_deck_dich.png b/Info/10/2/Snake/img/tischlein_deck_dich.png Binary files differnew file mode 100644 index 00000000..edf41b85 --- /dev/null +++ b/Info/10/2/Snake/img/tischlein_deck_dich.png diff --git a/Info/10/2/Snake/slides.md b/Info/10/2/Snake/slides.md index 150657b8..cba78896 100644 --- a/Info/10/2/Snake/slides.md +++ b/Info/10/2/Snake/slides.md @@ -260,12 +260,85 @@ Ein Interface gibt zu implementierende Methoden vor. ## Essen +::: {.columns} +:::: {.column width=50%} +\begin{tikzpicture} + \begin{class}[text width=4cm]{Essen}{0,-4.5} + \attribute{Position} + \end{class} +\end{tikzpicture} +:::: + +:::: {.column width=50%} + +:::: +::: + +## Zufall + +Die Java Klasse `java.util.Random` stellt *pseudo* zufällige Zahlen bereit. + +\pause +### Verwendung + +* Importieren der Klasse: `import java.util.Random;` +* Deklarieren und Initialisieren eins Attributs vom Typ `Zufall`. +* Die Methode `nextInt(int max)` liefert eine Zahl zwischen 0 und `max`. + +**\faIcon{lightbulb} In welchem Bereich soll das Essen platziert werden?** + +\pause +### Größe des Welt + +Das Zeichenfenster misst 800x600 Pixel. + +## Tischlein deck dich + +::: {.columns} +:::: {.column width=50%} + +:::: + +:::: {.column width=50%} +```java +void Ausführen() { + ticks++; + if (ticks % 30 == 0) { + if (essen) { + essen.entfernen(); + } + int x = zufall.nextInt(780); + int y = zufall.nextInt(580); + essen = new Essen(x, y); + } + ... +} +``` +:::: +::: + + ## Wachstum +Die Schlange soll im Laufe des Spiels länger werden. + +**\faIcon{lightbulb} Welcher Datentyp eignet sich dazu eine unbekannte Anzahl an Rechtecken zuspeichern?** +\pause + +### Das Attribut `koerper` + +* Das Attribut `koerper` der Klasse `Schlange` vom Typ `Rechteck[]` verwaltet alle Körperteile +* Felder haben eine **feste** Länge, deshalb muss jedes mal ein neues größeres Feld erzeugt werden und die einzelnen Rechtecke von dem alten Feld in das neue Kopiert werden. + ## Bewegung -::: {.columns} +**\faIcon{lightbulb} Wie kommt die Schlange um die Ecke?** + +\pause + +::: {.columns align=center} :::: {.column width=50%} +\only<3>{Jedes Körperteil folgt seinem Vorgänger.} :::: :::: {.column width=50%} @@ -273,6 +346,22 @@ Ein Interface gibt zu implementierende Methoden vor. :::: ::: +## Bewegung + +```java +void bewegen() { + for (int i = koerper.length - 1; i > 0; i--) { + Rechteck vorgaenger = koerper[i-1]; + koerper[i].PositionSetzen(vorgaenger.x, vorgaenger.y); + } + + Rechteck kopf = koerper[0]; + // Kopf je nach aktueller Richtung verschieben + // kopf.Verschieben() + ... +} +``` + # Phase III - Kollisionserkennung |
