# Java Applet: digitales Schachbrett



## SchachFritz (10. Jun 2005)

Guten Tag, 

ich habe seit kurzem eine Seite über Schach erstellt. Es wäre jetzt nicht schlecht, wenn man auf der Seite mit Hilfe eines Applets gespeicherte Partien nachspielen könnte. 
Ich habe mir das folgendermassen vorgestellt. 
Die Partien befinden sich in einer MYSQL Datenbank auf dem Webserver. Diese Partien werden dann im Applet in einer übersichtlichen jtable angezeigt. 

Danach kann der User eine Partie auswählen und dann diese Partie auf einem online brett nachspielen. 
Da wo ich nun im Grunde probleme sehe, oder vielmehr nicht weiss wie dies zu realisieren ist, ist wie ich das mit dem online schachbrett machen soll. 

Ich habe mir vorgestellt am Anfang erst mal Bilder von den Figuren zu benutzen. Aber ich weiss nicht wie ich die Figuren auf dem Brett bewegen soll. Ich müsste also jede einzelne Stellung speichern?? Doch wie kann ich dann die Partie in die DB eingeben. 
Es muss nämlich immer einen Zusammenhang zwischen der Zugnotation und der eigentlichen stellung geben. 
Des weiteren ist es nötig regelwidrige Züge und das schachgebot zu erkennen. Allerdings ist eine komplette KI nicht von nöten, da es ja nur um das Nachspielen der Partie geht. Es sollen ja nicht zwei user gegen einander spielen. 

Nachdem das alles realisiert wurde, werde ich dann statt den Bildern, die Figuren selbst in Java zeichnen. 
Kann mir jemand ein paar Tipps geben, wie ich sowas realisieren könnte ? Wie gesagt mein Hauptproblem liegt in der umsetzung des onlineschachbretts.


----------



## Wildcard (10. Jun 2005)

Was genau meinst du mit 'nachspielen'?
Das Spiel ist ja schon beendet und ja eigentlich nur eine Aufzeichnung?
Grundsätzlich würd ich da so rangehen.
Jede Figur ein eigenes Objekt das sich selbst zeichnen kann (Bilder sind der richtige Weg, lässt sich viel besser handeln als das in Java mit geometr. Formen nachzubilden) und seine Position kennt.
Dann brauchst du ein Spielzug Objekt mit FigurObjekt/von/nach usw...
Eine Liste von Spielzug Objekten bildet dann eine Partie ab.


> Des weiteren ist es nötig regelwidrige Züge und das schachgebot zu erkennen.


Wieso das? Die Party ist doch schon gespielt  :bahnhof:


----------



## SchachFritz (10. Jun 2005)

Danke für deine Hilfe. 

ja es handelt sich nur um das Nachspielen der Partie. 
Ich weiss dass eine solche Sicherheitsfunktion eigentlich nicht nötig, aber es kann ja sein dass die Partie falsch eingegeben wurde. Es würde dann ziemlich dumm aussehen, wenn regelwidrige Züge im Internet dargestellt werden würde. Denn ich bin es nicht der andauernd diese Partien in die DB eingeben wird. Es handelt sich dabei also nur um eine Sicherheitsmassnahme. Natürlich muss dies für den Anfang nicht unbedingt sein. 

Jedoch sollte das applet Schachgebote, patt und schachmatt erkennen. Da stellt sich mir dir Frage wie ich die position der Figuren mit der Notation verbinden soll. 
Im Schach ist die Notation genauso wie beim schiffeversenken. d.h. z.b. e2-e4 : die Figure von e2 zieht auf e4. 
Wir kann ich die denn nun realisieren ?


----------



## Wildcard (10. Jun 2005)

Das musst du durchparsen.
RegEx bietet sich für so etwas an.
[EDIT]Wenn du aus dem Feld eine Hashmap machst (zB e11 => Key/FigurObjekt => value) sollte das mit der Positionierung flott erledigt sein [/edit]
Das Projekt wird dich allerdings ein paar Tage beschäfigen, sowas macht man nicht mal schnell 'an nem freien Nachmittag'  :wink:


----------



## SchachFritz (13. Jun 2005)

Ja ok. Ich frage mich allerdings, ob es nicht auch möglich ist, dies ohne parsen zu machen. Wäre es nicht möglich die Züge mit Hilfe von XML zu speichern?  Da die Partien ja sws nur für die Webseite gedacht sind.

Es wäre nämlich nicht schlecht, wenn mann die Partien auch in ein anderes Format speichern könnte. In der Schachwelt gibt es dafür eigens erschaffene Formate z.b. cbh und pgn. 

Das professionellste wäre ein PGN format zu nehmen. Allerdings habe ich überhaupt keine Ahnung wie dieses Format aussieht. 

Mit Hilfe von XML wäre es dann jedoch möglich diese Partien auch ausserhalb des applets anzeigen zu lassen. Ausserdem ist XML ja ein weltweit bekanntes Datenformat. 
Ich würde dann ungefähr folgende Struktur verwenden : 


```
<PARTIE>

    <WEISS > 
            <NAME> ... </NAME>
            <VEREIN>... </VEREIN>
            <ELO> ... </ELO>
    </WEISS>

   <SCHWARZ>
            <NAME> ... </NAME>
            <VEREIN>... </VEREIN>
            <ELO> ... </ELO>
   </SCHWARZ>

  <DATUM> ... </DATUM>

  <TURNIER> ... </TURNIER>

  <ZUEGE> 
        <WEISS> 
           <ZUG> </ZUG>
           <BEMERKUNG> Schach? Matt? Patt? </ BEMERKUNG>
        </WEISS>

        <SCHWARZ>
            <ZUG> </ZUG>
           <BEMERKUNG> Schach? Matt? Patt? </ BEMERKUNG>
        </SCHWARZ>

    </ZUEGE>

    <ZUEGE>
    ...    
    </ZUEGE>
    ...
    <RESULTAT> </RESULTAT>
</PARTIE>
```
 

Was haltet ihr davon ? Damit würde ich doch eine saubere Repräsentierung erreichen oder ? Ich glaube dies wird besser und globaler als es mit parsen zu versuchen. 
Die Frage die sich mir nun stellt ist wie ich dies nun mit der Datenbank verbinde. Wahrscheinlich werde ich dann den Link zur entsprechenden XML Datei auf dem Server anfgeben. 

Ein weiteres Problem das mich quält ist das eingeben der Partien. Wenn ich ein Format benutze, das in der Schachwelt nicht benutzt wird, so muss ich ein Programm schreiben mit dem man die Züge eingeben kann. Dies ist eigentlich mein hauptproblem. Denn wenn ich noch eine zweite Applikation schreiben muss, so wird das Projekt viel komplizierter. 

Des weiteren ist es ja für ein Applet nicht erlaupt auf das dateisystem des clients zuzugreifen. Da mein Server keine Client-Server applikationen unterstützt (habe kein cgi-bin verzeichniss), muss ich es mit einem Applet versuchen. 

Da bleibt eigentlich nur noch die Möglichkeit, dass man die Züge online eingeben muss, und das applet diese Partie dann in das richtige XML format setzt. 
Allerdings wird dies viel komplizierter als das eigentliche Programm. Daher glaube ich nicht, dass sich diese Lösung lohnen würde. 

Es muss also noch eine bessere Lösung geben. Wie kann ich es dem user einfach machen, auch weitere Partien auf den Server zu laden. 
Die Mitglieder meines Vereins, die nicht wirklich Ahnung von Informatik haben, wollen natürlich auch Partien auf den Server setzen. Da ich nicht immer danach gefragt werden will, muss die Applikation automatisiert und sehr einfach zu bedienen sein. 

Hat einer von euch ein paar Vorschläge ?


----------



## Wildcard (13. Jun 2005)

XML ist zwar ne schöne Sache, aber was nützt dir das in deinem Fall?
Ich bin jetzt mal davon ausgegangen das in der DB die Partien in einer der gängen Schachnotationen gespeichert sind.
Um das in XML zu überführen musst du es natürlich auch erstmal Parsen. Dann hast du XML, das du zum verarbeiten
wieder parsen musst. Seh ich jetzt den Mehrwert nicht  :bahnhof:


----------



## SchachFritz (15. Jun 2005)

Das Problem das ich bei der gängigen Schachnotation habe ist, dass es zu viele Parameter gibt. 
Ich müsste schon auf die Computernotation z.B. e2e4 zurückgreifen. Allerdings habe ich dann kein Platz für weitere angaben. 
wie z.B. Zugnummer, wer gewonnen hat, name der spieler usw. 
das allles muss ja auch irgendwie in die Db eingegeben werden. Somit muss ein Format her, das für den User leicht einzuhalten ist. 
Damit es für dir Mitglieder meines Vereins auch möglich ist diese Partien einzugeben. Da enstehen doch dann Probleme mit der Genauigkeit. Es müssen ja dann nämlich alle Abstände eingehalten werden. Des weiteren muss es auch übersichtlich und verständlich sein.


----------



## Wildcard (15. Jun 2005)

Du kannst von niemandem verlangen irgendein Format das du dir ausgedacht hast abzutippen.
Wenn brauchst du IMHO ein Applet in dem man die Partie nachspielen kann und du daraus die Notation selbst erzeugst.
Spielernamen kann man ja vorher abfragen, und die Züge mitzählen.


----------

