Wiki: Mathe und Info

Unterrichtsmaterialien für Mathematik und Informatik

Benutzer-Werkzeuge

Webseiten-Werkzeuge


info:sek-ii:q1:oop:l5-projekt

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
info:sek-ii:q1:oop:l5-projekt [2023-11-26 12:31] christian.weberinfo:sek-ii:q1:oop:l5-projekt [2024-01-18 12:32] (aktuell) – [BetterBox#1] yannik.wehr
Zeile 7: Zeile 7:
  
   * Mindestens eine **Spieler-Klasse**, über die der Spieler gesteuert werden kann. Wer mag, gerne auch ein Mehrspieler-Spiel z.B. Spieler 1 WASD, Spieler 2 Pfeiltasten.   * Mindestens eine **Spieler-Klasse**, über die der Spieler gesteuert werden kann. Wer mag, gerne auch ein Mehrspieler-Spiel z.B. Spieler 1 WASD, Spieler 2 Pfeiltasten.
-  * Mehrere **weitere Klassen**, z.B. eine Klasse pro **Level** / **Gegner** / **Hindernis** / **Gegenstand**, etc.+  * Mehrere **weitere Klassen**, z.B. eine Klasse pro **Screen** / **Level** / **Gegner** / **Hindernis** / **Gegenstand**, etc.
   * 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**, wie das Spiel / Programm funktioniert
 +
 +Ganz unten findet ihr eine Vorlage für Processing. Diese ist als Vorschlag zu verstehen, ihr müsst sie nicht verwenden.
  
 </info> </info>
 <beispiel w1|**Beispiel: TicTacToe**> <beispiel w1|**Beispiel: TicTacToe**>
  
-<bbox white dotted collapsed center|Code> +<grid> 
-<tabbox TicTacToe+<bbox w3-2> 
-<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 ''**void** draw()'',  ''**void** keyPressed()'' und  ''**void** mouseClicked()'' gemeinsam. Das kann man in dem so genannten Interface ''**interface** Screen'' als Gemeinsamkeiten zusammenfassen. 
 +    * 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: Sie können mit ''**void** draw()'' gezeichnet werden und man kann mit ''**boolean** isSame(**Player** player)'' feststellen, ob ein anderer Spieler zur gleichen "Kategorie" gehört. 
 +</bbox> 
 +<video w3|**Demo: TicTacToe**> 
 +{{ :info:sek-ii:e2:processing:screencast_from_18.06.2022_18_32_06.webm }} 
 +</video> 
 +</grid> 
 + 
 +<center> 
 +<uml> 
 +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) 
 +
 +</uml> 
 +</center> 
 +<center> 
 +<uml> 
 +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) 
 +
 + 
 + 
 +</uml> 
 +</center> 
 +</beispiel> 
 +<lösung w1 collapsed center|**Code zur objektorientierten Variante von TicTacToe**
 +<tabbox TicTacToeOOP
 +<code java TicTacToeOOP.pde>
 Screen screen; Screen screen;
    
Zeile 60: Zeile 159:
 } }
 </code> </code>
-<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);
 } }
 +</code> 
 +<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:
   }   }
 } }
 +</code> 
 +<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> </code>
-<tabbox Playing+<tabbox PlayingScreen
-<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> </code>
-<tabbox GameOver+<tabbox GameOverScreen
-<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:
 </code> </code>
 </tabbox> </tabbox>
-</bbox+</lösung> 
-</beispiel>+<lösung w1 collapsed center|**Vorlage für ein eigenes Spiel**> 
 +{{ :info:sek-ii:q1:oop:gameskeletonoop_new.zip |Vorlage}} 
 +</lösung>
 </grid> </grid>
info/sek-ii/q1/oop/l5-projekt.1700998291.txt.gz · Zuletzt geändert: 2023-11-26 12:31 von christian.weber