Feste Reihenfolge von dem Ablauf von Methoden

Mika34

Bekanntes Mitglied
Hallo an alle,

Ich versuche gerade ein Kartenspiel zu modellieren. Dort stoße ich gerade an ein Problem und ich weiß nicht so recht wie ich das handhaben soll.
Es geht darum, dass wenn eine Methode von diesen drei vorliegenden
Java:
faceFirstCase();
faceSecondCase();
faceThirdCase();
auf dem UserInterface aufgerufen wird, dann muss der nächste Befehl zwingend
Java:
handleFirstCase();
handleSecondCase();
handleThirdCase();
einer von diesen sein, wobei die immer paarweise zusammenhängend sind. Wie zum Beispiel: wenn faceSecondCase(); aufgerufen wird, dann ist die nächste Methode, welche dann folgen muss handleSecondCase();
Sollte ich hier eine Methode erstellen, welche dies berücksichtig oder all dies auf der funktionalen Ebene klären. Zweiteres würde dann aber definitiv gegen die Richtlinien der OO verstoßen, demnach vermute ich, dass ich eine Obermethode erstellen muss, welche diese Situation handhabt, jedoch bin ich da komplett überfragt.

Hat einer von euch so etwas ähnliches implementiert und kann mir sein Vorgehen schildern?
 
Zuletzt bearbeitet:
Du fragst im Endeffekt, wie Du zwei Methoden hintereinander ausführst. Antwort: ruf sie hintereinander auf.

Das Problem ist, ohne Beschreibung kann man da nichts dazu sagen, denn OO ohne Kontext funktioniert nicht.

Ein Kartenspiel hat normalerweise Spieler, die Karten auf der Hand haben, dann gibt es einen Tisch, auf dem die gespielten Karten liegen, es gibt meist einen Spieler, der an der Reihe ist usw. Das ergibt dann zusammen einen Spielstand, der durch eine Aktion in einen neuen Spielstand überführt wird. Das wäre mal so ein grobe Idee von einem Modell. Da kann ich irgendwelche abstrakten faceFirstCase() und handleSecondCase() nicht wirklich einordnen.
 
Oh, nein es ging mir eher um die Frage, ob das Werfen einer Exception in der Methode selbst dann passieren sollte oder im UI.
Angenommen man führt
faceFirstCase();
aus.
Dann darf einzig und allein die nächste Methode nur
handleFirstCase();
sein. Wird eine andere Methode wie bspw.
handleSecondCase();
aufgerufen, soll eine Fehlermeldung ausgegeben werden. Das meinte ich damit
 
Damit wird es nicht klarer. Ein Programm wird immer sequentiell durchgeführt (ggf. in mehreren Threads).

Irgendwer ruft faceFirstCase() auf. Dann ruft der am Ende handleFirstCase() auf. Fertig, Reihenfolge sicher.

Und eine exception kannst nicht im "UI" werfen. Es muss immer in einer Methode geworfen werden, es gibt nur Code in Methoden. Ein omninöses UI gibt es nicht - es gibt nur Methoden, die aufgerufen werden.
 
Also ich verstehe das immer noch nicht. Sollen das Methoden sein, die der User triggert? Oder was soll das genau sein? Kannst Du bitte einmal genau schreiben, was das für Methoden sind und wann die wer aufruft?

Du bist doch der Entwickler. Also kannst Du doch sagen, was wie aufgerufen werden soll. Also wenn willst, dass nach faceFirstCase() handleFirstCase() aufgerufen wird, dann mach die private so dass die Methoden von außen nicht aufgerufen werden können und gibt nur eine Methode frei, die nacheinander beides aufruft.

Wenn es Event Handler der UI sind die auf Aktionen vom User stattfinden: Wenn der User das so nacheinander triggern kann, dann ist es nichts "exceptional", also kein Grund für eine Exception!

Wenn das eine eine UI Sache ist und das andere eine Reaktion darauf: Du musst doch irgendwo die Spielsteuerung haben. Und da muss dann sozusagen ein Event bekannt sein das dann das andere auslöst. Sprich: Die Logik muss ja irgendwo stecken ...

Aber wie gesagt: Beschreibe doch erst einmal genau, was da Sache ist....
 
Also es geht darum, dass man Karten von einem Spieldeck zieht. Wenn eine bestimmte Karte gezogen wird, sagen wir Karte FirstCase als Objekt, dann wird die Methode handleCase aufgerufen, welche die aktuelle Situation handhabt und die Methoden:
Java:
handleFirstCase();

handleSecondCase();

handleThirdCase();
beinhaltet, welche je nach aktueller Situation dann ausgeführt werden (über einen Fallunterscheidung)
. Die aktuelle Situation sieht dann wie folgt aus:
Der Nutzer würfelt einen Spielwürfel. Dieser Spielwürfel hat von Situation zu Situation verschieden viele Augenzahlen. Im FirstCase 4, im SecondCase 6 und im ThirdCase 3. Deswegen habe ich die drei Methoden mit
Java:
handleFirstCase();
handleSecondCase();
handleThirdCase();
Ist die Augenzahl größer als eine Zahl x, dann ist die aktuelle Situation gewonnen worden, würfelt er jedoch eine Zahl kleiner der Zahl x, dann hat er verloren in dieser Situation.

Nun geht es darum, dass das Ziehen von der Karte vom Spielkartendeck und das Würfel nicht in einer Methode passier (also so habe ich es verstanden). Denn im späteren UserInterface sieht es dann so aus:
1.) Karte wird gezogen durch den Command des Nutzers in der Konsole
2.) Dann unterschieden, welcher Case es ist (Methode)
3.) Dann wird dementsprechend zurückgegeben, welcher Case vorliegt.
4.) Nun muss der Nutzer genau diese Würfel würfeln, welche in dieser Situation verlangt werden. ( Im FirstCase 4 Augen, im SecondCase 6 Augen und im ThirdCase 3 Augen)
Versucht der Nutzer hier beispielsweise nach dem Ziehen des FirstCases (wo der Würfel mit 4 Augen gewürfelt werden soll) einen Command in die Konsole zu schreiben, welcher den Würfel mit 6 oder 8 Augen würfeln soll, dann soll eine Fehlermeldung kommen, da er nur den Würfel mit 4 Augen in diesem Fall würfeln kann.
 
Du hast (hoffentlich) einen Controller, der das Spiel steuert. Der muss zu jedem Zeitpunkt wissen, welche Befehle erlaubt sind. Und entsprechend andere Befehle verbieten. Und der weiß auch, was passiert und muss halt entsprechend die Liste der erlaubten Befehle entsprechend der passierten Aktionen anpassen.
 
Wie kann man das am Besten in die Tat umsetzen. Man lässt dann ja quasi das ganze Spiel über ihn laufen. So habe ich es bis jetzt auch implementiert, aber bei mir hakt noch der Informationsgehalt dieses Controllers. Wie kann man dem am Besten die Informationen geben?
 

Zurück
Oben