Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Memory Spiel (https://www.delphipraxis.net/180609-memory-spiel.html)

audifanrs6 2. Jun 2014 20:04

Memory Spiel
 
Hallo zusammen,

zur Zeit bin dabei ein Memory Spiel zu erstellen. Jedoch komm ich nicht mehr weiter.:( Im Moment funktioniert es ja nur so, dass der Button verschwindet und das darunter liegende Image gezeigt wird.
Wie bekomme ich das jetzt hin, dass maximal 2 Buttons verschwinden? Und das die beiden Buttons wieder da sind, wenn ich einen dritten anklick? Die jeweils zwei Buttons sollen nur wegbleiben, wenn das richtige Paar gefunden wurde.
Ist ja schließlich ein Memory.
Kann mir jemand sagen, was ich genau machen muss mit meinem vorhandenen Programm? Ich weiß, dass ich irgendwas mit Variablen machen muss, nur wie?:?:

Delphi-Quellcode:
unit Unit3;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons,
  StdCtrls, ExtCtrls;
 
type
 
  { TForm3 }
 
  TForm3 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn10: TBitBtn;
    BitBtn11: TBitBtn;
    BitBtn12: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    BitBtn6: TBitBtn;
    BitBtn7: TBitBtn;
    BitBtn8: TBitBtn;
    BitBtn9: TBitBtn;
    Button1: TButton;
    Image1: TImage;
    Image10: TImage;
    Image11: TImage;
    Image12: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Image6: TImage;
    Image7: TImage;
    Image8: TImage;
    Image9: TImage;
    procedure BitBtn10Click(Sender: TObject);
    procedure BitBtn11Click(Sender: TObject);
    procedure BitBtn12Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
    procedure BitBtn6Click(Sender: TObject);
    procedure BitBtn7Click(Sender: TObject);
    procedure BitBtn8Click(Sender: TObject);
    procedure BitBtn9Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Image1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form3: TForm3;
 
implementation
uses Unit1 ;
 
{$R *.lfm}
 
{ TForm3 }
 
procedure TForm3.BitBtn10Click(Sender: TObject);    //Paar 3
begin
  BitBtn10.Visible:=false;
  Image10.Picture.LoadFromFile('H:\SmkInf\Memorykarten\Fortgeschritten\Image6.bmp');
end;
 
procedure TForm3.BitBtn11Click(Sender: TObject);     //Paar 4
begin
  BitBtn11.Visible:=false;
  Image11.Picture.LoadFromFile('H:\SmkInf\Memorykarten\Fortgeschritten\Image8.bmp');
end;
 
procedure TForm3.BitBtn12Click(Sender: TObject);     //Paar 6
begin
  BitBtn12.Visible:=false;
  Image12.Picture.LoadFromFile('H:\SmkInf\Memorykarten\Fortgeschritten\Image12.bmp');
end;
 
procedure TForm3.BitBtn1Click(Sender: TObject);      //Paar 1
begin
  BitBtn1.Visible:=false;
  Image1.Picture.LoadFromFile('H:\SmkInf\Memorykarten\Fortgeschritten\Image1.bmp');
end;
 
procedure TForm3.BitBtn2Click(Sender: TObject);      //Paar 1
begin
  BitBtn2.Visible:=false;
  Image2.Picture.LoadFromFile('H:\SmkInf\Memorykarten\Fortgeschritten\Image2.bmp');
end;
 
procedure TForm3.BitBtn3Click(Sender: TObject);      //Paar 3
begin
   BitBtn3.Visible:=false;
   Image3.Picture.LoadFromFile('H:\SmkInf\Memorykarten\Fortgeschritten\Image5.bmp');
end;
 
procedure TForm3.BitBtn4Click(Sender: TObject);      //Paar 2
begin
  BitBtn4.Visible:=false;
  Image4.Picture.LoadFromFile('H:\SmkInf\Memorykarten\Fortgeschritten\Image3.bmp');
end;
 
procedure TForm3.BitBtn5Click(Sender: TObject);      //Paar 4
begin
  BitBtn5.Visible:=false;
  Image5.Picture.LoadFromFile('H:\SmkInf\Memorykarten\Fortgeschritten\Image7.bmp');
end;
 
procedure TForm3.BitBtn6Click(Sender: TObject);      //Paar 2
begin
  BitBtn6.Visible:=false;
  Image6.Picture.LoadFromFile('H:\SmkInf\Memorykarten\Fortgeschritten\Image4.bmp');
end;
 
procedure TForm3.BitBtn7Click(Sender: TObject);       //Paar 6
begin
  BitBtn7.Visible:=false;
  Image7.Picture.LoadFromFile('H:\SmkInf\Memorykarten\Fortgeschritten\Image11.bmp');
end;
 
procedure TForm3.BitBtn8Click(Sender: TObject);        //Paar 5
begin
  BitBtn8.Visible:=false;
  Image8.Picture.LoadFromFile('H:\SmkInf\Memorykarten\Fortgeschritten\Image9.bmp');
end;
 
procedure TForm3.BitBtn9Click(Sender: TObject);        //Paar 5
begin
  BitBtn9.Visible:=false;
  Image9.Picture.LoadFromFile('H:\SmkInf\Memorykarten\Fortgeschritten\Image10.bmp');
end;
 
procedure TForm3.Button1Click(Sender: TObject);
begin
  form3.hide ;
  form1.show ;
end;
 
 
end.

Sherlock 3. Jun 2014 09:16

AW: Memory Spiel
 
Hast Du Dir mal auf einem Zettel (neudeutsch Word) aufgeschrieben, was genau passieren soll? Irgendwo wird da ja stehen, wieviele Knöpfe gleichzeitig gedrückt sein dürfen. Um soetwas als ganz dummes Programm zu tun, muss gezählt werden. Zwar nur bis zwei, aber man muss sich das halt merken.

Wie man ein Programm dazu bringt, zu zählen hat man Dir hoffentlich beigebracht.

Sherlock

himitsu 3. Jun 2014 09:27

AW: Memory Spiel
 
Eine Antwort ist zwar schon da, aber noch bissl Kleinkram bleibt übrig.
  • Wenn du deinen Code hier in [delphi]...[/delphi]-Tags einfügst, dann kann man Diesen besser lesen.
  • Zitat:

    Delphi-Quellcode:
    procedure TForm3.Button1Click(Sender: TObject);
    begin
    form3.hide ;
    form1.show ;
    end;

    Der Code steht bereits in TForm3, also solltest du dort nicht auf Form3 zugreifen.
    Entweder weglassen (
    Delphi-Quellcode:
    Hide;
    ), oder
    Delphi-Quellcode:
    Self.Hide;
    verwenden.
  • Sind dir die nutzlosen Kommentare hinter den Methoden-Headern aufgefallen?
    Wenn du die Buttons entsprechend benennst, dann wären Diese nicht nötig.
  • Und wenn du die TImages, TBitBtns und Bitmaps gleich benennst (selbe Nummer), dann wäre der Zusammenhang gleich verständlicher.
  • Du könntest auch die Bitmaps direkt im Formdesigner in die Images laden und brauchst Diese im Code dann nur noch sichtbar machen. (im OI das Visible auf False)
  • Sind denn auf jedem Computer, wo dieses Programm mal ausgeführt wird, die Bitmaps immer im selben Verzeichnis? Wenn nicht, dann sind absolute Pfadangaben eher schlecht.

Blup 3. Jun 2014 09:46

AW: Memory Spiel
 
Beispiel für einen Zettel was passieren soll:
Code:
Start:
  Karten zufällig verteilen

Kartenklick:
  Welcher Zustand liegt vor:

1.keine Karte als neu aufgedeckt gemerkt
- Anzahl der Versuche erhöhen
- Karte aufdecken
- 1.Karte merken und damit zu Zustand 2 wechseln

2.eine Karte wurde bereits als neu aufgedeckt gemerkt
- Karte aufdecken
  Wenn(zweite Karte = erste Karte)
-   Merker für erste Karte löschen und damit in Zustand 1 wechseln
-   Auf Ende prüfen
  Sonst
-   2.Karte merken und damit zu Zustand 3 wechseln

3.zwei unterschiedliche Karten wurden bereits als neu aufgedeckt gemerkt
- beide Karten zudecken
- Merker für beide Karten löschen
- weiter wie im Zustand 1.

4.Ende(alle Karten sind aufgedeckt)
- alle Karten zudecken
- neu Starten
Benötigt werden also mindestens zwei Variablen, in denen du dir die erste und die zweite Karte merken kannst.
Abhängig von der Belegung dieser Variablen muss beim Kartenklick anders reagiert werden.
Mit einer weiter Variable, die die Gesamtanzahl der aufgedeckten Karten enthält, lässt sich auch der Zustand 4 leicht erkennen.

himitsu 3. Jun 2014 09:58

AW: Memory Spiel
 
Zitat:

Zitat von Blup (Beitrag 1261163)
Mit einer weiter Variable, die die Gesamtanzahl der aufgedeckten Karten enthält, lässt sich auch der Zustand 4 leicht erkennen.

Oder man schreibt sich eine Funktion, welche zählt wieviele Karten aufgedeckt sind. Das läst sich z.B. an der Sichtbarkeit der Buttons erkennen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:36 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-2025 by Thomas Breitkreuz