Ex 02, Aufgabe 4: Interface?

MuldeR
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 131
Registriert: 18. Okt 2005 16:14
Wohnort: (d)armstadt
Kontaktdaten:

Ex 02, Aufgabe 4: Interface?

Beitrag von MuldeR »

Ich frage mich gerade, wie das Interface für die Multiplayer-Variante des Bowlingspiels aussehen soll. Bei der Einzelspieler-Variante (Musterlösung) wird ja von außen die Methode add() benutzt, um ein Wurf nach dem anderen hinzuzufügen. Wie soll das aber bei mehreren Spielern aussehen? Übergibt der Aufrufer von außen (etwa beim Aufruf von add()) explizit für welchen Spieler er einen Wurf hinzufügen will? Oder müssen die Spieler immer der Reihe nach werfen, so dass implizit klar ist, für welchen Spieler der nächste Wurf hinzugefügt wird? Wenn ja, wie genau ist die Wurfreihenfolge definiert? Einfach 2 Würfe pro Spieler und dann nächster Spieler wird es da ja wohl nicht tun (z.B. Strike etc.)...

Das führt zur nächsten Frage: Wie genau ist der Lane Manager zu verstehen? Spielen alle Spieler auf der selben Lane und beziehen sich dementsprechend auf den selben Lane Manager? Hat jeder Spieler seine eigene Lane und damit einen separaten Lane Manager? Und wie merke ich, dass ein Wurf erfolgt ist? Gibt das ein Aufrufer von außen an das System weiter oder soll das System etwa kontinuierlich den Lane Manager pollen? Hierfür käme dann ja wohl nur getFallenPinCount() in Frage. Aber woher weiß das System dann, dass der Wurf tatsächlich erfolgt ist? Bei jeder Änderung von getFallenPinCount() müsste man dann wohl annehmen, dass seit der letzten Abfrage ein Wurf erfolgt ist. Was ist aber, wenn zwischen zwei Abfragen von getFallenPinCount() bereits mehrere Würfe erfolgt sind? Kann man zwischen 2 Würfen eine Mindestverzögerung annehmen, um die Pollingrate ausreichend niedrig zu wählen? Und schließlich: Für denn Fall, dass alle (oder zumindest mehrere) Spieler auf der selben Lane Spielen, wie soll das System feststellen, welcher Spieler geworfen hat, wenn ein Wurf festgestellt wird?

Vielen Dank im Vorraus :)

Bara2
Mausschubser
Mausschubser
Beiträge: 54
Registriert: 11. Nov 2005 13:41

Beitrag von Bara2 »

Ich kann mich da nur anschließen, das ist doch alles sehr unklar.
Zusätzliche Frage:
Was soll ich mit User Story 2 konkret anfangen? Verstehe ich das falsch, oder stehen da nicht nur Informationen, mit denen ich für meine Implementierung nichts anfangen kann bzw soll?

Benutzeravatar
dEeP-fRiEd
Kernelcompilierer
Kernelcompilierer
Beiträge: 432
Registriert: 19. Okt 2005 00:58
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von dEeP-fRiEd »

Also so wie ich das verstanden habe, werden die Würfe nun nicht mehr mit irgend einer add-Methode hinzugefügt, sondern vom LaneManager2000 erkannt und an das System weitergegeben. Dazu dürfen wir diesen modifizieren. ( Z.B. das Observer-Pattern nutzen ;-) )

Ich glaube beim Bowling ist es so, dass der Spieler immer wechselt, wenn ein Frame fertig ist. (Also normalerweise nach 2 Würfen, oder eben nach einem, falls der Spieler einen Strike hat)

Aus UserStory 2 geht denke ich hervor, dass es verschiedene Lanes gibt, und dort dann jawohl auch verschiedene Spieler spielen. (1 zu n Beziehung)


Aber ich fand die Aufganbenstellung insgesamt auch sehr schwammig und das ist nur meine Interpretation...
NOSCE TE IPSUM
visit: http://www.flicknetwork.net.tc

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Beitrag von marcel_b »

> Ich frage mich gerade, wie das Interface für die Multiplayer-Variante des Bowlingspiels aussehen soll.

Gute Frage - genau darum geht es. Dein Vorschlag mit der add() Methode ist möglich. Aus meiner Sicht geeigneter wäre es den LaneManger per Callback das System informiert, dass ein Wurf stattgefunden hat - wenn also eine Kugel hinten angekommen ist. (siehe Thread Ex 02 und Anpassung des LaneMangers2000).

Damit hättet ihr eine Schnittstelle in euer System für Black-Box Tests.


> Was ist der Lanemanager?
Siehe Slides und Erklärung in der Übung.

> Spielen alle Spieler auf der selben Lane ?
Ja. Eine Lane pro Game (1 zu 1) . Alle Spieler nur genau ein Game (n zu 1). Im Bowlingcenter spielt ihr auch zusammen auf einer Bahn.

> Und wie merke ich, dass ein Wurf erfolgt ist?
Wie im Thread Ex 02 diskutiert. Nimm an, es gäbe eine Sensor/Lichtschranke, die dem System meldet, das ein Wurf stattgefunden hat. In der ersten Übung war das genau das gleiche Problem. Da habt ihr das einfach über den Testfall simuliert. Wieso sollte es hier anders sein? Euer Testfall simuliert den Input in euer System - wie im ersten Lab...


> Polling [...] Hierfür käme dann ja wohl nur getFallenPinCount() in Frage.
Lies den Thread zu Ex 02. Polling ist im Regelfall (wie du selbst beschrieben hast) problematisch, fehleranfällig und eher ungeeignet.

> Und schließlich: [...] wie soll das System feststellen, welcher Spieler geworfen hat, wenn ein Wurf festgestellt wird?

Wann welcher Spieler dran ist, wird von eurem System entschieden - im Bowlingcenter geschieht das auch automatisch. Das geht beispielsweise über einfaches zählen. Sieh dir die Studenten Lösung zu Lab 1 an. Da wurde das hübsch erklärt. Ihr verfügt neben eurer eigenen Lösung bereits über zwei Lösung zur Berechung der Punkte und die korrekte Frameberechnung. Das muss also Multiplayer tauglich umgesetzt werden.


@Bara2
Ja, es gibt wenige Vorgaben. Ihr sollt Software Design machen - keine Lückentexte ausfüllen. Das Beispiel ist meines Erachtens groß genug damit man auch was designen kann aber nicht zu groß das es zu komplex für ein 2- oder 3-Mann Team wäre. Alle notwendigen Berechungen sind euch in den Musterlösungen des Labs gegeben und diskutiert worden. Jetzt müsst ihr ein kleines System designen und die Schnittstellen zur Umwelt (z.B. über Tests) festlegen.

Nochmal der Hinweis:

Die SE Design Übungen sind keine 1-Mann Übungen. Wir weisen nochmal darauf hin, das
1. Die Übungen Team-Aufgaben sind und gemeinsam gelöst werden sollen
2. der Übungsaufwand pro Person und Woche auf 5-8 Stunden ausgelegt ist.

Das ist der Rahmen der vom Dekant vorgegeben ist. Durch die Teamarbeit und die Diskussion untereinander wird der Lerneffekt erst vollständig erzielt. Diskutiert in eurer Gruppe welche Anforderungen an das System gestellt werden und beginnt gemeinsam das Design zu erstellen. Allein bleibt vieles unklar.


Wenn euch das System weiterhin unkar ist, kommt zur Sprechstunde am Freitag.

Viele Grüße
Marcel

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Beitrag von marcel_b »

Nachtrag:

nach der Vorlesung kam eine Gruppe mit der Frage, wie das Design der Übungsaufgabe 4 bewertet wird - speziell, wenn das Design nicht "optimal" wäre.

Damit der Anspruch an Aufgabe 4 klar wird:
Die Anforderungen an das System (Multiplayer, LaneManger) müssen von euch erfüllt werden. Das endgültige Design spielt dabei jedoch eine untergeordnete Rolle. Wichtig ist, dass ihr euer Design sinnvoll vertreten könnt und euer Ausarbeitung erkennen lässt, warum ihr euch dafür entschieden habt. Für euch selbst solltet ihr dann die anderen (Studenten-)Lösungen bewerten können und ggf. das beste aus diesen Lösungen lernen um später besser zu werden. Die Anforderungen sind entsprechend ebenfalls offen, damit der notwendige Spielraum zum Abwägen verschiedener Lösungen auch überhaupt erst aufkommen kann.

Die Bewertung der Übung ist binär. 0 | 1 . Bestanden ist die Übung, wenn alle Aufgaben gemäß der Anforderung erfüllt sind. Wenn also alle Fragen beantwortet und die Antworten Sinn ergeben sowie der Code gemäß der Use Cases/User Stories funktioniert.

Viele Grüße
Marcel

Benutzeravatar
BlackHawk
Nichts ist wie es scheint
Beiträge: 23
Registriert: 27. Okt 2004 19:12

Beitrag von BlackHawk »

marcel_b hat geschrieben:>
Ja. Eine Lane pro Game (1 zu 1) . Alle Spieler nur genau ein Game (n zu 1). Im Bowlingcenter spielt ihr auch zusammen auf einer Bahn.
Hallo!

Soll das heißen, dass ein Game auf alle Spieler aufgeteilt werden soll
oder dass jeder Spieler genau ein Spiel hat?

Danke & viele Grüße
Melanie

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Beitrag von marcel_b »

Ich verstehe dir Frage leider nicht genau. Was heißt 'aufgeteilt' und was genau meinst du mit 'jeder Spieler hat genau ein Spiel?' ?

Es gibt im System nur ein einiges Spiel und nur eine einzige Bahn. Wie sieht die reale Welt und die Beziehungen der Domain-Objekte untereinander aus? (du warst ja in der Vorlesung gestern :) )

Benutzeravatar
BlackHawk
Nichts ist wie es scheint
Beiträge: 23
Registriert: 27. Okt 2004 19:12

Beitrag von BlackHawk »

Also, ich hatte das so verstanden, dass sich z.B. drei Spieler ein Spiel (10 Frames) teilen. Soll heißen, dass Spieler A bei Frame 1 an der Reihe ist, dann bei Frame 2 Spieler B und bei Frame 3 Spieler C, usw. Das würde ich allerdings recht unfair finden, wenn z.B. 9 Spieler ein Game spielen, weil dann nur der 1. Spieler 2x dran kommt. Außerdem frage ich mich, wie dann die Punkte pro Spieler berechnet werden sollen. Spieler A wirft z.B. einen Strike und bekommt dann irgendwann die Punkte dazuaddiert, wenn er wieder an der Reihe ist? Und was wäre, wenn er in dem aktuellen Spiel nicht mehr dran kommt? Oder erhält er dann die Punkte des Nachfolgespielers? Oder spielen alle Spieler gemeinsam 1 Spiel miteinander statt gegeneinander?

Deshalb dachte ich, es gäbe ja auch die Möglichkeit, dass z.B. drei Spieler auf einer Bahn spielen und jeder seine eigenen 10 Frames hat. Die Spiele bzw. Frames wären dann auch ineinander verschachtelt, aber jeder Spieler hätte fairerweise die gleiche Anzahl an Frames.

Viele Grüße
Melanie

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Beitrag von marcel_b »

Hi Melanie,

fair sollte es schon sein... :)

Das ist wie bei Mensch 'Ärger dich nicht' oder 'Mau Mau' oder ... - in jeder Runde kommt jeder Spieler mal dran. Jeder Spieler bekommt auch nur die Punkte, die er selber erzielt hat und nicht die des Vordermanns etc. Also ganz klar: Jeder Spieler hat seine eigenen 10 Frames.

Nur um sicher zu gehen:
Ich bin hier im Domain Model - nicht im Design Model. Das bedeutet also nicht, dass alles, was hier gesagt wurde automatisch auch so in der Design Welt realisiert werden muss.

Wenn du noch Fragen hast, komm nachher in die Sprechstunde.

Viele Grüße
Marcel

MuldeR
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 131
Registriert: 18. Okt 2005 16:14
Wohnort: (d)armstadt
Kontaktdaten:

Beitrag von MuldeR »

> Und wie merke ich, dass ein Wurf erfolgt ist?
Wie im Thread Ex 02 diskutiert. Nimm an, es gäbe eine Sensor/Lichtschranke, die dem System meldet, das ein Wurf stattgefunden hat. In der ersten Übung war das genau das gleiche Problem. Da habt ihr das einfach über den Testfall simuliert. Wieso sollte es hier anders sein? Euer Testfall simuliert den Input in euer System - wie im ersten Lab...
Aus der Aufgabenstellung war leider nicht klar, dass man einfach so einen Sensor "einbauen" darf. Wir sind erstmal davon ausgegangen, dass man das Interface des LaneManagers gar nicht verändern darf und das unser System ausschließlich über dieses Interface mit der "Außenwelt" kommuniziert. Somit war die Frage, wie unser System dem LaneManger überhaupt die Information entlocken kann, dass ein Wurft erfolgt ist. Das wäre natürlich auch ziemlich schwer zu testen gewesen, da zwangsläufig die Zeit ins Spiel gekommen wäre. Mit dem Sensor ist das jetzt natürlich was anderes...

sander
Nichts ist wie es scheint
Beiträge: 23
Registriert: 2. Dez 2003 16:42

Beitrag von sander »

wir sind auch davon ausgegangen das getFallenPinCount() solange blockt bis ein wurf registriert wurde und dann das entsprechende ergebnis liefert.

Antworten

Zurück zu „Archiv“