info:sek-ii:q1:oop:l5-projekt
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
info:sek-ii:q1:oop:l5-projekt [2023-11-26 12:31] – christian.weber | info:sek-ii:q1:oop:l5-projekt [2024-01-18 12:32] (aktuell) – [BetterBox#1] yannik.wehr | ||
---|---|---|---|
Zeile 7: | Zeile 7: | ||
* Mindestens eine **Spieler-Klasse**, | * Mindestens eine **Spieler-Klasse**, | ||
- | * Mehrere **weitere Klassen**, z.B. eine Klasse pro **Level** / **Gegner** / **Hindernis** / **Gegenstand**, | + | * Mehrere **weitere Klassen**, z.B. eine Klasse pro **Screen** / **Level** / **Gegner** / **Hindernis** / **Gegenstand**, |
* Ein Klasse, die den **Startbildschirm** mit Infos zum Spiel und den Autoren darstellt. | * Ein Klasse, die den **Startbildschirm** mit Infos zum Spiel und den Autoren darstellt. | ||
+ | |||
+ | Abgesehen vom Code sollt ihr auch folgende Dokumente erstellen: | ||
+ | |||
+ | * Zu jeder Klasse auch ein **Klassendiagramm** | ||
+ | * Ein __kurzer__ **Leitfaden**, | ||
+ | |||
+ | Ganz unten findet ihr eine Vorlage für Processing. Diese ist als Vorschlag zu verstehen, ihr müsst sie nicht verwenden. | ||
</ | </ | ||
< | < | ||
- | < | + | < |
- | < | + | < |
- | <code java TicTacToe.pde> | + | Nehmen wir als Beispiel das TicTacToe-Projekt aus der E-Phase: |
+ | |||
+ | * Hier gibt es mehrere Screens: | ||
+ | * Der **SplashScreen** zeigt am Anfang Informationen über das Spiel. | ||
+ | * Der **PlayingScreen** zeichnet das eigentliche Spiel. | ||
+ | * Der **GameOverScreen** erscheint, wenn das Spiel beendet ist. | ||
+ | * Alle drei Screens habe die drei Methoden '' | ||
+ | * Lediglich der **PlayingScreen** hat noch mehr Methoden, die für die eigentliche Spielelogik verantwortlich sind. | ||
+ | * Außerdem muss der **GameOverScreen** den zugehörigen **PlayingScreen** kennen, da er diesen im Hintergrund zeichnet. | ||
+ | * Ebenso gibt es zwei Spieler, **Cross** und **Circle**. | ||
+ | * Diese haben ebenfalls Gemeinsamkeiten: | ||
+ | </ | ||
+ | <video w3|**Demo: TicTacToe**> | ||
+ | {{ : | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | skinparam backgroundColor transparent | ||
+ | |||
+ | interface Screen { | ||
+ | + **void** draw() | ||
+ | + **void** keyPressed() | ||
+ | + **void** mouseClicked() | ||
+ | } | ||
+ | |||
+ | class GameOverScreen implements Screen { | ||
+ | - **PlayingScreen** screen; | ||
+ | --- | ||
+ | + GameOverScreen(**PlayingScreen** screen) | ||
+ | --- | ||
+ | + **void** draw() | ||
+ | + **void** keyPressed() | ||
+ | + **void** mouseClicked() | ||
+ | } | ||
+ | |||
+ | class SplashScreen implements Screen { | ||
+ | + **void** draw() | ||
+ | + **void** keyPressed() | ||
+ | + **void** mouseClicked() | ||
+ | } | ||
+ | |||
+ | class PlayingScreen implements Screen { | ||
+ | - **Player[]** game | ||
+ | - **Player** currentPlayer | ||
+ | - **int[]** winnerIndices | ||
+ | - **boolean** gameIsDraw | ||
+ | - **String** highScoreText | ||
+ | - **int** size | ||
+ | - **int** xOffset | ||
+ | - **int** yOffset | ||
+ | - **int** cellSize | ||
+ | --- | ||
+ | + PlayingScreen() | ||
+ | --- | ||
+ | + **void** draw() | ||
+ | + **void** keyPressed() | ||
+ | + **void** mouseClicked() | ||
+ | - **void** drawBoard() | ||
+ | - **void** drawWinnerIndices() | ||
+ | - **void** drawPlayerMarkers() | ||
+ | - **void** checkWinner() | ||
+ | - **void** endGame(**int[]** idx, **Player** m, **boolean** draw) | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | skinparam backgroundColor transparent | ||
+ | |||
+ | interface Player { | ||
+ | + **void** draw(int x, int y, int xOffset, int yOffset, int cellSize) | ||
+ | + **void** isSame(**Player** player) | ||
+ | } | ||
+ | |||
+ | class Cross implements Player { | ||
+ | + **void** draw(int x, int y, int xOffset, int yOffset, int cellSize) | ||
+ | + **void** isSame(**Player** player) | ||
+ | } | ||
+ | |||
+ | class Circle implements Player { | ||
+ | + **void** draw(int x, int y, int xOffset, int yOffset, int cellSize) | ||
+ | + **void** isSame(**Player** player) | ||
+ | } | ||
+ | |||
+ | |||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | <lösung w1 collapsed center|**Code zur objektorientierten Variante von TicTacToe**> | ||
+ | < | ||
+ | <code java TicTacToeOOP.pde> | ||
Screen screen; | Screen screen; | ||
Zeile 60: | Zeile 159: | ||
} | } | ||
</ | </ | ||
- | <tabbox Player, Cross, Circle> | + | <tabbox Player> |
<code java Player.pde> | <code java Player.pde> | ||
interface Player { | interface Player { | ||
Zeile 66: | Zeile 165: | ||
boolean isSame(Player player); | boolean isSame(Player player); | ||
} | } | ||
+ | </ | ||
+ | <tabbox Cross> | ||
+ | <code java Cross.pde> | ||
class Cross implements Player { | class Cross implements Player { | ||
void draw(int x, int y, int xOffset, int yOffset, int cellSize) { | void draw(int x, int y, int xOffset, int yOffset, int cellSize) { | ||
Zeile 77: | Zeile 178: | ||
} | } | ||
} | } | ||
+ | </ | ||
+ | <tabbox Circle> | ||
+ | <code java Circle.pde> | ||
class Circle implements Player { | class Circle implements Player { | ||
void draw(int x, int y, int xOffset, int yOffset, int cellSize) { | void draw(int x, int y, int xOffset, int yOffset, int cellSize) { | ||
Zeile 88: | Zeile 191: | ||
} | } | ||
</ | </ | ||
- | < | + | < |
- | <code java Playing.pde> | + | <code java PlayingScreen.pde> |
class PlayingScreen implements Screen { | class PlayingScreen implements Screen { | ||
final int[][] WINNING_COMBINATIONS = { | final int[][] WINNING_COMBINATIONS = { | ||
Zeile 276: | Zeile 379: | ||
} | } | ||
</ | </ | ||
- | < | + | < |
- | <code java GameOver.pde> | + | <code java GameOverScreen.pde> |
class GameOverScreen implements Screen { | class GameOverScreen implements Screen { | ||
private PlayingScreen playingScreen; | private PlayingScreen playingScreen; | ||
Zeile 342: | Zeile 445: | ||
</ | </ | ||
</ | </ | ||
- | </bbox> | + | </lösung> |
- | </beispiel> | + | <lösung w1 collapsed center|**Vorlage für ein eigenes Spiel**> |
+ | {{ : | ||
+ | </lösung> | ||
</ | </ |
info/sek-ii/q1/oop/l5-projekt.1700998291.txt.gz · Zuletzt geändert: 2023-11-26 12:31 von christian.weber