Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Memory - problem beim aufdecken (https://www.delphipraxis.net/56963-memory-problem-beim-aufdecken.html)

Tigermoon 14. Nov 2005 10:44


Memory - problem beim aufdecken
 
Hallo

Ich habe versucht ein kleines Memonrs zu programmieren
es funktioniert auch alles bis auf diese eine sache und ich weiß ned warum

Turns ist eine lokale variable und ich setzte sie auf null wenn ich das spiele starte.

Delphi-Quellcode:
procedure TMemoryfeld.aufdeckenOnClick(Sender:TObject);
var
pic1_turned, pic2_turned :integer;
BildNummer : integer;
begin

  //Array (TImage) Bild = Bilder auf der Fläche (insgesamt 24)
  //Array (Integer) Bilder = Name des sich darunterbefindenden Bildes (bild 1.JPG - 12. JPG)

  //Bildernummer des angeklickten Bildes
  BildNummer := (Sender as TImage).Tag;
 
  //angeklicktes Bild aufdecken
  Bild[BildNummer].Picture.LoadFromFile(inttostr(bilder[BildNummer])+'.JPG');
  bild[bildnummer].Enabled := false;

  //Anzahl umgedrehte Bilder
  turns := turns + 1;
  turns_anz.caption := inttostr(turns);  {ausgabe zum test}

  //Erstes Bild
  if turns = 1 then
  begin
    pic1_turned := BildNummer;
    pic1.Caption := inttostr( Bildnummer );   {ausgabe zum test}
  end;

  //Zweites bild
  if turns = 2 then
  begin
    pic2_turned := BildNummer;
    pic2.Caption := inttostr( Bildnummer );     {ausgabe zum test}

    // bilder sind die gleichen
    if bilder[pic1_turned] = bilder[pic2_turned] then  {<-- Fehler an der stelle}
    begin
       bild[pic1_turned].Visible := false;
       bild[pic2_turned].Visible := false;
       turns := 0;
    end;

    //bilder sind unterschiedlich
    if bilder[pic1_turned] <> bilder[pic2_turned] then
    begin
       bild[pic1_turned].Picture.LoadFromFile('back.JPG');
       bild[pic1_turned].Enabled := true;
       bild[pic2_turned].Picture.LoadFromFile('back.JPG');
       bild[pic2_turned].Enabled := true;
       turns := 0;
    end;

  end;
end;
und zwar tritt der fehler immer auf nach dem ich das zweite angeklickt habe
[Warnung] Spielfeld.pas(171): Variable 'pic1_turned' ist möglicherweise nicht initialisiert worden
dann kann ich bilder aufdecken solange ich will und es passiert nichts mehr

geht mir mal bitte nen tipp
oder programmiere ich das zu umständlich?

Kuss Tigermoon

Baeuerle 14. Nov 2005 10:59

Re: Memory - problem beim aufdecken
 
pic1_turned und pic2_turned ebenfalls als Lokale Variable deklarieren dann geht´s

Tigermoon 14. Nov 2005 11:03

Re: Memory - problem beim aufdecken
 
Hast du recht danke

und warum? wenn ich fragen darf....

Baeuerle 14. Nov 2005 11:07

Re: Memory - problem beim aufdecken
 
bei turn = 1 wird pic1_turned initialisiert

ist turn = 2 geht die initialisierung verloren, da die variable pic1_turned prozedural ist !!

Tigermoon 14. Nov 2005 11:15

Re: Memory - problem beim aufdecken
 
Jetzt wo du es sagst

da wäre ich nie drauf gekommen :)

Luckie 14. Nov 2005 11:22

Re: Memory - problem beim aufdecken
 
Zitat:

Zitat von Baeuerle
pic1_turned und pic2_turned ebenfalls als Lokale Variable deklarieren dann geht´s

Sie sind doch schon lokale Variablen? :wiejetzt: Du meinst, er soll sie global machen. Dann aber bitte als Felder der übergeordneten Klasse.

Tigermoon 14. Nov 2005 11:30

Re: Memory - problem beim aufdecken
 
ja sorry

hatte es aber verstanden was er meinte

habe ein neues problem
mein programm friet ein bevor das bild aufgedeckt wird
hab eine pause von 1 sek drin

warum?

ich mache die pause damit man das zweite bild sieht (in meinem fall ehr sehen sollte)

Delphi-Quellcode:
procedure TMemoryfeld.aufdeckenOnClick(Sender:TObject);
var
BildNummer : integer;
begin

  //Array (TImage) Bild = Bilder auf der Fläche (insgesamt 24)
  //Array (Integer) Bilder = Name des sich darunterbefindenden Bildes (bild 1.JPG - 12. JPG)

  //Bildernummer des angeklickten Bildes
  BildNummer := (Sender as TImage).Tag;
 
  //angeklicktes Bild aufdecken
  Bild[BildNummer].Picture.LoadFromFile(inttostr(bilder[BildNummer])+'.JPG');
  bild[bildnummer].Enabled := false;

  //Anzahl umgedrehte Bilder
  turns := turns + 1;
  //turns_anz.caption := inttostr(turns);  {ausgabe zum test}

  //Erstes Bild
  if turns = 1 then
  begin
    pic1_turned := BildNummer;
    //pic1.Caption := inttostr( Bildnummer );   {ausgabe zum test}
  end;

  //Zweites bild
  if turns = 2 then
  begin
    pic2_turned := BildNummer;
    //pic2.Caption := inttostr( Bildnummer );     {ausgabe zum test}

    sleep(1000); <<--- hier

    // bilder sind die gleichen
    if bilder[pic1_turned] = bilder[pic2_turned] then
    begin
       bild[pic1_turned].Visible := false;
       bild[pic2_turned].Visible := false;
       turns := 0;
    end;

    //bilder sind unterschiedlich
    if bilder[pic1_turned] <> bilder[pic2_turned] then
    begin
       bild[pic1_turned].Picture.LoadFromFile('back.JPG');
       bild[pic1_turned].Enabled := true;
       bild[pic2_turned].Picture.LoadFromFile('back.JPG');
       bild[pic2_turned].Enabled := true;
       turns := 0;
    end;

  end;
end;

Luckie 14. Nov 2005 11:33

Re: Memory - problem beim aufdecken
 
Zitat:

Zitat von Tigermoon
habe ein neues problem

Und desgen machst du bitte ein neues Topic auf, wie es in den Forenregel steht, dass für ein neues Thema ein neuer Thread erstellt werden soll.

Ich schließe dann mal hier.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:19 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