Memory Spiel

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
audifanrs6
Beiträge: 2
Registriert: Di 13. Mai 2014, 22:28

Memory Spiel

Beitrag von audifanrs6 »

Hallo zusammen,

ich versuche gerade ein Memory Spiel (4x3 Spielfeld) mit Lazarus (1.0.12) zu programmieren, jedoch komm ich nicht mehr weiter. :?
Im Moment ist es so, wenn ich ein Button (Spielkarte) anklicke, erscheint ein Wort (Image). Sobald ich ein weiteren Button anklicke, wird der Button wieder angezeigt, der das Wort (Image) dahinter verdeckt.
Wie macht man das, dass wenn man einen Button anklickt ein Wort gezeigt wird und wenn man dann ein weiteren beliebigen Button anklickt, dass dann beide angezeigt werden. Und wenn man dann einen dritten Button anklickt, dass die anderen beiden Buttons wieder das jeweilige Wort (Image) verdecken? Und noch als letztes, wie macht man das, dass wenn man das passende Wortpaar gefunden hat, dass die beiden Wörter dann weiter angezeigt bleiben?

Code: Alles auswählen

unit Unit2;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Buttons, ExtCtrls;
 
type
 
  memoryfeld = RECORD
                  id : INTEGER;
                  wert : String;
                  aufgedeckt : Boolean;
                END;
 
 
  { TForm2 }
 
  TForm2 = 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 Image2Click(Sender: TObject);
      private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form2: TForm2;
  memory: array[1..12] of memoryfeld;
 
implementation
uses Unit1 ;
 
{$R *.lfm}
 
{ TForm2 }
 
procedure TForm2.Button1Click(Sender: TObject);
begin
  form2.hide ;
  form1.show ;
end;
 
 
 
procedure TForm2.Image2Click(Sender: TObject);
begin
 
end;
 
 
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
  BitBtn1.hide;
  Image1.Picture.LoadFromFile('C:\SmkInf\Memorykarten\Anfänger\Image1.bmp');
  BitBtn2.show;
  BitBtn3.show;
  BitBtn4.show;
  BitBtn5.show;
  BitBtn6.show;
  BitBtn7.show;
  BitBtn8.show;
  BitBtn9.show;
  BitBtn10.show;
  BitBtn11.show;
  BitBtn12.show;
 
end;
 
 
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
  BitBtn2.hide;
  Image2.Picture.LoadFromFile('C:\SmkInf\Memorykarten\Anfänger\Image11.bmp');
  BitBtn1.show;
  BitBtn3.show;
  BitBtn4.show;
  BitBtn5.show;
  BitBtn6.show;
  BitBtn7.show;
  BitBtn8.show;
  BitBtn9.show;
  BitBtn10.show;
  BitBtn11.show;
  BitBtn12.show;
end;
 
procedure TForm2.BitBtn3Click(Sender: TObject);
begin
  BitBtn3.hide;
  Image3.Picture.LoadFromFile('C:\SmkInf\Memorykarten\Anfänger\Image3.bmp');
  BitBtn1.show;
  BitBtn2.show;
  BitBtn4.show;
  BitBtn5.show;
  BitBtn6.show;
  BitBtn7.show;
  BitBtn8.show;
  BitBtn9.show;
  BitBtn10.show;
  BitBtn11.show;
  BitBtn12.show;
end;
 
procedure TForm2.BitBtn4Click(Sender: TObject);
begin
  BitBtn4.hide;
  Image4.Picture.LoadFromFile('C:\SmkInf\Memorykarten\Anfänger\Image5.bmp');
  BitBtn1.show;
  BitBtn2.show;
  BitBtn3.show;
  BitBtn5.show;
  BitBtn6.show;
  BitBtn7.show;
  BitBtn8.show;
  BitBtn9.show;
  BitBtn10.show;
  BitBtn11.show;
  BitBtn12.show;
end;
 
procedure TForm2.BitBtn5Click(Sender: TObject);
begin
  BitBtn5.hide;
  Image5.Picture.LoadFromFile('C:\SmkInf\Memorykarten\Anfänger\Image4.bmp');
  BitBtn1.show;
  BitBtn2.show;
  BitBtn3.show;
  BitBtn4.show;
  BitBtn6.show;
  BitBtn7.show;
  BitBtn8.show;
  BitBtn9.show;
  BitBtn10.show;
  BitBtn11.show;
  BitBtn12.show;
end;
 
procedure TForm2.BitBtn6Click(Sender: TObject);
begin
  BitBtn6.hide;
  Image6.Picture.LoadFromFile('C:\SmkInf\Memorykarten\Anfänger\Image2.bmp');
  BitBtn1.show;
  BitBtn2.show;
  BitBtn3.show;
  BitBtn4.show;
  BitBtn5.show;
  BitBtn7.show;
  BitBtn8.show;
  BitBtn9.show;
  BitBtn10.show;
  BitBtn11.show;
  BitBtn12.show;
end;
 
procedure TForm2.BitBtn7Click(Sender: TObject);
begin
  BitBtn7.hide;
  Image7.Picture.LoadFromFile('C:\SmkInf\Memorykarten\Anfänger\Image10.bmp');
  BitBtn1.show;
  BitBtn2.show;
  BitBtn3.show;
  BitBtn4.show;
  BitBtn5.show;
  BitBtn6.show;
  BitBtn8.show;
  BitBtn9.show;
  BitBtn10.show;
  BitBtn11.show;
  BitBtn12.show;
end;
 
procedure TForm2.BitBtn8Click(Sender: TObject);
begin
  BitBtn8.hide;
  Image8.Picture.LoadFromFile('C:\SmkInf\Memorykarten\Anfänger\Image6.bmp');
  BitBtn1.show;
  BitBtn2.show;
  BitBtn3.show;
  BitBtn4.show;
  BitBtn5.show;
  BitBtn6.show;
  BitBtn7.show;
  BitBtn9.show;
  BitBtn10.show;
  BitBtn11.show;
  BitBtn12.show;
end;
 
procedure TForm2.BitBtn9Click(Sender: TObject);
begin
  BitBtn9.hide;
  Image9.Picture.LoadFromFile('C:\SmkInf\Memorykarten\Anfänger\Image8.bmp');
  BitBtn1.show;
  BitBtn2.show;
  BitBtn3.show;
  BitBtn4.show;
  BitBtn5.show;
  BitBtn6.show;
  BitBtn7.show;
  BitBtn8.show;
  BitBtn10.show;
  BitBtn11.show;
  BitBtn12.show;
end;
 
procedure TForm2.BitBtn10Click(Sender: TObject);
begin
  BitBtn10.hide;
  Image10.Picture.LoadFromFile('C:\SmkInf\Memorykarten\Anfänger\Image12.bmp');
  BitBtn1.show;
  BitBtn2.show;
  BitBtn3.show;
  BitBtn4.show;
  BitBtn5.show;
  BitBtn6.show;
  BitBtn7.show;
  BitBtn8.show;
  BitBtn9.show;
  BitBtn11.show;
  BitBtn12.show;
end;
 
procedure TForm2.BitBtn11Click(Sender: TObject);
begin
  BitBtn11.hide;
  Image11.Picture.LoadFromFile('C:\SmkInf\Memorykarten\Anfänger\Image7.bmp');
  BitBtn1.show;
  BitBtn2.show;
  BitBtn3.show;
  BitBtn4.show;
  BitBtn5.show;
  BitBtn6.show;
  BitBtn7.show;
  BitBtn8.show;
  BitBtn9.show;
  BitBtn10.show;
  BitBtn12.show;
end;
 
procedure TForm2.BitBtn12Click(Sender: TObject);
begin
  BitBtn12.hide;
  Image12.Picture.LoadFromFile('C:\SmkInf\Memorykarten\Anfänger\Image9.bmp');
  BitBtn1.show;
  BitBtn2.show;
  BitBtn3.show;
  BitBtn4.show;
  BitBtn5.show;
  BitBtn6.show;
  BitBtn7.show;
  BitBtn8.show;
  BitBtn9.show;
  BitBtn10.show;
  BitBtn11.show;
end;
 
end.



Ich würde mich sehr über Hilfe freuen.
Zuletzt geändert von Lori am Mi 14. Mai 2014, 14:07, insgesamt 1-mal geändert.
Grund: Bitte nutze den Highlighter

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Memory Spiel

Beitrag von Michl »

Könntest ja in einer Varaible speichern, welches Bild schon aufgedeckt ist und mit "if" abfragen.

Generell würde ich Dir empfehlen, bei Deinen BitBtnClicks eine neue Procedure aufzurufen, in der dann in einer Schleife auf das jeweilige BitBtn reagiert werden kann , ansonsten tippst Du Dir ja die Finger wund, z.B.:

Code: Alles auswählen

//Pseudocode!!!!!
 
procedure BildKlick(BildNr: Integer);
var
  i: Integer;
begin
  if SchonsichtbaresBild = 0 then
    SchonsichtbaresBild := BildNr
  else
    SchonsichtbaresBild := 0;
 
  for i:=1 to 12 do  //mit einer Schleife alle entsprechenden BitButtons anzeigen oder auch nicht
    if (i = SchonsichtbaresBild) or (i = BildNr) then
      EntsprechendesImageAnzeigen(i)
    else
      BitButtonAnzeigen(i);
end;
 
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
  BildKlick(1);  //es wurde auf 1. Button geklickt
end;
 
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
  BildKlick(2);  //es wurde auf 2. Button geklickt
end; 
Ob das mit den BitButtons mit dahinter/davor liegenden Images eine gute Lösung ist, steht auf einem anderen Blatt.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

audifanrs6
Beiträge: 2
Registriert: Di 13. Mai 2014, 22:28

Re: Memory Spiel

Beitrag von audifanrs6 »

Hallo zusammen,

ich komm immer noch nicht weiter.

Code: Alles auswählen

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.
 


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?
Zuletzt geändert von Lori am Mo 2. Jun 2014, 16:12, insgesamt 1-mal geändert.
Grund: Highlighter

Antworten