added evalutation
This commit is contained in:
parent
1cc0dc3ff1
commit
bd27737790
|
@ -0,0 +1,134 @@
|
|||
# Bewertung Catan
|
||||
## 🥇 27.5 / 17.5 Punkte von 30
|
||||
|
||||
👫 brandleo@students.zhaw.ch; fassband@students.zhaw.ch; schrom01@students.zhaw.ch; zieglmic@students.zhaw.ch; amadoste@students.zhaw.ch
|
||||
|
||||
## Zusammenarbeit
|
||||
|
||||
* Durch untenstehende Probleme verursacht durch die Herren Ziegler und Amador werden pro Person 5 Punkte abgezogen (Total **10 Punkte**)
|
||||
* Wiederholtes nicht Einhalten von Versprechen und Terminen
|
||||
* Unverhältnismässiger Beitrag an produktivem Code
|
||||
* Erinnerung:
|
||||
* 4 ECTS Credits entsprechen 120 Arbeitsstunden
|
||||
* Bei 12 Wochen bis zur letzten Abgabe sind das 10 Stunden pro Woche
|
||||
* Bei zu wenig Zeit oder auch inhaltlicher Überforderung können Sie mögliche Optionen mit Olaf Stern (strf) und Patrick Feisthammel (fame)
|
||||
* Ausnahme:
|
||||
* Die Herren Brandenberger, Fassbind und Schenk erhalten **keinen** Abzug, da Sie alles versucht haben die Zusammenarbeit aufrecht und das Team intakt zu erhalten
|
||||
|
||||
## Grundfunktionalität
|
||||
|
||||
👨🏫 15.5 Punkte von 18
|
||||
|
||||
### Funktionalität (1.5 Punkte Abzug)
|
||||
|
||||
> Sie haben die Funktionalität wie gefordert umgesetzt.
|
||||
|
||||
* Strassen bauen:
|
||||
* Können in das Wasser gehen
|
||||
* Können durch gegnerische Siedlungen gebaut werden
|
||||
* Würfeln
|
||||
* Bei einem Wurf von 7 werden die halbierten Ressourcen aufgerundet, sollten aber abgerundet werden (bei 9 müssen 4 abgegeben werden)
|
||||
* Problem: `resourceArrayList.size() - (resourceArrayList.size() / 2)` -> `resourceArrayList.size() / 2`
|
||||
|
||||
* `throwDice` sollte nur die Ressourcen zurückgeben, welche effektiv verteilt worden sind
|
||||
|
||||
* Die Initialen Siedlungen und Strassen werden nicht vom Pool abgezogen
|
||||
|
||||
### Clean Code und Konstrukte (0.5 Punkt Abzug)
|
||||
|
||||
> * Sie halten die Vorgaben hinsichtlich einsetzbarer Konstrukte ein.
|
||||
> * Sie halten die Vorgaben hinsichtlich Clean Code ein.
|
||||
|
||||
* `SiedlerGameTest`
|
||||
* Funktionsnamen sollten mit einem Kleinbuchstaben beginnen
|
||||
* `new ArrayList<>(List.of(/* ... */))` kann direkt `List.of(/* ... */)` sein
|
||||
|
||||
### Klassendesign
|
||||
|
||||
> * Sie haben eine sinnvolle Aufteilung in Klassen und Klassendefinitionen gefunden.
|
||||
> * Das Klassendiagramm zeigt die Aufteilung verständlich.
|
||||
|
||||
* Gute Klassenaufteilung
|
||||
* Übersichtliches Diagramm
|
||||
|
||||
### Tests (0.5 Punkte Abzug)
|
||||
|
||||
> Sie haben sinnvolle Test Cases für die Klasse `SiedlerGame` definiert und diese erfolgreich ausgeführt.
|
||||
|
||||
* Es sollten komplette Collections mit equals verglichen werden und nicht nur die einzelnen Elemente:
|
||||
```java
|
||||
Assertions.assertEquals(0, resources.get(Config.Resource.BRICK));
|
||||
Assertions.assertEquals(0, resources.get(Config.Resource.GRAIN));
|
||||
Assertions.assertEquals(0, resources.get(Config.Resource.LUMBER));
|
||||
Assertions.assertEquals(0, resources.get(Config.Resource.ORE));
|
||||
Assertions.assertEquals(0, resources.get(Config.Resource.WOOL));
|
||||
// should be:
|
||||
Assertions.assertEquals(Map.of(
|
||||
Config.Resource.BRICK, 0,
|
||||
Config.Resource.GRAIN, 0,
|
||||
Config.Resource.LUMBER, 0,
|
||||
Config.Resource.ORE, 0,
|
||||
Config.Resource.WOOL, 0
|
||||
), resources);
|
||||
```
|
||||
* In `startSiedlerGameWithLowerThanMinimumWinPoints` hat es kein assert
|
||||
|
||||
### Dokumentation
|
||||
|
||||
> Ihr Code ist in `JavaDoc` sauber dokumentiert.
|
||||
|
||||
* Sehr gute Dokumentation
|
||||
* Besonders die exakten Limitationen und Fehlerfälle
|
||||
|
||||
## Erweiterung «Städte»
|
||||
|
||||
👨🏫 5 Punkte von 5
|
||||
|
||||
> Die Erweiterung «Städte» ist mit Vererbung umgesetzt.
|
||||
|
||||
* Funktioniert wie gewünscht
|
||||
|
||||
## Erweiterung «Längste Strasse» oder «Räuber»
|
||||
|
||||
👨🏫 7 Punkte von 7
|
||||
|
||||
* «Längste Strasse» wurde umgesetzt
|
||||
* Funktioniert wie gewünscht
|
||||
|
||||
## Zusätzliche Hinweise (nicht bewertet)
|
||||
|
||||
* Wenn `instanceof` verwendet wird, deutet das auf suboptimale Vererbung hin
|
||||
* Folgendes könnte mit einer `getWinPoints` Funktion in den Structures gelöst werden
|
||||
* Vorteil: Wenn eine neue Structure dazu kommt, muss nicht anderer Code angepasst werden
|
||||
* Bei reinen Datenklassen lohnt es sich zu überlegen: Braucht es sie überhaupt? Können sie noch Funktionen brauchen?
|
||||
```java
|
||||
int newWinPoints = 0;
|
||||
if (structure instanceof City) {
|
||||
newWinPoints = 2;
|
||||
} else if (structure instanceof Settlement) {
|
||||
newWinPoints = 1;
|
||||
}
|
||||
```
|
||||
* Der Return-Wert von `SielderGame.subtractResourceFromPlayer` wird nie verwendet
|
||||
* Die Instanz von `Random` kann als `static final` definiert werden
|
||||
* Weniger Objekte müssen erzeugt werden
|
||||
* Vereinfacht das Reproduzieren von Abläufen mit Hilfe von einem Seed
|
||||
* In `Siedler.gamePhase` sollte `parser.quit()` nach dem Loop ausgeführt werden
|
||||
* Dies wurde vergessen, wenn der Player gewonnen hat
|
||||
* Vereinfachung:
|
||||
|
||||
```java
|
||||
boolean successful = false;
|
||||
do {
|
||||
if (game.placeInitialSettlement(parser.getPoint(), payout)) {
|
||||
successful = true;
|
||||
} else {
|
||||
parser.errorMessage();
|
||||
}
|
||||
} while (!successful);
|
||||
// can be written as
|
||||
while (!game.placeInitialSettlement(parser.getPoint(), payout)) {
|
||||
parser.errorMessage();
|
||||
}
|
||||
```
|
||||
|
Loading…
Reference in New Issue