Category Archives: SS14

Software Engineering I, SS14

Liebe SE 1 Teilnehmer,

es ist geschafft. Die Veranstaltung ist offiziell beendet und die Noten sind in Arbeit, doch wie jedes Jahr wollen wir alle natürlich sehen, was nach 16 Wochen Entwicklungszeit bei euren Projekten herausgekommen ist. Der Termin für unser Abschlussturnier steht fest:

SE 1 Abschlussturnier am Freitag den 26.09.2014, 14 Uhr, Labor des Fachgebiets Software Engineering

Sofern wir wie jedes Jahr einen Sponsor finden, wird es ein paar Getränke und einen Pokal für die Sieger geben.

Bis dann,
Andreas & Lennert

Software Engineering I, SS14

Sehr geehrte Teilnehmer,

den doodle-Poll für die Präsenationstermine finden Sie unter:

http://tinyurl.com/SE1-Releasepraesentationen
Bitte fügen Sie Ihren Teamnamen und Ihre Namen unter “Your name/Ihr Name” ein (z.B. “Team-X, PO Alice Alison, SM Bob Builder”), um uns die Möglichkeit zu geben, optimal auf den Termin vorbereitet zu sein.
Reservieren Sie Ihren verbindlichen Termin bitte spätestens 24 Stunden vorher! Andererseits werden wir die Termine nicht wahrnehmen können.
Sie können uns im Notfall auch per EMail erreichen unter: ceo@wasp-enterprises.de oder cto@wasp-enterprises.de

Software Engineering I, Software Engineering II, SS14

Leider sind bei dem Ausfall der SE1-VM auch einige der Git-Repositories betroffen. Das sollte ausschließlich die Teams C, E, F und G betreffen. Eine serverseitige Wiederherstellung ist vermutlich nur mit mehr Aufwand und nicht verlustfrei möglich. Aber da bei Git jeder das komplette Repository geklont hat ist eine Wiederherstellung in ein neues Repository, was ich für die betroffenen Teams angelegt habe, deutlich einfacher. Dazu sollten die betroffenen Teams folgende Schritte durchführen:

  1. Findet heraus, wer im Team als letztes gepusht hat.
  2. Die betreffende Person selektiert in Sourcetree das Repository (1) und wählt Eigenschaften (2)
    git1
  3. Zuerst das Remote origin wählen (1) und auf Bearbeiten klicken (2)
    git2
  4. Bei der URL die 2 an der markierten Stelle einfügen
    git3
    git4
  5. Nun zweimal mit Ok bestätigen
  6. Das Repository in das neue Remote pushen
  7. Wenn das erledigt ist, sollten alle anderen Teammitglieder die Schritte 2 – 5 ebenfalls durchführen und sollten anschließend problemlos pullen und pushen können.
Software Engineering I, SS14

Zum Anlegen, Auslesen, Ändern und Löschen von Achievements gibt es ab Version 1.0.4 vier neue Klartext-Commands:

  1. CREATE ACHIEVEMENT
  2. DELETE ACHIEVEMENT
  3. LIST ACHIEVEMENTS
  4. UPDATE ACHIEVEMENT

Die genaue Nutzung der Befehle kann über den HELP command erfragt werden.

Zur Zeit unterstützt der Server in Version 1.0.4 drei Verschiedene Achievement-Arten:

  1. You have NUMBER of your meeples in  COMPARE NUMBER TYPE
  2. You have all played meeples in  COMPARE NUMBER TYPE
  3. You have received TYPE with COMPARE NUMBER points

Diese können in Zukunft noch ausgebaut werden. Alle groß geschriebenen Worte sind Platzhalter für Variablen:

  • NUMBER: Gültig sind positive, ganzzahlige  Zahlen
  • COMPARE: Gültig hierfür  sind ‘more than’, ‘less than’ und ‘exactly’
  • TYPE: Gültig hierfür sind die Feldtypen: ‘meadow’, ‘city’, ‘abbey’ und ‘road’

Ein gültiges Beispiel für jede der Achievement-Arten wäre demnach:

  1. You have 5 of your meeples in  more than 1 abbey
  2. You have all played meeples in more than 2 city
  3. You have received abbey with less than 20 points
Software Engineering I, SS14

Ein Spielzug in Carcassonne läuft in drei Schritten ab:

  1. Karte ziehen
  2. Karte ausspielen
  3. Spielstein auslegen

Für jeden dieser drei Schritte gibt es jeweils einen eigenen Command. Der dritte Schritt kann alternativ mit END_TURN übersprungen werden.

Alle Änderungen am Datenmodell des Server, die diese Commands auslösen werden wie gewohnt über JSON Event an alle Teilnehmer eines Spiels übertragen. Im Folgenden soll verdeutlicht werden, wie ausgespielte Karten und Spielsteine lokalisiert werden können.

 

Wo und wie werden Karten angelegt?

Zu Beginn eines Zuges muss zuerst eine Karte gezogen werden. In diesem Beispiel wird eine Karte vom Typ A gezogen:

Single card A

 

 

 

 

 

 

 

Die hierzu verschickten Events sind vergleichbar zu folgendem:

  1. {“@ts”:”1402044757843″,”@src”:”Field@24640285″,”@prop”:”rotation”,”@nv”:”R0″}
  2. {“@ts”:”1402044757843″,”@src”:”Field@24640285″,”@prop”:”name”,”@nv”:”A”}
  3. {“@ts”:”1402044757843″,”@src”:”Field@24640285″,”@prop”:”meeplePositions”,”@nv”:”MeeplePosition@21e17c6d”}
  4. {“@ts”:”1402044757843″,”@src”:”Field@24640285″,”@prop”:”meeplePositions”,”@nv”:”MeeplePosition@5aafe97b”}
  5. {“@ts”:”1402044757843″,”@src”:”Field@24640285″,”@prop”:”meeplePositions”,”@nv”:”MeeplePosition@5309b8c0″}
  6. {“@ts”:”1402044757843″,”@src”:”MeeplePosition@21e17c6d”,”@prop”:”field”,”@nv”:”Field@24640285″}
  7. {“@ts”:”1402044757843″,”@src”:”MeeplePosition@21e17c6d”,”@prop”:”name”,”@nv”:”1″}
  8. {“@ts”:”1402044757843″,”@src”:”MeeplePosition@21e17c6d”,”@prop”:”meeple”}
  9. {“@ts”:”1402044757843″,”@src”:”MeeplePosition@5aafe97b”,”@prop”:”field”,”@nv”:”Field@24640285″}
  10. {“@ts”:”1402044757843″,”@src”:”MeeplePosition@5aafe97b”,”@prop”:”name”,”@nv”:”2″}
  11. {“@ts”:”1402044757843″,”@src”:”MeeplePosition@5aafe97b”,”@prop”:”meeple”}
  12. {“@ts”:”1402044757843″,”@src”:”MeeplePosition@5309b8c0″,”@prop”:”field”,”@nv”:”Field@24640285″}
  13. {“@ts”:”1402044757843″,”@src”:”MeeplePosition@5309b8c0″,”@prop”:”name”,”@nv”:”3″}
  14. {“@ts”:”1402044757843″,”@src”:”MeeplePosition@5309b8c0″,”@prop”:”meeple”}
  15. {“@ts”:”1402044757843″,”@src”:”Field@24640285″,”@prop”:”game”}
  16. {“@ts”:”1402044757845″,”@src”:”CarcassonneGame@35ba04f8″,”@prop”:”drawnCard”,”@nv”:”Field@24640285″}

Der Event in Zeile zwei verdeutlicht welche Art von Karte gerade gezogen wurde, in diesem Fall eine Karte vom Typ A. Alle Zuordnungen von Spielkarten und Name sind hier zu finden. Die Events in den Zeilen 7, 10 und 13 zeigen die Zuordnung eines Spielsteinposition-Objekts und seinem Namen. Bei Karten vom Typ A gibt es drei Positionen, 1 entspricht der Wiese, 2 dem Kloster und 3 der Straße.

Wird nun diese Karte südlich und um 180 Grad gedreht an der bereits liegenden Startkarte (Typ D) ausgespielt, folgen Events vergleichbar zu folgendem:

  1. {“@ts”:”1402044784348″,”@src”:”OrientationToFieldEntry@34592e88″,”@prop”:”key”,”@nv”:”SOUTH”}
  2. {“@ts”:”1402044784348″,”@src”:”OrientationToFieldEntry@34592e88″,”@prop”:”value”,”@nv”:”Field@24640285″}
  3. {“@ts”:”1402044784348″,”@src”:”Field@5e223ed2″,”@prop”:”neighbors”,”@nv”:”OrientationToFieldEntry@34592e88″}
  4. {“@ts”:”1402044784349″,”@src”:”OrientationToFieldEntry@6912610d”,”@prop”:”key”,”@nv”:”EAST”}
  5. {“@ts”:”1402044784349″,”@src”:”OrientationToFieldEntry@6912610d”,”@prop”:”value”,”@nv”:”Field@5e223ed2″}
  6. {“@ts”:”1402044784349″,”@src”:”Field@24640285″,”@prop”:”neighbors”,”@nv”:”OrientationToFieldEntry@6912610d”}
  7. {“@ts”:”1402044784350″,”@src”:”Field@24640285″,”@prop”:”game”,”@nv”:”CarcassonneGame@35ba04f8″}
  8. {“@ts”:”1402044784351″,”@src”:”Field@24640285″,”@prop”:”rotation”,”@nv”:”R180″,”@ov”:”R0″}
  9. {“@ts”:”1402044784351″,”@src”:”Field@24640285″,”@prop”:”name”,”@nv”:”A”}

Die Nachbar-Beziehung zwischen Feldern wird mit dem Hilfsobjekt OrientationToFieldEntry dargestellt. In diesem Beispiel wird in den Zeilen 1-3 gesendet, dass Feld Field@24640285 (Neues Feld) im Süden von Feld Field@5e223ed2 (Startfeld) angelegt wird. Die Zeilen 4-6 legen entsprechend die Rückrichtung an. Zeile 8 zeigt zudem die Rotation (R180) auf, in der das neue Feld angelegt wird.

Wird schließlich noch ein Spielstein auf die neue Karte gestellt, folgen Events ähnlich zu:

  1. {“@ts”:”1402045113008″,”@src”:”Meeple@46e3644a”,”@prop”:”meeplePosition”,”@nv”:”MeeplePosition@21e17c6d”}
  2. {“@ts”:”1402045113009″,”@src”:”MeeplePosition@21e17c6d”,”@prop”:”meeple”,”@nv”:”Meeple@46e3644a”}

Der Spielstein Meeple@46e3644a wird demnach auf die Position MeeplePosition@21e17c6d gestellt. Zeile 7 im ersten Eventblock zeigt, dass dies Position 1, also der Wiese, entspricht.