Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Implementierung / Klassendiagramm "Mensch ärgere dich nicht"

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.12.2007, 13:47 Uhr
~FrOgg
Gast


Hallo Leute,

ich hab mir vorgenommen das Spiel Mensch ärgere dich nicht zu programmieren. Sprache C++ natürlich OOP...

Das Projekt soll demnächst bei uns in der FH starten und ich hatte nun aber schon zuvor Lust darauf. Das Spiel soll über 2 Schnittstellen implementiert werden, so dass jede Gruppe einen eigenen Spieler-Algorithmus implementieren kann und die dann gegeneinander spielen können.

Es soll also von jeder Gruppe nach einem vorgegebenen Interface, bzw vorgegebenen Interfaces ein Server und ein Spieler implementiert werden und dies sollten dann komplett frei verwendbar sein (Server Gruppe1 mit Spielern von Gruppe2, 3 und 4 zum Beispiel...)

Ich hab mir mal versucht ein Klassendiagramm zu erstellen und hätte nun gern einige Anregungen dazu.

Anzumerken wäre, dass ich zum ersten Mal so ein Klassendiagramm erstellt habe und nun überhaupt nicht weiß ob das so irgendwie Ok ist... Hab das mal von Hand mit Blei aufm Block gemacht und dann noch versucht es mit Visio digital zu machen... Das mit Visio ist nicht wirklich so optimal und ich weiß auch nicht ob das so ok ist.

Nun bitte ich einfach mal kurz um konstruktive Kritik zu den Schnittstellen (meine eigenen, nicht vom Prof vorgegeben!), zu der Umsetzung und zum Code...

Spieler-Algorithmus besteht natürlich noch nicht. Es soll einfach nur mal so allgemein ein Anfang sein...

Hier meine Diagramme:

Versuch Klassendiagramm mit Viso
Teil 1 von Hand
Teil 2 von Hand

Danke für eure Hilfe,

Hartmut
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.12.2007, 14:50 Uhr
ao

(Operator)


Also, ich bezieh mich auf das Visio-Diagramm, das ist am besten lesbar.

Sind "Spieler" und "Spiel" die vorgegebenen Schnittstellen? Ich nehme an, getField fragt, welche Figur (bzw. welche Farbe) auf einem bestimmten Feld steht, und setfigure bewegt eine Figur. Was tut act? Würfeln?

Wenn das das ganze Interface ist, wie erfährst du, wenn dich jemand rauswirft? Musst du für alle Felder getField machen, um zu erfahren, wer wo steht?

1. Deutsche und englische Bezeichner mischen ist schlecht. Entscheide dich für eine Sprache und bleib dabei.

2. Du solltest die Zahl 4 (Anzahl der Figuren und der Spieler) nicht hart einkodieren. Verwende Konstanten für sowas.

3. Warum sind die Start- und Zielfelder Member vom Server und nicht vom Spielfeld?

4. Wozu braucht das Spielfeld eine öffentliche Methode addField? Willst du zur Laufzeit Felder hinzufügen?

5. Die Felder sind vorwärts und rückwärts verkettet. Vorwärts verstehe ich, damit man von einem aufs nächste laufen kann. Aber wozu rückwärts? Wenn das überflüssig ist, dann lass es weg. Vermeidbare Fehlerquelle.

6. Die Figur hat eine Position (die Nummer des Feldes, auf dem sie steht, nehme ich an). Gleichzeitig hat das Feld ein Member figur. Ist das doppelte Information? Sowas ist gefährlich.

So weit erst mal mein Senf.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.12.2007, 15:11 Uhr
öni



Beziehe mich auf Visio.

Also ich versteh gar nicht was das ganze Ende1...Ende10 zu bedeuten hat?
Unteranderem würde ich dir raten wenn das ganze eine Gruppenarbeit sein soll bestimmte Namenskonventionen zu benutzen m für Methoden und a für Attribute z.b.:

-aFarbe
+msetzeFigur()

Desweitern finde ich es immer geschickt wenn der Methoden Name schon aussagt was die Methode macht. Gut sind finde ich sezteFigur(), getField(), getFarbe()(wobei wie ao sagt eng. oder dt.) aber man weiß zum Beispiel nicht was act() tut oder Gruppe1() ist das der constructor?

Ansonsten die Pfeile gerade anordnen sieht doch schöner aus .
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.12.2007, 16:40 Uhr
~FrOgg
Gast


So Hallo alle!

Erst einmal an ao und öni recht herzlichen Dank für die schnellen Antworten!!!

Zum Zweiten erst nochmals eine Entschuldigung für das miese Visio Diagramm, hab Visio zum ersten Mal benutzt und bin noch nicht wirklich damit klargekommen, hab aber nun in den letzten paar Stunden mehr gelernt und das Diagramm mal "vervollständigt"...

Hier als erst mal das aktuelle Diagramm!!!

Dann mal zu den Kommentaren von ao:
act() macht sagt einfach dem aufgerufenen Spieler er soll einen Zug machen (soll sozusagen auf deutsch "handle()" bedeuten was glaub etwas verfehlt wurde )

1. In dem Punkt muss ich dir wohl ganz klar rechtgeben... Doch das Diagramm ist eben erst entstanden und noch in der Entwicklungsphase. Wollte zu Beginn eigentlich alles Englisch machen, bin dann aber an vielen Begriffen gescheitert und da ich das im Bett mit Bleistift und Block entworfen habe wurde dann aus dem übersetzen noch nichts und deshalb sind die meisten Begriffe noch deutsch werde das versuchen einheitlich auf Englisch umzustellen...

2. Ist auch was wahres dran. Die Spielerzahl will ich natürlich auch einstellen können, wusste bisher jedoch noch nicht wie ich es umsetzen soll... werde das aber noch hinzufügen / abändern. Die Figurenanzahl pro Spieler wird als Konstante auf 4 bleiben, da Mensch ärgere dich nicht eben pro Spieler auch 4 Figuren besitzt und ich das auch so definieren werde...

3. Gute Frage, werd ich mir nochmals genauer anschauen. Danke für den Hinweis! Die werd ich wohl ins Spielfeld verlagern...

4. addField wird definitiv private sein und ist eben nur da um zu Beginn eine verkettete Liste mit 40 Elementen zu erstellen was dann das Spielfeld sein wird.

5. Die previous* sollten zur einfacheren Listenwanderung sein, ist jedoch noch ein Überbleibsel aus früheren Überlegungen, werde ich glaube wie du geraten hast wirklich wegrationalisieren

zu 6. wirds komplizierter! Da habe ich lange überlegt wie ich das realisieren soll. Einige Problemstellungen:
- Der jeweilige Spieler sollte immer wissen wo seine eigenen Figuren stehen!
- Der Spieler (Gruppe) wird soll eben von jeder Gruppe realisiert werden und darf somit auch keine Möglichkeit besitzen direkt auf das Spielfeld zuzugreifen und dort Dinge zu verändern (cheaten )... wollte zuerst im Feld einen Figur* anlegen und der Figur ebenfalls ein Feld* geben. Dann ist jedoch genau dieser Punkt nicht erfüllt...

Des weiteren soll ja dann jede Gruppe einen mehr oder weniger schlauen Algorithmus implementieren und braucht dazu natürlich auch die Positionen der anderen Figuren. Diese soll sich jedoch die Gruppe selbst besorgen und hat dafür aus dem Interface "getField" zur Verfügung. Bin damit eben auch nicht wirklich zufrieden, weiß aber gerade einfach nicht weiter... Falls jemand direkte Ideen hat kann er sie gerne mit mir teilen.

zu öni:
- Endeblabla -> neues Diagramm...
- Gruppenarbeit soll das sein, ja. Jedoch soll das erst irgendwann im Januar anfangen und ich hatte eben jetzt schon Bock drauf. Nur wurde eben das Interface von unserem Prof noch nicht vorgegeben also hab ich mir eben alles selbst ausdenken müssen. Das Projekt mach ich bisher alleine!
- Gruppe1() soll ein Konstruktor sein, ja!

Ansonsten schau ich mir nochmal alles an was ihr mir geschrieben habt! Danke!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.12.2007, 17:10 Uhr
~FrOgg
Gast


Hallo nochmal,

habe gerade bemerkt, dass die ganze Sache mit der verketteten Liste für den Müll ist. Statt dem dummy* kann ich einfach ein Farbe Felder[] array anlegen, dass 40 Felder beinhaltet oder?

Das mit der verketteten Liste war noch aus ersten überlegungen hängen geblieben als ich dem Spieler noch ganze Feld* übergeben wollte, was ich aber eben nicht darf...

Wenn man das Spiel selbst nur zum Spielen Programmiert wäre eine solge Handhabung sicherlich einfacher, da es aber ein Wettstreit der Algorithmen ("Gruppenklassen") sein soll geht das mit einer verketteten Liste glaube nicht. Ist zwar etwas umständlich aber glaube so dürfte das nun funktionieren. Erspart einiges an Funktionen wenn auf das Farb-Array direkt zugegriffen kann. Ist jedoch beim Figurbewegen etwas schwieriger, auch vor allem beim Figur rausschmeißen... Und dann muss die Figur ja noch ins Ziel kommen und darf dort keine anderen Figuren mehr überspringen... Die kleinen MenschÄDN Regeln zu beachten macht scheiß Probleme ^^

Grüße Hartmut
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.12.2007, 17:37 Uhr
~FrOgg
Gast


Wieder neu

hier
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: