Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi n-Dame: Darstellung schlägt fehl (https://www.delphipraxis.net/61115-n-dame-darstellung-schlaegt-fehl.html)

muetzentraeger 17. Jan 2006 09:41


n-Dame: Darstellung schlägt fehl
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen :-D.
Auch wenn ich einige Startschwierigkeiten hatte (die dank eurer tatkräftigen Unterstützung behoben wurden), hab ich es jetzt schon fast geschafft mein n-Dame-Problem zu lösen. Das Problem ist, dass er bei der Visualisierung der Damen auf dem "Schachbrett" einen Fehler ausgibt, und zwar bei allen Versuchen nach der 16. Lösung. Ich habe schon alle mir bekannten Hilfestellungen von Delphi ausgenutzt (Ich habe das Programm im Einzelschrittmodus durchlaufen lassen. Es hat 2 Stunden gedauert, aber geholfen hat es auch nichts, weil die Variablen gerade dort nicht verfügbar waren :-() nur komm ich lieder nicht weiter. Ich hab mein Programm angehängt. Er wäre sehr nett wenn sich dasjemand mal ansieht, und mir einen Tip geben kann wie ich es besser lösen könnte, oder vielleicht sogar mein Programm zum Laufen bringen kann.
Danke schon einmal im Voraus für die Hilfe.

chaosben 17. Jan 2006 09:51

Re: n-Dame: Darstellung schlägt fehl
 
Ich versteh zwar nicht was dein Programm da genau macht. Aber ist ja auch egal.
Jedefalls hilft es wirstschaften, wenn man den beanspruchten Speicher auch wieder freigibt. Ich hab das an 2 Stellen getan .. und siehe da: Der Fehler ist weg.
Delphi-Quellcode:
PROCEDURE Damen_visualisieren (spalte,zeile:integer);
  var damebild:TBitmap;
      begin
      damebild:=TBitmap.Create;
      damebild.LoadFromFile('dame.bmp');
      DrawGrid1.Canvas.Draw(((spalte*30)+spalte)-31,((zeile*30)+zeile)-31,damebild);
      damebild.Free; //Hier ...
      end;

  PROCEDURE Damen_loeschen (spalte,zeile:integer);
  var damebild:TBitmap;
      begin
      damebild:=TBitmap.Create;
      damebild.LoadFromFile('leer.bmp');
      DrawGrid1.Canvas.Draw(((spalte*30)+spalte)-31,((zeile*30)+zeile)-31,damebild);
      damebild.Free; // ... und hier
      end;

alzaimar 17. Jan 2006 10:06

Re: n-Dame: Darstellung schlägt fehl
 
.... und das dann noch in Try-Finally Blöcke kapseln und Du hast ein wirklich robustes Programm.
Delphi-Quellcode:
PROCEDURE Damen_visualisieren (spalte,zeile:integer);
var
  damebild:TBitmap;

begin
  damebild:=TBitmap.Create;
  Try // ***********
    damebild.LoadFromFile('dame.bmp');
    DrawGrid1.Canvas.Draw(((spalte*30)+spalte)-31,((zeile*30)+zeile)-31,damebild);
  Finally // ******
    damebild.Free; //Hier ...
  end; //*********
end;

PROCEDURE Damen_loeschen (spalte,zeile:integer);
var
  damebild:TBitmap;

begin
  damebild:=TBitmap.Create;
  Try // *******************
    damebild.LoadFromFile('leer.bmp');
    DrawGrid1.Canvas.Draw(((spalte*30)+spalte)-31,((zeile*30)+zeile)-31,damebild);
  Finally //****************
    damebild.Free; // ... und hier
  end; //******************
end;
Dann wird der Speicher auch dann freigegeben, wemm beim 'LoadFromFile' oder dem anschließenden Draw etwas schief geht.
Weiterhin könnte man einfach zwei Bitmaps global deklarieren (oder in der Form) und die beiden Bilder einmalig beim Programmstart laden. Dann erübrigt sich das Ganze sowieso.

Ach ja: Im FormDestroy die beiden Bitmaps wieder freigeben.

muetzentraeger 17. Jan 2006 13:15

Re: n-Dame: Darstellung schlägt fehl
 
Und wieder einmal ein großes Dankeschön. Es geht wunderbar.
:-D :thumb:

Amateurprofi 17. Jan 2006 19:21

Re: n-Dame: Darstellung schlägt fehl
 
Liste der Anhänge anzeigen (Anzahl: 1)
Dein Problem ist zwar inzwischen behoben - aber da ich mir die Mühe schon gemacht habe, ist hier meine Version zur Lösung des 8-Damen-Problems.
Zur Info : Es gibt im Prnzip 12 Lösungen, die durch Spiegeln/Drehen in insgesamt 96 Lösungen umgewandelt werden können. Von diesen 96 sind 4 identisch, so daß sich 92 (von der Notation her) verschiedene Lösungen ergeben.

Klicke auf den Button 'Nur Liste'.
Wenn Du Die Stellungen auf dem 'Brett' sehen willst, klicke aud den entsprechenden Eintrag in der Listbox.

Gruß, Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.

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