# Bewertung TicTacToe ## 🥇 8.5 Punkte von 10 👫 brandleo@students.zhaw.ch; fassband@students.zhaw.ch; schrom01@students.zhaw.ch; zieglmic@students.zhaw.ch ## Allgemeine Anforderungen (all-or-nothing) > Voraussetzung für Punkterteilung: Die Applikation ist lauffähig. ## Entwicklung 👨‍🏫 Entwicklung: (0-6): 5 > je 0-2 Punkte (oder Abzüge): > - Das Spiel besitzt die geforderte Funktionalität (Abzüge: Ende nicht erkannt, Spielfeld nicht ausgedruckt, Sprachumschaltung nicht bei jedem Zug vorhanden, Illegale Züge nicht erkannt, Grundfunktionalität des Spiels (z.B. Spielregeln) fehlt, die Aufgabe ist nicht gelöst) > - Sie halten die Vorgaben hinsichtlich einsetzbarer Konstrukte (z.B. Einsatz von Arrays) und Clean Code (siehe Anhang) ein > - Sie haben eine sinnvolle Aufteilung in Klassen und Klassendefinitionen gefunden (Kopplung, Kohäsion, Zuständigkeit, etc.) * Funktionalität * Das Spiel funktioniert bestens. * Sogar mit 3 Sprachen! * Clean Code: **0.5 Punkte Abzug** * Uneinheitliche (runde und geschwungene) Klammersetzung. * Hinweis: Gehen Sie als Team durch die IntelliJ Code Style Richtlinien, konfigurieren Sie diese so wie es für alle stimmt und speichern Sie diese im Projekt. Danach könnnen Sie die `Code -> Reformat Code` Funktion (`Ctrl+Alt+L`) verwenden. * `if (` vs `if(` * `if () {` vs `if (){` * `} else` vs `}` neue Zeile `else` * Empfehlung: ```java if () { } else if () { } else{ } ``` * Konstrukte: * Nur erlaubte Konstrukte wurden verwendet. * Aufteilung von Klassen: **0.5 Punkte Abzug** * Es empfiehlt sich den Output in einer separaten Klasse zu machen anstatt die `System.out` Aufrufe zu verteilen. * Der Code wird unabhängig von der Ausgabeart * Dies ermöglicht z.B. eine Anpassung zu einem GUI ## Vorgehen und Dokumentation 👨‍🏫 Doku: (0-4): 3.5 > je 0-2 Punkte (oder Abzüge): > - Funktionalität ist im Code oder anderweitig dokumentiert (und via README auffindbar) > - Alle Gruppenmitglieder haben Code beigetragen und auf GitHub eingechecked. (Check durch GitHub Log) * Dokumentation: * Sehr gutes `README.md`! * Gute, übersichtliche Dokumentation, auch mit den entsprechenden Wertebereichen. * Dokumentation von `TicTacToe` sollte keine Installations Anleitung haben. Das ist zu viel Wissen einer Klasse über wie das Setup genau aussieht. **0.5 Punkte Abzug** * Meine Empfehlung: Dokumentation wie den Code auf Englisch zu schreiben * Alle Gruppenmitglieder haben beigetragen ## Zusätzliche Hinweise (nicht bewertet) * Vereinfachung durch Guard-Clauses: ```java if () { return 1; } else { return 2; } // vereinfacht: if () { return 1; } return 2; ``` * Optimierung `Gamefield.countSetfields` ```java public int countSetFields() { int count = 0; for (Integer fieldValue : fields) { if (fieldValue != 0) { count++; } } return count; } ``` * Optimierung `Gamefield.setField` ```java public boolean setField(int field, int player) { int index = field - 1; if (field < 1 || field > 9 || fields.get(index) != 0) { return false; } fields.set(index, player); return true; } ``` * Optimierung `Gamefield.getField` ```java public int getField(int field) { if (field < 1 || field > 9) { return -1; } return fields.get(field - 1); } ``` * Optimierung `Game.checkWinVariants`: * Zuerst mit Property `playerPlaying` vergleichen, da dies viel effizienter ist. # Anhang Folgende Vorgaben zu Clean Code werden angeschaut: * Code ist aufgeräumt (PROG1 Kapitel 3: Objektinteraktion, Kapitel 6:Bibliotheksklassen) * Sinnvolle Namensgebung (PROG1 Kapitel 1: Objekte und Klassen) * Methodengestaltung (PROG1 Kapitel 3: Objektinteraktion, Kapitel 6, Bibliotheksklassen) * Klassen haben Verhalten (PROG1 Kapitel 3: Objektinteraktion) * Klassenoberfläche ist minimal (PROG1 Kapitel 3: Objektinteraktion, Kapitel 10: Vererbung) * Vernünftiger Einsatz von Feldern (PROG1 Kapitel 3: Objektinteraktion) * Javadoc (PROG1 Kapitel 2: Klassendefinitionen)