Laden...

Mastermind übers Netzwerk

Erstellt von Charsten vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.845 Views
Charsten Themenstarter:in
142 Beiträge seit 2007
vor 15 Jahren
Mastermind übers Netzwerk

Hallo zusammen,

kurz vor der Bescherung möchte ich euch noch ein Projekt vorstellen, an dem ich im Rahmen meiner Ausbildung gearbeitet habe.

Worum geht es
Es handelt sich um eine Version des Spiels Mastermind.

Hintergrund
Die Aufgabe war es, erst einmal ein funktionierendes Spiel zu erstellen und es danach um einen Netzwerkmodus zu erweitern.

Das Spiel
Das Spiel sollte soweit funktionstüchtig sein.
Es wird eine versteckte Lösung erstellt, die man in 10 Versuchen erraten muss. Konnte man die Lösung erraten, darf man sich in eine Bestenliste eintragen.
Das Netzwerkspiel funktioniert eigentlich ganau so, jedoch wird hier die Lösung vom Gegner festgelegt und man kann das Vorgehen des Gegners beobachten.

Die Farbe seiner Lösung ändert man, indem man mit der Maus über den Kreis fährt und die Maustaste gedrückt hält. Es werden dann alle Farben gezeigt und diejenige ausgewählt, über der man die Maustaste wieder los lässt.

Bei der Hilfe steht ein schwarzer Kreis für eine komplett richtige Farbe und ein weißer Kreis für eine vorhandene Farbe (sie ist also noch nicht an der richtigen Stelle).

Sonstiges
Ich hoffe, dass das mit dem Netzwerk wirklich klappt. Die kleine Klasse dafür hat in einem Test gut funktioniert, aber das fertige Programm konnte ich leider noch nicht im NW ausprobieren, sondern immer nur lokal.

Der Quelltext lässt sich sicher an mancher Stelle noch etwas optimieren und es ist noch nicht jede Einzelheit kommentiert. Folgt in einer nächsten Version.

Über Kommentare (am liebsten gute) würde ich mich freuen 🙂

Ich wünsche euch noch einen schönen Festtag
mfg Carsten

Bild

Charsten Themenstarter:in
142 Beiträge seit 2007
vor 15 Jahren

Update / Edit:

  • Behebung eines kleinen Bugs
  • Kleine Veränderung der Zeitanzeige
  • Die eigene IP wird beim einrichten eines Spiels angezeigt

Status:
Ich habe alles umgesetzt, was ich mich vorgenommen habe. Offiziell ist das Projekt eigentlich abgeschlossen.
Projektzeitraum: 11. + 12. 2008
Arbeitszeit: ~ 35 Stunden

Bisherige Downloads: 23

J
19 Beiträge seit 2007
vor 15 Jahren

kuhl, ich mag mastermind! scheint auch soweit ganz gut zu funktionieren, hab aber nur kurz angetestet. Werd das aber morgen nohcmal in ruhe anspielen

5.299 Beiträge seit 2008
vor 15 Jahren

Hi!

Erstmal Glückwunsch zu diesem runden Spiel.
Sieht aus wie Mastermind, funktioniert wie Mastermind, und auch die originelle Farb-Auswahl hat man gleich kapiert.
Den Code findich überwiegend gut aufgeteilt, jedenfalls habich schon nach recht kurzer Zeit so ungefähr den Überblick, wies zu funktionieren scheint, und welche Klasse was macht.

(Aber von wegen "kommentierter Code" - in NetworkHelper musste aber nochma reingucken!)
Die Klasse Farbkreis scheint mir aber überflüssig. Ein 2-dimensionales Array von Colors könnte doch dieselbe Information verwalten. Wo die einzelnen Kringel dann hingemalt werden ergäbe sich aus den Abmaßen des Controls, welchem sie zugeordnet sind.
Also eine MMFarbCollection bekäme ein Array Color[1, 4], ein HilfeStecker Color[2][2], ein MMPanel Color[2][3].
Grade habich übrigens die Property BackColor vom MMPanel einfach rausgeschmissen, es ist ja ein Control, und hat von daher per se eine BackColor - funzt.

Form1 findich überladen. Da ist das Einzelspiel reingestopft, das 2-er-Spiel, die Einrichtung der Internet-Connection, und ein Chat.
Das könnte man auch auf 4 TabPages eines TabControls verteilen, evtl. auch mit versteckten Reitern. gugge FramesetLike.
Oder wenigstens 2 TabPages, eine für den I-Net-Kram und eine fürs Spiel (und Einzelspiel macht dann das Form auf halbe Größe)

Zu NetworkHelper:
Meine Versuche mittm VersuchsChat deuten darauf hin, daß _ein _Networkstream ausreicht, für eine Hin-Her-Kommunikation. Man muß halt im Gui-Thread senden, und im Nebenthread receiven.

Der frühe Apfel fängt den Wurm.

Charsten Themenstarter:in
142 Beiträge seit 2007
vor 15 Jahren

Hallo ihr beiden,

danke schon mal für die Antworten.

Besonders die Punkte, die ErfinderDesRades genannt hat, werd ich nochmal angehen (wahrscheinlich erst im neuen Jahr)

(Aber von wegen "kommentierter Code" - in NetworkHelper musste aber nochma reingucken!)

Der Quelltext lässt sich sicher an mancher Stelle noch etwas optimieren und es ist noch nicht jede Einzelheit kommentiert.

Grob gesagt war das Hauptspiel gemeint 🙂

mfg

Carsten

5.299 Beiträge seit 2008
vor 15 Jahren

Habe übrigens dein Teil zum Anlaß genommen, den VersuchsChat etwas zu erweitern, nämlich um einen "SingleServer". Die normale Server-Client-Architektur sieht ja vor, daß viele Clients sich mit einem Server connecten können.
Der SingleServer (eine sehr kleine Klasse) kann sich nur mit einem Client verbinden, das ist wohl prinzipiell die Struktur, wie sie bei Network-Mastermind vorliegt.

Der frühe Apfel fängt den Wurm.

Charsten Themenstarter:in
142 Beiträge seit 2007
vor 15 Jahren

Hallo,

Aber von wegen "kommentierter Code" [...]

Also alles Nenneswerte sollte jetzt kommentiert sein 🙂

Die Klasse Farbkreis scheint mir aber überflüssig.

Mir ist klar, dass Farbkreis und MMHighScoreEintrag nicht solche riesigen Klassen sind, aber die Daten müssen nunmal irgendwie verwaltet werden. Natürlich hätte ich wie du sagst ein Array nehmen können, die Daten wären aber die Selben gewesen. Es ist also lediglich ein anderes Design und in meinen Augen nicht überflüssig 🙂

Grade habich übrigens die Property BackColor vom MMPanel einfach rausgeschmissen, es ist ja ein Control, und hat von daher per se eine BackColor - funzt.

Als ich das gemacht habe, wurden gar keine Kreise mehr gezeichnet -> es geht um das Invalidate im set

Form1 findich überladen.

Wenn man das so aufzählt hört sich das wirklich nach Vielem an, aber wenn ich das Form großziehe muss ich nur das Netz-Panel in den Vorder- Hintergrund zu verschieben und ich kann an beiden Stellen bequem arbeiten.

[...] daß ein Networkstream ausreicht [...]

Hm, lässt sich drüber streiten ^^ ich finds mit je einem Stream logisch nachvollziehbarer.

Trotzdem nochmal danke vor allem für die Kritik für die du dir Zeit genommen hast, auch wenn ich mich nicht überzeugen lassen konnte 🙂


Ich habe auch noch ein paar Änderungen vorgenommen, dazu einfach den Download-Post ansehen, falls interesse besteht.

mfg

Carsten

5.299 Beiträge seit 2008
vor 15 Jahren

Grade habich übrigens die Property BackColor vom MMPanel einfach rausgeschmissen, es ist ja ein Control, und hat von daher per se eine BackColor - funzt.
Als ich das gemacht habe, wurden gar keine Kreise mehr gezeichnet -> es geht um das Invalidate im set

Hmm. Wenn einem Control eine neue BackColor zugewiesen wird, dann zeichnet es sich natürlich automatisch neu - ein extra - Invalidate() ist nicht nötig.

Der frühe Apfel fängt den Wurm.