Hallo Leute,
wenn ihr euch ein wenig mit Schach und Programmieren auskennt, könnt
ihr bitte mal versuchen, meine zwei semi-OT-Fragen zu beantworten. Auch
nach stundenlangem Nachdenken und Surfen nach Infos bin ich nicht drauf
gekommen.
Es geht um die Struktur, wie man z.B. Brettspiele sichert. Es gibt da
ja festgelegte Notationen, wie z.B. beim Spiel Schach. Ich würde diese
gerne verstehen, da ich mit RB auch mal in die Lage kommen könnte,
solch eine Struktur zu schreiben. Dann ist es besser, allgemeine Regeln
anzuwenden, um Daten vielleicht mit anderen Progs austauschen zu
können.
Wenn ihr mit Apple's Schachprogramm "Chess" mal eine Runde spielt, dann
das Spiel sichert und die Datei des gesicherten Spiels mal mit TextEdit
öffnet, seht ihr z.B. unter anderem Folgendes:
<key>Moves</key>
<string>e2e4
c7c5
d2d4
d7d5
b1c3
d5e4
c3e4
b8d7
e4g5
g8f6
f1d3
e7e6
g1f3
h7h6
g5e6
d8c7
g2g3
f7e6
</string>
<key>Position</key>
<string>r1b1kb1r/ppqn2p1/4pn1p/2p5/3P4/3B1NP1/PPP2P1P/R1BQK2R w KQkq -
0 10</string>
Das ist ein Ausschnitt, der alle relevanten Infos zu den gespielten
Zügen und der aktuellen Brettposition liefert.
Hier meine Fragen:
1, Mir fällt bei obigem Ausschnitt auf, dass die Moves ohne Info über
das Schlagen eines gegnerischen Steines gespeichert werden. Wenn man
das gespeicherte Spiel also in "Chess" wieder öffnet und den GameLog
ansieht, dann sind plötzlich auch die Züge, in denen ein Stein
geschlagen wurde, wieder da (diese werden im GameLog mit Square x
Square anstatt Square - Square markiert). Anstatt "f7e6" in der letzten
Zeile der "Moves" steht dann wieder richtigerweise "f7xe6", weil ein
Stein bei dem Zug geschlagen wurde. Wieso wird das nicht in den Moves
gespeichert und wie kann Chess dann nach dem Laden einer solchen Datei
wissen, bei welchem Zug ein anderer Stein geschlagen wurde und bei
welchem nicht?
2, Bei der letzten Zeile der Moves schlägt ein schwarzer Bauer einen
weissen Springer (f7e6). Woher weiss Chess, wenn es das gespeicherte
Spiel öffnet und diesen Zug rückgängig macht, dass Schwarz mit dem
Bauern beim Zug von f7 auf e6 einen Springer geschlagen hat und nicht
z.B. einen anderen Bauern oder einen Turm?
Wenn es heissen würde f7Bauer x e6Springer würde jeder wissen, dass ein
Bauer mit dem Sprung von f7 auf e6 einen Springer schlägt, aber bei
f7e6 (siehe letzte Zeile Moves) verstehe ich nicht ganz, wie Chess das
macht...
Insgesamt bin ich der Ansicht, dass Apple's Chess sicher nach den
allgemeinen Vorgaben abspeichert (es gibt ja solche Portable Game
Notation - Spezifikationen), und andere Schachprogs tun das auch; aber
ich verstehe noch nicht ganz den Ablauf im Generellen. Wenn das also
ein Damespiel wäre und der Move wäre 11x18 (also ein Stein von Square
11 überspringt einen anderen Stein und landet auf Square 18), dann
weiss man doch immer noch nicht, ob der übersprungene Stein eine Dame
war oder ein ganz normaler Stein. Das muss man aber wissen, wenn man
geladene Spiele rückverfolgen will....
Sorry, konnte mich nicht kürzer fassen.
Vielen lieben Dank für Hilfe.
Gruss,
Pepe
|