diff --git a/Bewertung_TicTacToe.md b/Bewertung_TicTacToe.md new file mode 100644 index 0000000..f3c0d86 --- /dev/null +++ b/Bewertung_TicTacToe.md @@ -0,0 +1,127 @@ +# 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)