added evalutation
This commit is contained in:
parent
75f8127058
commit
9a2958c012
|
@ -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 (<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)
|
Loading…
Reference in New Issue