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 - zweites bild wird nicht aufgedeckt (https://www.delphipraxis.net/56965-memory-zweites-bild-wird-nicht-aufgedeckt.html)

Tigermoon 14. Nov 2005 12:37


Memory - zweites bild wird nicht aufgedeckt
 
Hallo

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;

marabu 14. Nov 2005 13:14

Re: Memory - zweites bild wird nicht aufgedeckt
 
Hallo Stephanie,

weg mit dem Sleep() - die Pausensteuerung solltest du mit einem Timer außerhalb der OnClick-Routine machen. Und die Bilder solltest du nicht jedesmal von der Platte laden. Lade sie in einen TMemoryStream und hole sie dir auch von dort.

Grüße vom marabu

Tigermoon 14. Nov 2005 13:18

Re: Memory - zweites bild wird nicht aufgedeckt
 
wie würdest du das mit dem timer machen?

ich habe immer gedacht timer sind zum wiederholen nicht zum pausieren?

Neutral General 14. Nov 2005 13:19

Re: Memory - zweites bild wird nicht aufgedeckt
 
Zitat:

Zitat von Tigermoon
wie würdest du das mit dem timer machen?

ich habe immer gedacht timer sind zum wiederholen nicht zum pausieren?

Klar aber dann stellst du den Timer halt auf z.B eine Sekunde und schreibst dann ins OnTimer Ereignis das ein anderes Bild geladen werden soll. Wenn alles erledigt ist dann schaltest du den Timer halt einfach aus ;)

Tigermoon 14. Nov 2005 14:03

Re: Memory - zweites bild wird nicht aufgedeckt
 
Danke für deine hilfe

awa jetzt verschwindet immer das zweite bild egal was und das erst deckt sich nicht wieder zu.
Die sache mit den bildern mache ich später...

kann mir da mal einer helfen
ich blicke das ned

Turns wird bei game_new auf null gesetzt

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;

  Timer1.Tag := BildNummer;
  Timer1.Enabled := true;

end;
Delphi-Quellcode:
procedure TMemoryfeld.Timer1Timer(Sender: TObject);
Var
   BildNummer:integer;
begin

  BildNummer := Timer1.Tag;

  //Anzahl umgedrehte Bilder
  turns := turns + 1;

  //Erstes Bild
  if turns = 1 then
  begin
    pic1_turned := BildNummer;
  end;

  //Zweites bild
  if turns = 2 then
  begin
    pic2_turned := BildNummer;

    // 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;
       timer1.Enabled := false;
    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;
       timer1.Enabled := false;
    end;
  end;
end;

FriFra 14. Nov 2005 15:01

Re: Memory - zweites bild wird nicht aufgedeckt
 
ACHTUNG: keine Rechtsauskunft, sondern subjektive Einschaetzung!

Ich würde Dir raten Dein Spiel umzubenennen, da Du ansonsten sehr schnell sehr viel ärmer sein könntest. "Memory" ist eine eingetragene Marke der Ravensburger AG, welche ihre Rechte rücksichtslos durchsetzt. Die verbreitete Annahme, dass "Memory" ein Gattungsbegriff für derartige Spiele ist, ist falsch.
http://www.rhetorik.ch/Medienrecht/M...ibusiness.html

Tigermoon 14. Nov 2005 15:04

Re: Memory - zweites bild wird nicht aufgedeckt
 
ok werde ich tun

und das ist ja nur zur übung....

Tigermoon 15. Nov 2005 11:36

Re: Memory - zweites bild wird nicht aufgedeckt
 
15.11.2005

Habe mit das alles mal zu herzen genommen
hat jetzt einen neuen Namen Get Pairs
hoffe das ist legal....

Aber wie schon gesagt
das Programm habe ich ja nur zum Üben erstellt

Nun zu meinem Problem zurück
Kann mir vielleicht jemand helfen warum nach dem einfügen des Timers meine bilder machen was sie wollen?

die erste quelltextform ohne den timer ging (siehe ganz oben)

Was es machen sollte und auch tat
Wenn zwei ungeleiche angedrückt werden sollen sie sich wieder umdrehen
wenn zwei gleiche angedrückt werden visible gehen

was es nun macht
das zweite angeklickte bild visible gemacht und das erste nicht wieder zugedeckt
egal ob gleich oder ungleich

neue quelltext form siehe 14.11.2005, 14:03


Hoffe das mir jemand weiterhelfen kann

Tigermoon


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr.

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 by Thomas Breitkreuz