Ok erst mal allgemeines bevor ich in Details gehe:
1) (Geringfügig) Lege dich auf s/z ODER x/y fest. Mal so and mal anders ist verwirrend (weil mit x/y lese ich z als 3te Dimension)
2) Du testest Zellen auf '' (leer) X oder Dame? Warum 3 Möglichkeiten?
Es scheint das "X" bedeutet: Hier darf keine Dame hin, weil dann 2 Damen sich bedrohen.
Die Idee ist zwar einleuchtend, hat aber Tücken.
Dir ist klar das Versuch und Irrtum bedeutet, das du auch wieder eine Dame entfernen musst?
D X X X
x X D X
X - X -
Wenn du eine "D" entfernst, dann musst du viel Aufwand betreiben wil das kleine "x" von beiden "D" gehalten wird.
Dazu später mehr.
3) procedure Damesetzten
hat ein leeres "then"
Diese Funktion macht bestimmt nicht was du vorhattest.
Code: Alles auswählen
if StringGrid1.Cells[0,x]<>'X' then
else StringGrid1.Cells[0,x]:='D'
ist gleich
Code: Alles auswählen
if StringGrid1.Cells[0,x] = 'X' then // vegleich umgekehrt / statt <> jetzt =
StringGrid1.Cells[0,x]:='D'
Ändere alle X in ein D
4) Warum 2 Button? Es könnte alles in nur einem Button laufen.
-------------
Soweit so gut.
Fuer das Problem in 2, gibt es mehrere gute Loesungen, doch dazu spaeter.
Du setzt die erste Dame, dann suchst du eine freie Möglichkeit fuer die 2te Dame, dann fuer die 3te....
Aber was wenn du keien Moeglichneit findest, weil 5 Damen bereits alle Felder mit X füllen?
Was machst du dann?
Ich wecde die Felder statt als x/y, einfach als 0 bis 63 bezeichnen (links nach rechts, dann naechste Zeile). Dann brauch mas nur eine Nummer pro Zelle, das ist einfacher.
Ueberleg mal:
- Die erste Dame kann man setzen wo man will. Es gibt immer eine Loesung.
- Die 2te Dame muss auf eines der freien Felder (frei = nicht X). Aber nicht all freien Felder gehen. Bei manchen lassen sich dann spaeter nicht alle 8 DAmen setzen.
- Die n-te Dame ... (genau wie 2te)
Also wenn du nach 4 Damen, noch 9 Felder hast, die nicht "X" sind, und du setzt die 5te Dame auf Feld 30 (das erste noch freie Feld), aber dann gibt es 0 (NULL) freie felder fuer die 6te Dame. Was dann?