4.0 KiB
4.0 KiB
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 (
vsif(
if (<condition>) {
vsif (<condition>){
} else
vs}
neue Zeileelse
- Empfehlung:
- 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
- Uneinheitliche (runde und geschwungene) Klammersetzung.
if (<condition 1>) {
<expressions>
} else if (<condition 2>) {
<expressions>
} else{
<expressions>
}
- 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
- Es empfiehlt sich den Output in einer separaten Klasse zu machen anstatt die
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
- Sehr gutes
- Alle Gruppenmitglieder haben beigetragen
Zusätzliche Hinweise (nicht bewertet)
- Vereinfachung durch Guard-Clauses:
if (<condition>) {
return 1;
} else {
return 2;
}
// vereinfacht:
if (<condition>) {
return 1;
}
return 2;
- Optimierung
Gamefield.countSetfields
public int countSetFields() {
int count = 0;
for (Integer fieldValue : fields) {
if (fieldValue != 0) {
count++;
}
}
return count;
}
- Optimierung
Gamefield.setField
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
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.
- Zuerst mit Property
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)