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