Einzelnen Beitrag anzeigen

C_NO_THANKS
(Gast)

n/a Beiträge
 
#23

Re: Schach: Überprüfung, ob Zug erlaubt

  Alt 2. Aug 2006, 21:01
Hi Frederic,

ich versuche mal eine Antwort ohne Code.

Ich würde aus jeder Figur ein Objekt machen. (logische und grafische Implementierung unter einem Dach)
Jedes Objekt wird so programmiert, dass es selber weiss wie es sich bewegen darf. Stösst es im Bewegungsablauf auf ein anderes Objekt oder an die Grenzen des Brettes, dann werden entsprechende Ereignisse ausgelöst.
Logik in der Bewegung:
- Richtung
- Anzahl der Felder in dieser Richtung?
- Grenze erreicht?
- Kollision mit einer anderen Figur?
- Sonderfälle wie beim Bauern 2 Felder vor wenn auf Grundposition, Rochade Turm mit König berücksichtigen... u.v.m.

Trifft die sich virtuell bewegende Figur auf eine andere, tauschen diese dann Informationen über diverse Properties aus.
Z.B. die Identität oder Wertigkeit.
"Bist Du weiss oder schawrz?"
"Wenn schwarz - dann - bist Du nicht der gegnerische König?"
"Wenn wahr dann schlage .... (löse Ereignis "Schlage Figur aus")

Ohne ifs kann ich es mir nicht vorstellen (im richtigen Leben gehts ja auch nicht ohne ifs - nur denken wir nicht drüber nach) Aber Du kannst die ifs auf die Object-Prototypen begrenzen. Dein Schachspiel-Object macht dann nichts anderes, als die geplanten Züge an die entsprechenden Figuren-Objekte zu übergeben und wartet dann auf die Nachricht von der Figur ob Sie das so durchführen könnte.

Die Definition einer Figur im "TSchachspiel"-Object könnte dann folgendermassen lauten:
Pferd_Schwarz_01 : TPferd_Schwarz_01; (Wobei TPferd_Schwarz_01 von TPferd abgeleitet sein sollte)

Man kann die Objekte soweit verfeinern, dass eine Figur sogar seine Ausgangsposition kennt und sich beim Aufruf "Schachspiel:=TSchachspiel.create (self) entsprechend positioniert.

Zur späteren Weiterentwicklung des Programms, könntest Du im ersten Schritt ein Zugwertigkeit implementieren. Das heisst jede Figur kann einen Zug vorschlagen, den sie als am höchstwertigsten erkennt. Als Beispiel wäre das direkte Schlagen einer gegnerischen Figur denkbar.

So kommst Du von der rein mechanischen Anwendung, zur taktisch "mitdenkenden" Schachfigur. Wenn Du die Figuren zu guten Taktikern "ausgebildet" hast, kannst Du Dir über Strategie Gedanken machen. Die Figuren einer Farbe könnten über einen Kommunikationskanal (Broadcast-Messages) zusammen kommunizieren. In einer demokratischen Abstimmung würde dann der nächste Zug beschlossen

Die Demokatie kann man beim Schach auch einfach weglassen. Die Figuren könnten Ihre Vorschläge auch an den König senden, und der trifft dann eine Entscheidung (er ist halt der Boss auf dem Brett).

Meine Anmerkungen lösen zwar nicht Deine Probleme im Detail, aber ich denke es wäre eine interessante Richtung.

Ausserdem finde ich es toll, dass Du so ein komplexes Problem angehst.

Viele Grüsse

C_NO_THANKS
  Mit Zitat antworten Zitat