gruppe06-hufflepuff-projekt.../Bewertung_TicTacToe.md

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 ( vs if(
      • if (<condition>) { vs if (<condition>){
      • } else vs } neue Zeile else
      • Empfehlung:
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

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:
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.

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)