Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#9

Re: Schachbrett - Komprnenten ansprechen

  Alt 26. Nov 2003, 17:21
Also mal am Anfang:
Meiner meinung nach ist ein Schachprogramm eher was für Fortgeschrittene. Anfänger sollten sich erst mal an was einfacheren versuchen.
Ich hab keine Ahnung warum plötzlich so viele Anfänger auf Schach stehen, und auch gleich an einem eigenen Spielchen basteln wollen?
Ich persönlich arbeite schon seit ein paar Jahren an einer eigenen Version. Bei mir hängt es aber mehr an der selbst entwickelten KI und den vielen größeren Pausen zwischendurch.

Zitat:
Die bisher einzige Möglichkeit, die Funktionieren "sollte", währe über ein paar tausend if-Abfragen, wobei ich bei jedem Feld alles andere jedes Mal neu abfrage, um dann die richtigen Figuren auf das richtige Feld zu setzen.
Da ja aber kein Mensch so blöd ist, und so viele abfragen schreibt, versuche ich irgendwie anders dahinzukommen.
Das klingt so, als wenn du die Abfrage einfach weglassen willst - würde ich dir nicht empfehlen.

Und nun zum Thema:

Am bessten lassen sich die Figuren in einem Array speichern;
Deklaration:
Code:
[b]Const[/b]
  F_F  = 0; { Frei (keine Figur)                 }

[color=gray] F_WBb = 1; { Weiß - Bauer (noch nicht bewegt)   }[/color]
  F_WB = 2; { Weiß - Bauer                       }
  F_WS = 3; { Weiß - Springer                    }
  F_WL = 4; { Weiß - Läufer                      }
[color=gray] F_WTb = 5; { Weiß - Turm (noch nicht bewegt)    }[/color]
  F_WT = 6; { Weiß - Turm                        }
  F_WD = 7; { Weiß - Dame                        }
[color=gray] F_WKb = 8; { Weiß - König (noch nicht bewegt)   }[/color]
  F_WK = 9; { Weiß - König                       }

[color=gray] F_SBb = 11; { Schwarz - Bauer (noch nicht bewegt) }[/color]
  F_SB = 12; { Schwarz - Bauer                    }
  F_SS = 13; { Schwarz - Springer                 }
  F_SL = 14; { Schwarz - Läufer                   }
[color=gray] F_STb = 15; { Schwarz - Turm (noch nicht bewegt) }[/color]
  F_ST = 16; { Schwarz - Turm                     }
  F_SD = 17; { Schwarz - Dame                     }
[color=gray] F_SKb = 18; { Schwarz - König (noch nicht bewegt) }[/color]
  F_SK = 19; { Schwarz - König                    }

[b]Var[/b] Spielfeld: [b]Array[/b][1..8, 1..8] [b]of[/b] Byte;
die grauen Variablen werden nur bei einer richtigen Programmierung des Schachspiels benötigt. Wenn zum Beispiel Sonderzüge wie Rochade und so unterstützt werden sollen.

Zuweisung und auslesen ist wie bei jedem anderen Array auch:Spielfeld[2, 1] := F_WS; Abfragen:
Delphi-Quellcode:
Case Spielfeld[X, Y] of
  0: ... { Feld ist leer  }
  1..9: ... { weiße Figur    }
  11..19: ... { schwarze Figur }
End;
(Die Zahlen können natürlich auch durch die oben definierten Konstanten ersetzt werden)

Feld zeichnen:
Delphi-Quellcode:
For X := 1 to 8 do
  For Y := 1 to 8 do
    Case Spielfeld[X, Y] of
      0: ... { leeres Feld zeichnen     }
      1, 2: ... { weißen Bauern zeichnen   }
      3: ... { weißen Springer zeichnen }
      4: ... { weißen Läufer zeichen    }
      ...
      18, 19: ... { schwarzen König zeichnen }
    End;
Könnte mich zwar noch weiter auslassen, hab aber keine Lust dazu. Es steckt schließlich ein Haufen Arbeit drin, und jetzt einfach alles zu verschenken kommt nicht in Frage.



Hab mal einen meiner alten Ansätze ausgekramt.
Das ist eine reine Singelplayerversion, da das Setup zum Benutzerwechsel nicht enthalten ist.
Da dort die KI nicht drinn ist, wird Schwarz nie ziehen.
  • über "Neu" wird ein neues Spielfeld geladen
  • über "Ende" wird das Programm beendet
  • "Einstellungen" zum ändern der Oberfläche und des Anschlusses (Ohne Treiber, also inaktiv)
  • "Brett drehen" (Brett wird aus privaten Gründen nicht gedreht, sondern gespiegelt)
  • "Editor" startet/beendet den Editormodus
    • Linke Maustaste = Figur setzen/tauschen
    • Mittlere Maustaste / Shift + Linke Maustaste = Figur wechseln
    • Rechte Maustaste = Figur löschen
  • "Sprungfelder" zeigt die möglichen Sprungfelder an
    die Mothode zur Auswahl möglicher Felder hat aber in dieser Version einen kleinen Fehler
    (bei Dame oder König, glaube ich zumindestens)
  • Die anderen Felder im Einstellungsbereich sind selbst erklärend
  • Die untersten eigenartigen Werte im Einstellungsbereich sind für Debugzecke (Anzeigetempo...)
  • Schwarz kann nicht gezogen werden
  • Weiß zieht nur einmal, da ja die KI für schwarz fehlt.
    Das läßt sich aber umgehen, wenn nach dem Zug kurz der Editmodus gestartet und wieder beendet wird, das setzt intern einige Register zurück (deswegen bleibt der Editmodus nach dem 1. Zug auch noch aktiv)


http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Angehängte Dateien
Dateityp: exe normal.exe (959,5 KB, 34x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat