Dimitri Rettig: Suche ambizionierte Fernschachspieler...

Beitrag lesen

Hi,

ich dachte mir, ich poste mal ins Forum, damit auch andere was dazu sagen können:

Ich habe ein ziemlich abstraktes Modell entwickelt, dazu das "Bild":

************************************
                    *              Server              *
                    *  Schiedsrichter         Monitor  *
                    ************************************

Client           Client           Client           Client           Client
 Zuschauer        Zuschauer        Zuschauer         Zuschauer       Zuschauer
  Spieler1         Spieler2

Das eigentliche Spiel läuft auf dem Server ab. Man kann es sich als ein Schachbrett (Server) vorstellen. Gespielt wird wie folgt:
Ein Spieler (Client) gibt seinen Zug an den Schiedsrichter (Server). Dieser überprüft, ob der Zug möglich ist oder nicht. Ist der Zug regelwidrig, so gibt der Schiesrichter eine Fehlermeldung an den Spieler, der gerade am Zug ist, aus, die besagt, worin diese Regelwidrigkeit liegt. Ist der Zug Regelkonform, so gibt der Schidsrichter eine Bestätigung an den Spieler und führ den Zug auf dem Schachbrett aus. Bei Patt, dreifacher Stellungswiederholung, "50. Züge ohne Abtausch" oder einer anderen Situation, bei der keine theoretische Gewinnmöglichkeit für keine Partei mehr gegeben ist (z. B. König gegen König, König und Läufer gegen König etc.) meldet der Schiedsrichter "Remis", bei Matt meldet er "Matt". Andernfalls wendet er sich von dem Spieler ab und lauscht nun auf die Züge des anderen Spielers und drückt die Uhr. Das  Während er lauscht, achtet er auf die Zeit und meldet gegebenfalls "Zeitüberschreitung". Und so geht es weiter. Nachdem der Schiedsrichter einen Zug ausgeführt hat, wird dieser auf dem "Monitor" sichtbar.
Kommuniziert wird über eine Socket-Verbindung und über ein "Protokoll", ein Regelwerk.

Mein Modell hat im Wesentlichen folgende Stärken:

1. Ein Zuschauer ist einer, der die Berechtigung hat, auf den "Monitor" zuzugreifen, also den Verlauf der Partie anzuschauen. Ein echter Spieler ist also ein Spieler im Sinne des Modells, er kann also ziehen, und ein Zuschauer gleichzeitig.

2. Es ist im Prinzip egal, wie der Client aussieht. Hauptsache er ist in der Lage, eine Socket-Verbindung zum Server herzustellen und beherrscht das "Protokoll".
Empfängt der Client, z. B. die Meldung "Zeitüberschreitung" vom Server, so kümmert sich das Programm selber um die Sprache, in der diese Meldung an den Spieler (enschlichen Spieler) ausgegeben wird.

Ich bin mir im Klaren, dass dies ein wirklich allzu abstraktes Modell ist. Da ich es für ein anderes Spiel entwickelt habe, kann ich nicht sagen, wie z. B. die Überprüfungsroutine auf die Richtigkeit eines Zuges aussehen soll, allerdings habe ich ebenfalls dazu einige Überlegungen angestellt:
Das Schachbrett-Objekt besteht aus 64 Felder-Objekten. In jedem dieser Felder ist vermerkt, zu welchem Schachbrett, oder besser gesagt zu welcher Stellung, sie gehören. Ebenfalls ist vermerkt, welche Figur (ebenfalls ein Objekt) sich gerade auf dem Feld befindet. Dabei ist "keine Figur" ebenfalls eine Figur. In jedem Figur-Objekt ist vermerkt, zu welchem Feld diese gehört. Ausserdem hat die Figur die Eigenschaft "Farbe" und eine Methode, z. B. move(x, y), dabei sind x und y Koordinaten des Feldes, wohin die Figur ziehen soll. Nun kann die Figur selber analysieren, ob sie dorthin ziehen kann, oder nicht (ob z. B. andere Figuren im Wege stehen oder ob die Figur überhaupt so ziehen kann, nach Regeln der FIDE). Kann die Figur so nicht ziehen, so gibt sie eine entsprechende Fehlermeldung (ich habe an Exceptions gedacht) aus, kann sie ziehen, so fordert sie das entsprechende Schachbrett auf, dass es auf das Feld, auf das die Figur ziehen will, diese Figur stellt (z. B. einen schwarzen Bauern) und auf das Feld, auf dem die Figur steht, eine "keine Figur" stellt. Ausserdem sollte das Schachbrett die Eigenschaft "Rochade möglich" haben.

Ich hoffe, dass ich meinen Gedankengang nicht zu umständlich geschildert habe.

Mit freundlichen Grüßen
   Dimitri Rettig

--
=================================================
letztlich hat mans leichter,
wenn mans selber macht - Münz