Open nichtderlehrer opened 7 years ago
Hallo erst einmal. Wir haben schon mitbekommen, dass sie unserem Projekt Aufmerksamkeit schenken. Wir würden uns freuen, wenn sie uns ein wenig beraten :) Wir sind momentan daran die "Logik" zu debuggen damit überhaupt erst mal was läuft. Wir hatten heute ein Treffen welches viele Fehler hervorbrachte, diese versuchen wir jetzt bis nächste Woche zu fixen. (wir treffen uns jeden Montag um 16.15 bis 17.45) Unser Problem ist momentan das Nichtvorhandensein von Zeit (12. Klasse halt ^^) und Erfahrung. Wie gesagt, wir freuen uns über jede Hilfe ihrerseits.
Und rein aus Interesse: Wie sind sie auf unser Projekt gestoßen? Vielleicht möchten sie ein wenig mehr über dieses erfahren. Wir fragen uns das schon seitdem sie uns das erste Mal folgten ^^
Dann würde ich vorschlagen, auf das Siezen zu verzichten und per du zu kommunizieren, um die Sache etwas zu vereinfachen.
Wie bereits erwähnt, halte ich es für sehr vorteilhaft, sich (zunächst) auf das allernötigste zu beschränken. Ich würde allerdings noch weiter gehen, und zunächst mal eine stark vereinfachte Version implementieren, die nicht bereits Rufspiel, Solo, Wenz und Ramsch kann, sondern nur eine einzige Variante anbietet. Mein Vorschlag wäre, sich fürs Erste auf ein Herzsolo zu beschränken (denn beim Rufspiel ist die Aufteilung in zwei Mannschaften etwas komplexer, beim Ramsch ebenfalls). Dadurch spart man sich erst einmal die recht komplexe Logik, bei mehreren angekündigten Spielen das stärkste auszuwählen. Der erste Spieler, der ein Spiel ankündigt, darf spielen. Falls keiner Spielt, wird einfach das nächste Spiel gegeben.
Außerdem fällt stark auf, dass eure Klasse Game sehr viele members, d.h. sehr viel Zustand - teils stark redundant - enthält, was die Sache stark verkompliziert. Beispiele:
dump
, played
, playedStiche
, matrix
: Soweit ich sehe, ist played
immer der aktuelle Stich, dump
alle bereits gespielten Karten und playedStiche
die Anzahl der gespielten Stiche. Sprich: played
ist stets eine "Teilmenge" von dump
, und playedStiche
ist letztlich dump.size() / 4
. Dazu noch matrix
, die dann an die einzelnen Spieler kommuniziert werden, die eventuell ihren eigene botMatrix
halten - sehr viel Zustand, bei dem man stets aufpassen muss, dass alle Daten konsistent sind. Dies zu gewährleisten, ist möglich, aber äußerst schwierig, und ihr solltet zusehen, das drastisch zu vereinfachen. Mein Vorschlag wäre ein einziger Stack<Stich>
, der die Stiche des aktuellen Spiels enthält. Dieser Stack ist dann die Referenz für all die genannten Variablen, die dadurch unnötig werden würden. Zusätzlich ist es höchstwahrscheinlich nicht schlau, die Bots eine eigene Kopie davon verwalten zu lassen. Stattdessen sollten Game
eine Methode bereitstellen, mit der man alle Stiche des aktuellen Spiels anschauen kann.dealer
, roundNumber
: Könnte man nicht nur die roundNumber
speichern, und dann dealer
davon ableiten (roundNumber % 4
)?Darüberhinaus solltet ihr versuchen, in eurem Programm für gleiche Dinge stets die gleiche Repräsentation zu verwenden. Ich sehe beispielsweise eine callingColor
, die jedoch keine CardColor
, sondern ein int
ist - das fällt euch früher oder später auf die Füße.
Zu guter Letzt: Warum macht ihr euch das Leben mit Deck.initialize
so kompliziert? Anstatt deck.initialize(dump)
aufzurufen, könntet ihr doch viel einfacher einfach deck = new Deck()
schreiben. (Ich sehe ein, dass man eventuell einen "menschlichen" Mischalgorithmus implementieren will, aber ihr seid - denke ich - deutlich besser beraten, euch hier nicht unnötig Komplexität aufzuladen.)
Ersteinmal danke fuer die vielen Anmerkungen, wir werden Das demnaechst besprechen. Ich habe das Meiste verstanden, allerdings habe ich die Logik nicht wirklich geschrieben und werde mich da wohl noch einarbeiten muessen ^^ Wir melden uns dann bei dir wenn es weitergeht.
Nur eine kurze Anmerkung zum Mischalgorithmus: uns wurde von unserem Lehrer vorgegeben, die Mischmethode so menschlich wie möglich zu machen, obwohl wir gemeint hatten, dass es auch leichter geht. ^^
Nur eine Idee: Habt Ihr schon einmal überlegt, Euch einem bereits existierenden Open-Source-Projekt anzuschleßen? Ich weiß, dass es erst einmal nicht so attraktiv klingt wie ein eigenes Projekt, aber man könnte dabei vermutlich zum einen lernen, wie andere - möglicherweise erfolgreich implementierte - Lösungen zustandekommen und müsste sich nicht mit all den Grundlagen herumschlagen, die sehr zeitintensiv sind, aber keine (oder kaum) Früchte tragen.
Ich stolpere von Zeit zu Zeit über dieses Projekt, das ich für ambitioniert, aber nicht unrealistisch halte. In der Beschreibung sehe ich, dass die Anforderungen mittlerweile (zumindest vorerst) auf die Kommandozeile beschränkt wurden - eine gute Idee, wie ich finde.
Ich denke, ich könnte Ihnen bei der Umsetzung mit Rat (weniger Tat) zur Seite stehen, sofern Sie das möchten. Hätten Sie daran Interesse?