[quote=FranzFerdinand]Dass man sich hier so viel Mühe macht. Ich sagte doch, ich bin nur auf Ideen und Ansätze aus[/quote]Das Problem hat mich eben interessiert und da hab ich’s mal schnell runterprogrammiert. Aber ich habe 15 Jahre Übung im Programmieren, deshalb sollte das für Dich Ansporn, aber nicht Maßstab sein.
[quote=FranzFerdinand;106780]1) Ich verstehe das mit der Map noch nicht so ganz. Heißt das, das sind irgendwie 2 Listen wo die 50 Männer und die 50 Frauen drin sind[/quote]Nein.
Jeder Tisch hat 2 Listen. Eine in der bis zu 2 Männer und eine in der bis zu 2 Frauen drin sind, so wie @timbeau das vor schlug.
Um ein if
zu sparen (ich denke, Du hast hier im Forum schon meine Abneigung dagegen mitbekommen) habe ich die beide Listen des Tisches in eine Map gepackt:Map<Geschlecht,List<Gast>> gaeste;
Wenn der Tisch jetzt prüfen soll, ob für ein Geschlecht jetzt noch ein Platz frei ist muss er gar nicht wissen um welches Geschlecht es sich handelt, denn egal welches Geschlecht sich setzten will, die Liste des selben Geschlechts darf nicht voller sein, als die des Anderen:istAkzeptiert = gaeste.get(geschlecht).size() <= gaeste.get(geschlecht.getAnderes()).size()
Dann muss nur noch die (statische) Methode getAnderes()
im enum
Geschlecht
passen implementiert sein.
[quote=FranzFerdinand;106780]2) Listener sind ein interessanter Ansatz. Habe mich außer den ActionEvents beim klicken von jButtons nie damit befasst und bin mir dem bewusst, sie in diesem Zwecke endlich mal zu benötigen. Da muss ich mich erstmal belesen zu. Ich hab ja noch bis Oktober Zeit und mehr Wissen zu Java schadet ja nicht.[/quote]Da ist nichts kompliziertes dabei. Man übergibt dem Verursacher der Ereignisse ein (sehr kleines) Objekt mit sehr wenigen Methoden (üblicher Weise eine einzige) und der Verursacher ruft diese Methode auf, wenn ein Ereignis eintritt.
Da das übergebene Objekt im Kontext des Ererignisverbrauchers erzeugt wird hat es Zugriff auf dessen interne Methoden und Variablen.
Der Witz ist nun, das es dem Erzeuger vollkommen egal ist wer ihm so ein Listener-Objekt übergibt oder was der Listener mit dem Ereignis macht, der Erzeuger ruft ja nur die in einem Interface deklarierte Methode auf…
[quote=FranzFerdinand;106780]3) Du sagtest ohne GUI. Darf ich mal kurz nachfragen? Hast Du da jetzt nur die Logik programmiert oder auch die Ereignisse, wo der User die Karten dann direkt über irgendetwas GUIähnliches verschieben kann?[/quote]Ich habe die Spielelogik und einen primitiven Computerspieler implementiert. Den Spielverlauf kann man auf der Kommandozeile verfolgen, aber nicht eingreifen. Also man sieht, wie das Spiel versucht jeden Gast der Reihe nach auf verschiedene Stühle zu setzen bis ein passender gefunden ist auf den der Gast das gesetzt wird oder alle Stühle durchprobiert sind. Wenn dann ein Tisch voll ist gibt es auch eine entsprechende Ausgabe.
stark gekürzt
[spoiler]
prüfe Gast DEUTSCHER, WEIBLICH auf Stuhl 12
[tische=[
Tisch 7, land=FRANZOSE, gaeste={MAENNLICH=[], WEIBLICH=[]}],
Tisch 8, land=NORWEGER, gaeste={MAENNLICH=[], WEIBLICH=[]}]]]
prüfe Gast DEUTSCHER, WEIBLICH auf Stuhl 8
[tische=[
Tisch 4, land=RUSSE, gaeste={MAENNLICH=[], WEIBLICH=[]}],
Tisch 5, land=BELGIER, gaeste={MAENNLICH=[], WEIBLICH=[]}],
Tisch 6, land=BELGIER, gaeste={MAENNLICH=[], WEIBLICH=[]}]]]
prüfe Gast DEUTSCHER, WEIBLICH auf Stuhl 3
[tische=[
Tisch 2, land=DEUTSCHER, gaeste={MAENNLICH=[], WEIBLICH=[]}],
Tisch 3, land=GRIECHE, gaeste={MAENNLICH=[], WEIBLICH=[]}]]]
Gast DEUTSCHER, WEIBLICH
neu auf Stuhl 3
[tische=[
Tisch 2, land=DEUTSCHER, gaeste={MAENNLICH=[], WEIBLICH=[]}],
Tisch 3, land=GRIECHE, gaeste={MAENNLICH=[], WEIBLICH=[]}]]]
prüfe Gast DEUTSCHER, MAENNLICH auf Stuhl 12
[tische=[
Tisch 7, land=FRANZOSE, gaeste={MAENNLICH=[], WEIBLICH=[]}],
Tisch 8, land=NORWEGER, gaeste={MAENNLICH=[], WEIBLICH=[]}]]]
prüfe Gast DEUTSCHER, MAENNLICH auf Stuhl 10
[tische=[
Tisch 6, land=BELGIER, gaeste={MAENNLICH=[], WEIBLICH=[]}],
Tisch 7, land=FRANZOSE, gaeste={MAENNLICH=[], WEIBLICH=[]}]]]
prüfe Gast DEUTSCHER, MAENNLICH auf Stuhl 3
besetzt von Gast DEUTSCHER, WEIBLICH
prüfe Gast DEUTSCHER, MAENNLICH auf Stuhl 2
[tische=[
Tisch 1, land=POLE, gaeste={MAENNLICH=[], WEIBLICH=[]}],
Tisch 2, land=DEUTSCHER, gaeste={MAENNLICH=[], WEIBLICH=[Gast DEUTSCHER, WEIBLICH]}],
Tisch 3, land=GRIECHE, gaeste={MAENNLICH=[], WEIBLICH=[Gast DEUTSCHER, WEIBLICH]}]]]
Gast DEUTSCHER, MAENNLICH
neu auf Stuhl 2
[tische=[
Tisch 1, land=POLE, gaeste={MAENNLICH=[], WEIBLICH=[]}],
Tisch 2, land=DEUTSCHER, gaeste={MAENNLICH=[], WEIBLICH=[Gast DEUTSCHER, WEIBLICH]}],
Tisch 3, land=GRIECHE, gaeste={MAENNLICH=[], WEIBLICH=[Gast DEUTSCHER, WEIBLICH]}]]]
prüfe Gast TUERKE, MAENNLICH auf Stuhl 12
[tische=[
Tisch 7, land=FRANZOSE, gaeste={MAENNLICH=[], WEIBLICH=[]}],
Tisch 8, land=NORWEGER, gaeste={MAENNLICH=[], WEIBLICH=[]}]]]
[...]
prüfe Gast TUERKE, MAENNLICH auf Stuhl 24
[tische=[
Tisch 1, land=POLE, gaeste={MAENNLICH=[Gast DEUTSCHER, MAENNLICH], WEIBLICH=[]}],
Tisch 2, land=DEUTSCHER, gaeste={MAENNLICH=[Gast DEUTSCHER, MAENNLICH], WEIBLICH=[Gast DEUTSCHER, WEIBLICH]}]]]
nicht platziert
prüfe Gast NORWEGER, MAENNLICH auf Stuhl 12
[tische=[
Tisch 7, land=FRANZOSE, gaeste={MAENNLICH=[], WEIBLICH=[]}],
Tisch 8, land=NORWEGER, gaeste={MAENNLICH=[], WEIBLICH=[]}]]]
[...]
prüfe Gast GRIECHE, WEIBLICH auf Stuhl 5
[tische=[
Tisch 3, land=GRIECHE, gaeste={MAENNLICH=[Gast DEUTSCHER, MAENNLICH, Gast GRIECHE, MAENNLICH], WEIBLICH=[Gast DEUTSCHER, WEIBLICH]}],
Tisch 4, land=RUSSE, gaeste={MAENNLICH=[Gast GRIECHE, MAENNLICH], WEIBLICH=[Gast RUSSE, WEIBLICH]}]]]
Gast GRIECHE, WEIBLICH
neu auf Stuhl 5
[tische=[
Tisch 3, land=GRIECHE, gaeste={MAENNLICH=[Gast DEUTSCHER, MAENNLICH, Gast GRIECHE, MAENNLICH], WEIBLICH=[Gast DEUTSCHER, WEIBLICH]}],
Tisch 4, land=RUSSE, gaeste={MAENNLICH=[Gast GRIECHE, MAENNLICH], WEIBLICH=[Gast RUSSE, WEIBLICH]}]]]
ist Voll: Tisch 3, land=GRIECHE, gaeste={MAENNLICH=[Gast DEUTSCHER, MAENNLICH, Gast GRIECHE, MAENNLICH], WEIBLICH=[Gast DEUTSCHER, WEIBLICH, Gast GRIECHE, WEIBLICH]}]
Tisch 3 neues Land: SPANIER
prüfe Gast BELGIER, WEIBLICH auf Stuhl 4
[tische=[
Tisch 3, land=BELGIER, gaeste={MAENNLICH=[], WEIBLICH=[]}],
Tisch 4, land=RUSSE, gaeste={MAENNLICH=[Gast GRIECHE, MAENNLICH], WEIBLICH=[Gast RUSSE, WEIBLICH, Gast GRIECHE, WEIBLICH]}]]]
prüfe Gast ITALIENER, WEIBLICH auf Stuhl 24
[tische=[
Tisch 1, land=POLE, gaeste={MAENNLICH=[Gast DEUTSCHER, MAENNLICH, Gast UNGAR, MAENNLICH], WEIBLICH=[Gast UNGAR, WEIBLICH]}],
Tisch 2, land=DEUTSCHER, gaeste={MAENNLICH=[Gast DEUTSCHER, MAENNLICH], WEIBLICH=[Gast DEUTSCHER, WEIBLICH]}]]]
nicht platziert
8 Gäste nicht platziert
[/spoiler]
[quote=FranzFerdinand;106780]Die GUI ist aktuell mein größtes Problem.[/quote]meins auch, außerdem frisst GUI immer 'ne menge Zeit. Mit war die Spielelogik wichtig.
[quote=FranzFerdinand;106780]4) […] Wundert mich, wie Du das “auf ein Viertel reduziert” hast. [/quote] Das ist eben die Kunst beim Programmieren: Finde raus, wo sich Programmteile ähnlich verhalten und finde geeignete Parameter, die die Unterschiede bewirken.
Wenn man sich den Spielplan an sieht fällt dem geübten Auge auf, dass die Tische im Quadrat aufgestellt sind. Und da erinnere ich mich an meinen alten Mathelehrer: Was ist das Besondere an einem Quadrat?
[quote=FranzFerdinand;106780]Aber ich weiß auch nicht, wie viel bei Dir 100% waren.[/quote]Natürlich die 24 Stühle.
[quote=FranzFerdinand;106780]4.1) In welchem Typ würdest Du empfehlen abzuspeichern, zu welchen Tischen der Stuhl gehört?
Soll dann jeder Stuhl ne List haben mit {4,7,12} oder sowas?[/quote]genau dass, aber eben nicht die IDs sondern die Tisch-Objekte selbst.
[quote=FranzFerdinand;106780]Ach, es gibt so viele Möglichkeiten und ich möchte das einfach nicht unnötig kompliziert machen.[/quote]Auch dass zeichnet den guten Programmierer aus, dass er die verschiedenen Lösungewege kennt und mit Blick auf das Ziel bewerten kann. Hier sein nur so viel gesagt: in einer OO-Sprache sollte man in der Geschäftslogik nicht mit ID’s rumhantieren (Schnittstellen oder IO ist was anderes…), Die ID’s brauche ich in meinem Beispiel nur für die “Visualisierung” auf der Kommandozeile.
[quote=FranzFerdinand;106780]5) Wäre es an der Stelle nicht klüger, nur die Listennummer zu übernehmen, damit ich bei Bedarf die Liste fragen kann, was denn bei Element 37 so ist?[/quote]Es wäre an dieser Stelle klüger, das Objekt weiterzugeben (nicht zu kopieren), dann brauchst Du niemanden “fragen”.
Dass ist überhaupt ein Stichwort: Eines der Prinzipien der OOP ist “tell, don’t ask”. Also statt in der SpielKlasse zu schreibenList<Gast> frauen= tisch.getWeiblich(); List<Gast> maenner= tisch.getMaennlich(); if(Geschlecht.MAENNLICH=gast.geschlecht){ if(maenner.size() <= frauen.size()) //... else{ //... }
sollte es so sein:if(tisch.istFreiFuer(gast.getGeschlecht()))
Und die Logik wird vom Tisch ausgeführt, ohne dass seine Interna, also wie er sich die Anzahl Frauen und Männer merkt, nach außen gegeben wird.
[quote=FranzFerdinand;106780]6) […]C) Alle 21 Barplätze sind belegt[/quote]Die BarPlätze habe ich bersehen, scheint mir aber auch nicht ganz so wichtig.
bye
TT