Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 8-Damen-Problem (https://www.delphipraxis.net/38898-8-damen-problem.html)

glkgereon 25. Jan 2005 19:05


8-Damen-Problem
 
ich hab mich mal wieder dran gegeben und versuche es zu lösen...

wenn ich weiss welche dame als letztes dazugekommen ist, kann ich ja wesentlich schneller überprüfen ob eine stellung gültig ist.
ist dieser code korrekt? kann man ihn noch optimieren?

Delphi-Quellcode:
function TForm1.IsValid(Feld:TFeld; NewX, NewY: Byte):Boolean;
var i:Integer;
    Failed:Boolean;
begin
  for i:=1 to Newy-1 do Failed:=Failed or Feld[i,NewY];
  if not Failed then
    for i:=NewY+1 to 8 do Failed:=Failed or Feld[i,NewY];
  if not Failed then
    for i:=1 to NewX-1 do Failed:=Failed or Feld[NewX,i];
  if not Failed then
    for i:=NewX+1 to 8 do Failed:=Failed or Feld[NewX,i];
  if not Failed then
    for i:=NewX-1 downto 1 do
      if NewY-i>0 then Failed:=Failed or Feld[NewX-i,NewY-i];
  if not Failed then
    for i:=1 to 8-NewX do
      if NewY+i>0 then Failed:=Failed or Feld[NewX+i,NewY+i];
  Result:=Failed;
end;

Binärbaum 25. Jan 2005 21:39

Re: 8-Damen-Problem
 
Was hat hierbei die Varaible/Array Feld zu erledigen? Prüft die, ob auf dem jeweiligen Feld schon eine Dame steht?

MfG
Binärbaum

glkgereon 26. Jan 2005 13:43

Re: 8-Damen-Problem
 
Delphi-Quellcode:
TFeld = array[1..8,1..8] of boolean;
//True = Dame
//False = Keine Dame
hoffe das hilft weiter ;)

Binärbaum 26. Jan 2005 13:56

Re: 8-Damen-Problem
 
Naja, das hilft erstmal.

Mal eine ganz andere Idee: ich habe dieses Problem auch schon mal bearbeitet (allerdings in Real auf einem richtigen Schchbrett). Soweit ich mich erinnere, standen die Damen dort alle so, dass man von der einen Dame zurnächsten durch den Rösselsprung kam (der L-förmige zug, den sonst der Springer macht). Vielleicht hilft dir das ja weiter.

Und zur Code-Optimierung: man könnte alle for-Schleifen durch entsprechende while-Schleifen ersetzen und in die Durchlaufbedingung Failed mit einbeziehen. Dann würde die Schleife nicht noch mehrmals durchlaufen, wenn z.B. schon nach dem ersten Durchlauf klar ist, dass die eingegebene Position nicht die richtige ist. Dadurch hätte man zwar erstmal ein paar Zeilen mehr Code, da die Laufvariable i "manuell" hochgezählt werden muss, aber dafür müsste der Code dann auch schneller sein.

MfG
Binärbaum

glkgereon 26. Jan 2005 14:00

Re: 8-Damen-Problem
 
ja, ich "kann" schach spielen, und nein, das mit dem rösselsprung funzt so astrein nicht (man darf auf jeden fall nicht in der ecke anfangen...)

ich werd das nochmal alles durchgucken

Binärbaum 27. Jan 2005 14:43

Re: 8-Damen-Problem
 
Hab ich etwa behauptet, dass du nicht Schach spielen kannst? Kann mich nicht daran erinnern. :gruebel:
Das mit dem Rösselsprung sollte übrigens nur ein Denkanstoss sein. Inwiefern man das auf dem PC umsetzen kann (und ob es schneller ist als die bisherige Funktion), dass hab ich nicht gesagt.

MfG
Binärbaum

glkgereon 27. Jan 2005 14:52

Re: 8-Damen-Problem
 
sollte kein angriff sein

ich wollte nur hierauf eine antwort geben
Zitat:

Soweit ich mich erinnere, standen die Damen dort alle so, dass man von der einen Dame zurnächsten durch den Rösselsprung kam (der L-förmige zug, den sonst der Springer macht).
;)

Binärbaum 27. Jan 2005 15:03

Re: 8-Damen-Problem
 
Das sollte nicht heißen, dass du nicht Schach spielen kannst. Ich wollte nur sichergehen, dass ich auch richtig verstanden werde. Man weiß ja nicht, inwiefern sich der Gegenüber mit Schach auskennt. Also nichts für ungut.

MfG
Binärbaum

freak4fun 27. Jan 2005 15:18

Re: 8-Damen-Problem
 
Hallo,
ich spiel kein Schach. Wieso 8 Damen, ich denke sind nur 2. :gruebel:

:wiejetzt:

MfG
fR34k

Binärbaum 27. Jan 2005 15:22

Re: 8-Damen-Problem
 
@freak
Das Acht-Damen-Problem beschäftigt sich damit, wie man 8 Damen so auf einem leeren Schachbrett platzieren kann ,dass sie sich nicht gegenseitig schlagen können. Hat also mit dem eigentlichen Schachspiel wenig zu tun. (Bis auf die Damen natürlich :wink: )

MfG
Binärbaum


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz