000
26.02.2005, 13:53 Uhr
knopfauge
|
Hallo,
wir beschäftigen uns in der Schule derzeit mit der Schachprogrammierung in C++. Wir sollen in Gruppenarbeit ein Schachprogramm, dass aus den Modulen User Interface, Schachbrett/Figuren, Zugenerator, Zugwahlalgorithmus und Stellungsbewertung besteht, programmieren. Unsere Gruppe beschäftigt sich mit dem Zuggenerator. Jedoch kommen wir nicht so ganz weiter, ich versuche das mal etwas genauer zu erläutern.
Wir bekommen von einer Klasse Schachbrett eine Liste, in der die möglichen Züge jeder Figur gespeichert sind. Jedes Feld hat einen Zeiger auf die jeweilige Figur, die sich auf diesem Feld befindet, um an die Zugmöglichkeiten der Figur und deren Farbe zu kommen. Die Felder sind mit den Zahlen von 0 bis 143 gekennzeichnet, wir haben also ein 12x12 Brett. Die Aufgabe der Klasse Zuggenerator ist nun, die Stellung der Figuren auf dem Schachbrett zu prüfen und nur die gültigen Züge jeder Figur in eine neue Liste zu speichern. Diese Liste wird dann an die Klasse Zugwahlalgorithmus übergeben.
Anmerkungen:
liste = Vom Schachbrett gelieferte Liste mit den Zugmöglichkeiten der Figuren genListe = Vom Zuggenerator erstellte Liste mit den gültigen Zügen Ziel = Zielposition der Figur nach einem Zug Feld = Feld mit Zeiger auf die jeweilige Figur oder auf NULL, wenn es leer ist ZugHinzufügen = vordefinierte Funktion, um einen Zug zur Liste hinzuzufügen
Ein Zug wird durch die Start- und die Zielposition der Figur dargestellt. Der Zuggenerator muss also prüfen, ob die Zielpositionen gültig sind (ist das Feld leer? Steht dort bereits eine eigene Figur? Steht der König im Schach? Ist eine Rochade noch möglich?).
Ansatz meines Quellcodes (in übersichtlicher Form: http://home.arcor.de/fabian.liebnow/prog.rar):
| C++: |
int f; /* Feldindex von 0 bis 143 */
int z; /* Zielpositionsindex */
Zugliste Zuggenerator::moeglicheZuege(Schachbrett*Brett); /* Brett ist ein Objekt der Klasse Schachbrett */
{ Zugliste genListe; /* genListe wird die neue Liste */
for (f=0; f>143; f++) { /* Prüfe alle Felder nach Figuren */
if (Brett -> GetFeld(f) != NULL) { Figur = Brett -> GetFeld(f); /* Wenn auf dem Feld eine Figur steht ... */
/* Unvollständig / Fehlerhaft */
for (z=0; z>liste[z] ; z++) { /* Prüfe alle Zugmöglichkeiten der Figur */
if (liste -> GetZiel == LEER) { /* Wenn das Zielfeld leer ist ...*/
einZug = new Zug; einZug -> SetFeld(Ziel); /* Erstelle Zug und setze ihn als gültig */
/* Unvollständig / Fehlerhaft */ }
if (gueltigerZug == true) { liste.ZugHinzufuegen(einZug); /* Füge gültigen Zug zur neuen Liste hinzu */
/* Unvollständig / Fehlerhaft */ } } }
else { continue; /* Prüfe das nächste Feld */
} }
return genListe; }
|
Mein Problem ist nun, ob dieser Quellcode fehlerhaft ist und wie ich die fehlenden/unvollständigen Ansätze am besten realisiere.
| Bearbeitung von typecast: |
cpp-Tags gesetzt. Das macht die ganze Sache doch ein wenig uebersichtlicher, oder?
|
Dieser Post wurde am 05.03.2005 um 19:47 Uhr von typecast editiert. |