| |
Fortgeschrittene ProgrammierungStellungssuche Schach | | | Autor: Björn Mankel | Datum: 14.12.06 17:28 |
|
Hallo Leute,
ich arbeite gerade an einer Schachdatenbank.
Es Klappt auch alles soweit ganz gut. Nun möchte ich eine Stellungssuche im Programm einbauen, womit man innerhalb einer Partie eine bestimmte Spielstellung ermitteln kann. Leider weiß ich nicht genau wie ich an die Sache rangehen soll.
Weiß jemand wie man so etwas macht ?
---
Sventke | |
Re: Stellungssuche Schach | | | Autor: BAStler | Datum: 15.12.06 11:29 |
| Hallo Björn,
hier findest du einen Download für die Kontrolle der Züge im Schach. Hoffe es hilft dir weiter.
Viel Erfolg
BAStler | |
Re: Stellungssuche Schach | | | Autor: knrf | Datum: 17.12.06 19:19 |
| Wie speicherst Du denn eine Partie in Deiner Datenbank?
MFG
knrf
Live and let die | |
Re: Stellungssuche Schach | | | Autor: knrf | Datum: 18.12.06 23:26 |
| Wenn Dein Programm nun die Partie "nachspielen" könnte und zu jedem Zug die Stellung abspeichern würde, dann könntest Du auch eine Stellung zum Beispiel eingeben und danach suchen lassen.
Wenn Weiß beispielsweise e4 zieht könnte Dein Programm
sTa8sSb8sLc8sDd8sKe8sLf8sSg8sTh8sBa7sBb7sBc7sBd7sBe7sBf7sBg7sBh7wBe4wBa2wBb2wBc2wBd2wBf2wBg2wBh2wTa1wSb1wLc1wDd1wKe1wLf1wSg1wTh1
das als Stellung abspeichern. Es müßte halt anch jedem Zug ermitteln wo welche Figur sich auf dem Brett befindet und dann daraus einen Stellungsstring generieren.
MFG
knrf
Live and let die | |
Re: Stellungssuche Schach | | | Autor: OldMan | Datum: 19.12.06 16:12 |
| Aber nicht im PNG Format.
Da müsstest du das Bild wieder in Daten umwandeln was schwer bis unmöglich ist.
Also musst du Daten und Bild speichern. | |
Re: Stellungssuche Schach | | | Autor: Zardoz | Datum: 19.12.06 16:43 |
| Hi OldMan,
es handelt sich nicht um das PNG-Format sondern um das PGN-Format.
Hierbei werden die Spielzüge in einer Textdatei abgelegt.
Gruss,
Zardoz | |
Re: Stellungssuche Schach | | | Autor: OldMan | Datum: 19.12.06 20:52 |
| Tut mir leid.
Dachte du hast dich verschrieben.
Also in dem Format müssen dann alle Spielzüge vermerkt werden.
Du musst demnach den aktuellen Stand pro Zug in deinem Programm nachspielen und ihn mit den Stellungen vergleichen. | |
Re: Stellungssuche Schach | | | Autor: OldMan | Datum: 19.12.06 21:24 |
| Wenn dieses Format Partien speichert wird es wohl kaum in jedem Zug alle Stellungen speichern. Sondern eher welche Figur wohin gewandert ist.
In so einer Liste kann man Stellungen schwer finden.
Also musst du Schritt für Schritt die Züge ausführen (zum Beispiel in einem Array) und dann dort nach Stellungen suchen. | |
Re: Stellungssuche Schach | | | Autor: knrf | Datum: 20.12.06 14:29 |
| Mit Nachspielen meinte ich nicht, daß Du jede Partie nachspielen sollst, sondern Dein Programm soll das unsichtbar für den Benutzer tun. Und für jeden Zug in einem Spiel generierst Du dann eine Stellung, die falls sie nicht vorhanden ist in Deiner Datenbank gespeichert wird.
MFG
knrf
Live and let die | |
Re: Stellungssuche Schach | | | Autor: knrf | Datum: 22.12.06 01:03 |
| Hallo Sventke,
ich schreibe gerade an einem Programm. Es "kann" schon eine unkommentierte PGN-Datei einlesen und daraus die Züge ermitteln. Jetzt muß ich "nur" noch die Züge so "übersetzen", daß ich die Züge in einem Array "nachspielen" kann und nach jedem Zug eine Stellung generiere. Wären die Züge in den PGN-Datein in der langen Form, also 1.c2-c4 statt einfach nur 1.c4 wäre das wesentlich einfacher... Soweit ein kleines Zwischenfazit.
MFG
knrf
Live and let die | |
Re: Stellungssuche Schach | | | Autor: knrf | Datum: 25.12.06 23:15 |
| Man kann zum Beispiel mit einem Array arbeiten, das das Schachbrettl abbildet. Also 8 auf 8. Feld(0, 0) stellt z.B. A8 dar. Feld(7,7) H1 usw. In dem Feld kann man nun die Figuren als String speichern , z.B. Feld(0,0) = sT (sT = schwarzer Turm) und so fort.. Wenn man dann z.B. in einer Partie den Zug e2-e4 (e4) hat, dann muß man das nur auf sein Feld übersetzen und anwenden. Das wäre in dem Fall Kopiere den Inhalt von Feld(3, 6) nach Feld (3,4), Lösche den Inhalt vone Feld(3,6) , Und dann generiert man einen String, der dadurch entsteht, daß man das Array durchgeht und da, wo es nicht leer ist den Feldinhalt mit der "Übersetzung" des Feldes anhängt.
Wäre z.B. der Inhalt von Feld(0,0) "sT" so würde man an den String sTA8 anhängen usw. Das muß man nach jedem Zug tun so erhält man nach und nach die Stellungen im Spiel.
MFG
knrf
Live and let die | |
Re: Stellungssuche Schach | | | Autor: Björn Mankel | Datum: 26.12.06 17:51 |
| Hallo, das ist viel zu kompliziert.
Woher will man wissen von wo eine Figut kommt.
Zb Springer Turm oder Läufer. Es mag wohl funktionieren wenn sich in einer Partie jede Figur nach jedem Zug bewegt. Was ist aber wenn am Anfang der Springer gezogen wird, und nach 20 Zügen wird der Springer wieder gezogen. Der Spriger kann ja von überall kommen.
---
Sventke | |
Re: Stellungssuche Schach | | | Autor: knrf | Datum: 26.12.06 19:26 |
| Das eigentlche Hauptproblem ist hierbei die Notation. Da in PGN-Dateien die kurze Notation verwendet wird, ist das "nachspielen" nicht ganz so einfach. Verwendet man die lange Notation ist es sehr einfach. Man muß also etwas erfinden, das aus
1.e4 e5 2.Sf3 Sf6 usw. 1. e2-e4 e7-e5 2. Sg1-f3 Sg8-f6 macht, dann würde es funktionieren.
MFG
knrf
Live and let die | |
Re: Stellungssuche Schach | | | Autor: Björn Mankel | Datum: 26.12.06 20:29 |
| Hallo, mit der langen Notation ist das wirklich einfach da man ja genau weiß von wo nach wo eine Figur gezogen ist. Dann würde es auch mit dem Datenfeld klappen.
Aber um aus der kurzen Notation eine lange zu machen muss man wieder wissen von wo eine Figur kommt und welche Farbe die Figur hat. Z.B. die Türme Springer Dame diese Figuren können von überall herkommen. Man müsste irgendwie jeden einzelnen Zug von Anfang bis ende durchspielen und dabei aus der kurzen eine Lange Notation machen.
---
Sventke | |
Re: Stellungssuche Schach | | | Autor: me36835 | Datum: 27.12.06 13:06 |
| Hallo Björn,
die PGN Notation ist nicht geeignet, um bestimmte Stellungsbilder zu suchen, da hier immer nur Veränderungen zu vorhgerigen Bild notiert werden, nicht aber jedoch das gesamte Bild. Ein Zug entspricht drei bis vier Zeichen.
Wenn Du so etwas machen möchtest, musst Du die FEN Notation nehmen, diese speichert ganze Bilder, wie zum Beispiel für Schachrätsel. Ein Zug ergibt ein neues Bild (geschätzte 40 Zeichen).
Hier links nach WIkipedia
PGN: http://de.wikipedia.org/wiki/Portable_Game_Notation
FES: http://de.wikipedia.org/wiki/Forsyth-Edwards-Notation
*** spiel mit mir auf http://www.chessmail.de *** | |
Re: Stellungssuche Schach | | | Autor: knrf | Datum: 27.12.06 19:18 |
| Hallo Sventke
Das mit der Farbe der Figur ist auch relativ einfach zu lösen. Wenn man die Züge alle in einem eindimensionalen Array hat, so braucht man nur eine Variable. ZB eine Variable vom Typ boolean mit dem Namen weiß.
Wenn man anfängt die Züge abzuarbeiten setzt man weiß auf true, da der erste Zug immer von weißgespielt wird. danach setzt man die Variable immer abwechselnd auf false und true, bis das Spiel vorbei ist.
Zum Problem der Startposition e4 heißt ja, daß ein Bauer gezogen wurde. Wenn nun weiß am Zug war, dann kann er nur von E2 oder E3 kommen und das kann man abprüfen. Wenn auf E3 kein Bauer gestanden hat dann kommt er von E2. Wäre schwarz am Zug dann müßte er von E5 kommen. Wenn es eine andere Figur ist z.B. ein Springer, dann erkennt man das am N vor dem Feldnamen z.B. Nf3, d.h . aber das er auf einem Feld gestanden haben muß, daß er regelrecht erreichen kann. Die muß man halt abprüfen. Ebenso kann man die anderen Figuren behandeln.
Einfach ist es z,B, wenn der Zug Rad1 lautet, dann weiß man auch von wo der Turm herkam.
MFG
knrf
Live and let die | |
Re: Stellungssuche Schach | | | Autor: Björn Mankel | Datum: 28.12.06 12:21 |
| Hallo,
das ist alles zu kompliziert.
Ich suche ersteinmal weiter im Netz vielleicht finde ich was brauchbares.
Trozdem danke für die Tipps...
---
Sventke | |
Re: Stellungssuche Schach | | | Autor: Björn Mankel | Datum: 28.12.06 15:11 |
| Hallo,
ich habe da noch mal eine Frage.
Angenommen die weiße Dame steht auf Feld D2 also Qd2 oder Dd2. Und man will die Dame sagen wir mal nach e4 stellen also Qe4 oder De4 was natürlich nicht geht.
Wie kann ich nun per Code abfragen ob der Damezug legal ist ?
Hast du da eine Idee.
---
Sventke | |
Re: Stellungssuche Schach | | | Autor: me36835 | Datum: 29.12.06 10:13 |
| Hallo Björn,
wie exact willst Du einen gültigen Zug ermitteln?
Im Grunde musst Du zuerst prüfen, ob Du im Schach stehst. Wenn das der Fall ist, ist die Anzahl der möglichen Züge deutlich kleiner.
Daher musst Du zuerst ermitteln, ob Dein König auf einem Feld steht, auf die Figuren des Gegners gelangen können.
Wenn Du im Schach stehst, sind nur Züge gültig, die diesen Zustand verändern.
Für die Züge der einzelnen Figuren musst Du für jede Figur eine eingene Logik Programmieren.
Bei der Dame reicht es eine Summe aus Läufer und Turm zu bilden
Ich habe so etwas mal für EXCEL VBA angefangen. Per email schicke ich Dir mal, was ich da habe. Leider habe ich den Font mit den Figuren nicht mehr. Im Modul DI ermittle ich da die möglichen Felder. | |
Re: Stellungssuche Schach | | | Autor: knrf | Datum: 02.01.07 11:36 |
| Hallo Sventke,
Da das Feld wo die Dame hinsoll, nicht auf der D Linie liegt, und auch nicht auf der 2. Reihe. muß sie zwangsläufig diagonal ziehen, und da sie mit diesem Zug auf der E-Linie nur nach E3 gelangen kann scheidet E4 als Zielfeld aus.
MFG
knrf
Live and let die | |
Re: Stellungssuche Schach | | | Autor: knrf | Datum: 02.01.07 15:43 |
| Vielleicht kann DIr auch das weiterhelfen:
CLS
OPEN "c:\zuege.txt" FOR OUTPUT AS #1
zaehler = 0
FOR z1r = 1 TO 8
FOR z1s = 1 TO 8
FOR z2r = 1 TO 8
FOR z2s = 1 TO 8
GOSUB reihe1
GOSUB reihe2
z1s$ = RIGHT$(STR$(z1s), 1)
z2s$ = RIGHT$(STR$(z2s), 1)
sf$ = z1r$ + z1s$
zf$ = z2r$ + z2s$
IF sf$ <> zf$ THEN
zaehler = zaehler + 1
GOSUB Test
aus$ = z1r$ + z1s$ + "-" + z2r$ + z2s$ + " " + Figuren$
LOCATE 12, 35: PRINT zaehler, aus$
PRINT #1, aus$
END IF
NEXT z2s
NEXT z2r
NEXT z1s
NEXT z1r
CLOSE #1
SYSTEM
reihe1:
IF z1r = 1 THEN z1r$ = "a"
IF z1r = 2 THEN z1r$ = "b"
IF z1r = 3 THEN z1r$ = "c"
IF z1r = 4 THEN z1r$ = "d"
IF z1r = 5 THEN z1r$ = "e"
IF z1r = 6 THEN z1r$ = "f"
IF z1r = 7 THEN z1r$ = "g"
IF z1r = 8 THEN z1r$ = "h"
RETURN
reihe2:
IF z2r = 1 THEN z2r$ = "a"
IF z2r = 2 THEN z2r$ = "b"
IF z2r = 3 THEN z2r$ = "c"
IF z2r = 4 THEN z2r$ = "d"
IF z2r = 5 THEN z2r$ = "e"
IF z2r = 6 THEN z2r$ = "f"
IF z2r = 7 THEN z2r$ = "g"
IF z2r = 8 THEN z2r$ = "h"
RETURN
Test:
Figuren$ = ""
ab = z2r - z1r
abss = z2s - z1s
REM Bauer
IF z1s > 1 AND z1s < 8 THEN
IF ab >= -1 AND ab <= 1 THEN
IF abss = 1 OR abss = -1 THEN
Figuren$ = Figuren$ + "B"
END IF
IF ab = 0 AND z1s = 2 AND z2s = 4 THEN
Figuren$ = Figuren$ + "B"
END IF
IF ab = 0 AND z1s = 7 AND z2s = 5 THEN
Figuren$ = Figuren$ + "B"
END IF
END IF
END IF
REM Turm
IF z1r = z2r THEN
Figuren$ = Figuren$ + "T"
END IF
IF z1s = z2s THEN
Figuren$ = Figuren$ + "T"
END IF
REM Springer
IF (ab = 2 OR ab = -2) AND (abss = 1 OR abss = -1) THEN
Figuren$ = Figuren$ + "S"
END IF
IF (abss = 2 OR abss = -2) AND (ab = 1 OR ab = -1) THEN
Figuren$ = Figuren$ + "S"
END IF
REM Laeufer
IF z1r <> z2r THEN
IF ab = abss OR -ab = -abss OR ab = -abss OR -ab = abbs THEN
Figuren$ = Figuren$ + "L"
END IF
END IF
REM Dame
IF z1r = z2r THEN
Figuren$ = Figuren$ + "D"
END IF
IF z1s = z2s THEN
Figuren$ = Figuren$ + "D"
END IF
IF z1r <> z2r THEN
IF ab = abss OR -ab = -abss OR ab = -abss OR -ab = abbs THEN
Figuren$ = Figuren$ + "D"
END IF
END IF
REM Koenig
IF ab >= -1 AND ab <= 1 AND abss >= -1 AND abss <= 1 THEN
Figuren$ = Figuren$ + "K"
END IF
RETURN Dieses QBasic-Programm, das ich vor längerer Zeit mal geschrieben habe gibt einen Text mit allen möglichen Zügen aus.
Die Ausgabe sieht dann so aus:
a1-a2 TDK
a1-a3 TD
a1-a4 TD
a1-a5 TD
a1-a6 TD
a1-a7 TD
a1-a8 TD
a1-b1 TDK
a1-b2 LDK
a1-b3 S
a1-b4
a1-b5
a1-b6
a1-b7
a1-b8 Das ist nur ein Ausschnitt aus der Datei die entsteht. Hinter den Zugmöglichkeiten stehen die Figuren, die diesen Zug ausführen können.
MFG
knrf
Live and let die | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
TOP! Unser Nr. 1
Neu! sevDataGrid 3.0
Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|