128 lines
4.0 KiB
Markdown
128 lines
4.0 KiB
Markdown
# 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:
|
|
```java
|
|
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:
|
|
```java
|
|
if (<condition>) {
|
|
return 1;
|
|
} else {
|
|
return 2;
|
|
}
|
|
|
|
// vereinfacht:
|
|
if (<condition>) {
|
|
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)
|