Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Memory-Spiel: Ideen (https://www.delphipraxis.net/187916-memory-spiel-ideen.html)

XardasLP 27. Jan 2016 20:06

AW: Memory-Spiel: Ideen
 
STRG+F

Suchen nach "Flip" oder "OnFlip" beides keine Treffer. also nein ist nicht hilfreich :P

Aber ansonsten kann man dort ja immer mal reinschauen.

Es gibt welche die machen einen Trainer für Fahrschulfragen.
Den kann ich mir auch ohne eine einzige Klasse zusammenklicken. Ist einfach unfair. Der eine nimmt Snake, programmiert das von YT nach und fertig. Der andere nimmt Tetris, programmiert das von YT nach und fertig.

Also so ist Schulzeit. Das was die Lehrer nicht wissen sollen wir uns selbst aneignen. Machen ja schließlich Abitur, da gehört das ja dazu. Das die Lehrer ihr Wissen über die Jahre verlegt haben und jedes Jahr die gleichen Qelltexte abschreiben ist ja egal. :wink::!:

XardasLP 27. Jan 2016 20:13

AW: Memory-Spiel: Ideen
 
Zitat:

Ist der Kommentar von dir oder von mir? Aber Hilfe lesen hilft.
der ist von der Delphi Treff Seite kopiert

Luckie 27. Jan 2016 20:19

AW: Memory-Spiel: Ideen
 
Zitat:

Zitat von XardasLP (Beitrag 1328532)
STRG+F

Suchen nach "Flip" oder "OnFlip" beides keine Treffer. also nein ist nicht hilfreich :P

Das ist jetzt nicht dein Ernst? :shock: Das ist ein selbst definiertes Ereignis. Das nennt man dann "programmieren".

DeddyH 27. Jan 2016 20:22

AW: Memory-Spiel: Ideen
 
Mit STRG+F sucht man übrigens in der aktuellen Unit, die Hilfe wird Windows-üblich mit F1 geöffnet.

XardasLP 27. Jan 2016 20:35

AW: Memory-Spiel: Ideen
 
Zitat:

Mit STRG+F sucht man übrigens in der aktuellen Unit, die Hilfe wird Windows-üblich mit F1 geöffnet.
Ich habe übrigens deine 198 seitige PDF durchsucht... denkst auch ich bin blöd. Erst schickst du mir die, weil ich dort nachschauen soll und dann sowas :lol: schon bisschen blöd. ^.^


Zitat:

Das ist jetzt nicht dein Ernst? Das ist ein selbst definiertes Ereignis. Das nennt man dann "programmieren".
Ja tut mir Leid, das sprengt ja nun wirklich den Rahmen, weiß zwar das man sowas machen kann. Auch wenn man einen Button mit anderer Hintergrundfarbe haben möchte muss man den selbst erstellen und einbinden usw. - ändert nicht's daran, dass wir das alles noch nicht hatten.

Wenn ich dir alle unsere 30 Projekte zeige kannst du mir gerne verraten wie man daraus ein Memory Spiel entwickeln soll, was halt mehr Umfang hat als die 30 Projekte "addiert" :roll::-D

XardasLP 27. Jan 2016 20:38

AW: Memory-Spiel: Ideen
 
An diesem Projekt haben wir auch nachdem wir Geschäftsmodelle, use-case Diagramme, Anwendungsdiagramme, Sequenzdiagramme usw. durchgegangen sind noch so 2-3x 90 Minuten gearbeitet.

Bei uns hat jeder SOOOOOOOOOOOOO optimale Vorraussetzungen dieses Spiel gut abzuschließen :)

Delphi-Quellcode:
unit Umain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    EditID: TEdit;
    ButtonND: TButton;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    RG: TRadioGroup;
    ButtonBA: TButton;
    ButtonSAVE: TButton;
    ButtonCLOSE: TButton;
    EditDS: TEdit;
    EditB: TEdit;
    EditLZ: TEdit;
    CB: TComboBox;
    EditmZ: TEdit;
    EditmR: TEdit;
    EditGz: TEdit;
    EditGza: TEdit;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    procedure ButtonBAClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ButtonNDClick(Sender: TObject);
    procedure RGClick(Sender: TObject);
    procedure ButtonSAVEClick(Sender: TObject);
    procedure ButtonCLOSEClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  liste: TStrings;
  anz: integer;

implementation

uses UDarlehen;

{$R *.dfm}

procedure TForm1.ButtonBAClick(Sender: TObject);
begin
 EditDS.Enabled := False;
  EditB.Enabled := False;
  EditLZ.Enabled := False;
  CB.Enabled := False;
  Label3.Enabled := False;
  Label4.Enabled := False;
  Label5.Enabled := False;
  Label6.Enabled := False;
  Label7.Enabled := True;
  Label8.Enabled := True;
  Label9.Enabled := True;
  Label10.Enabled := True;
  EditGZ.Enabled := True;
  EditGza.Enabled := True;
  EditmR.Enabled := True;
if (EditDS.Text = '') or (EditB.Text = '') or (EditLZ.Text = '') or (CB.Text = '')
    then begin
    EditDS.SetFocus;
         end
    else begin
        darlehen.set_DS(strtofloat(Editds.Text));
        darlehen.set_BE(strtodate(EditB.Text));
        darlehen.set_LZ(strtoint(EditLZ.Text));
        darlehen.set_JZ(strtofloat(CB.Text));
        case RG.ItemIndex of
          0: begin
                EditMR.Text := formatfloat('0.00',darlehen.get_mon_Raten);
                EditMZ.Clear;
                EditGZ.Text := formatfloat('0.00',darlehen.get_ges_zinsen);
                EditGza.Text := formatfloat('0.00',darlehen.get_ges_zahlung);
             end;
          1: begin
                EditMZ.Text := formatfloat('0.00',darlehen.get_mon_Zinsen);
                EditMR.Text := '';
             end;
    end;
     EditGz.Text := formatfloat('0.00', darlehen.get_ges_zinsen);
     EditGza.Text := formatfloat('0.00', darlehen.get_ges_zahlung);
end;
ButtonSave.Enabled := True;
ButtonClose.Enabled := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  liste := TStringList.Create;
end;

procedure TForm1.ButtonNDClick(Sender: TObject);
begin
  ButtonND.Enabled := False;
  EditID.Enabled := False;
  Label2.Enabled := False;
  EditDS.Enabled := True;
  EditB.Enabled := True;
  EditLZ.Enabled := True;
  CB.Enabled := True;
  Label3.Enabled := True;
  Label4.Enabled := True;
  Label5.Enabled := True;
  Label6.Enabled := True;
  if RG.ItemIndex = -1
  then begin
          showmessage('Bitte Darlehensart auswählen! ');
       end
  else begin
          liste.LoadFromFile('darlehen.txt');
          anz := + liste.Count + 1000;
          //showmessage(inttostr(anz));
          EditID.Text := upcase(RG.Items[RG.ItemIndex][1]) + inttostr(anz);
          case RG.ItemIndex of
          0: darlehen := TAnnuitaetendarlehen.create(Editid.Text);
          1: darlehen := TEndfaelliges_Darlehen.create(Editid.Text);
          end;
          ButtonBA.Enabled := True;
       end;
end;

procedure TForm1.RGClick(Sender: TObject);
begin
ButtonND.Enabled := True;
Label2.Enabled := True;
end;

procedure TForm1.ButtonSAVEClick(Sender: TObject);
begin
  liste.Add(darlehen.speichern);
  liste.SaveToFile('darlehen.txt');
  showmessage('Daten erfolgreich gespeichert!');
  liste.Free;
  darlehen.Free;
end;

procedure TForm1.ButtonCLOSEClick(Sender: TObject);
begin
close;
end;

end.
Unit2:

Delphi-Quellcode:
unit UDarlehen;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Math;

type
 TDarlehen = class
  protected
    Ident: string;
    Darlehensschuld: real;
    Beginn: TDateTime;
    Laufzeit: integer;
    Jahreszins: real;
    A: real;
  public
    constructor create;
    procedure set_DS (Wert: real);
    procedure set_BE (Wert: TDateTime);
    procedure set_LZ (Wert: integer);
    procedure set_JZ (Wert: real);
    function get_mon_Zinsen(): real; virtual;
    function get_mon_Raten(): real; virtual;
    function get_ges_zinsen(): real; virtual;
    function get_ges_zahlung(): real;
    function speichern(): string;
 end;

 TAnnuitaetendarlehen = class(TDarlehen)
   private
   public
    constructor create(id: string);
    function get_mon_Raten(): real; override;
    function get_ges_Zinsen(): real; override;
 end;

 TEndfaelliges_Darlehen = class(TDarlehen)
    public
      constructor create(id: string);
      function get_mon_Zinsen(): real; override;
      function get_ges_Zinsen(): real; override;
 end;

var
darlehen: TDarlehen;


implementation


//*-----*//TDarlehen//*-----*//

constructor TDarlehen.create;
begin
//
end;


procedure TDarlehen.set_DS (Wert: real);
begin
  Darlehensschuld := wert;
end;


procedure TDarlehen.set_BE (Wert: TDateTime);
begin
  Beginn := wert;
end;


procedure TDarlehen.set_LZ (Wert: integer);
begin
  Laufzeit := wert;
end;


procedure TDarlehen.set_JZ (Wert: real);
begin
  Jahreszins := wert;
end;


function TDarlehen.get_mon_Zinsen(): real;
begin
//
end;


function TDarlehen.get_mon_Raten(): real;
begin
//
end;


function TDarlehen.get_ges_zinsen(): real;
begin
//
end;


function TDarlehen.get_ges_zahlung(): real;
begin
  result := Darlehensschuld + get_ges_zinsen;
end;


function TDarlehen.speichern(): string;
begin
  result := Ident + '#' + formatfloat('0.00',darlehensschuld)
                  + '#' + datetostr(Beginn)
                  + '#' + inttostr(Laufzeit)
                  + '#' + formatfloat('0.00',jahreszins)
                  + '#' + formatfloat('0.00',get_mon_zinsen)
                  + '#' + formatfloat('0.00',get_mon_raten)
                  + '#' + formatfloat('0.00',get_ges_zinsen)
                  + '#' + formatfloat('0.00',get_ges_zahlung);
end;


//*-----*//TAnnuitaetendarlehen//*-----*//

constructor TAnnuitaetendarlehen.create(id: string);
begin
  Ident := id;
end;


function TAnnuitaetendarlehen.get_mon_Raten(): real;
begin
  result := Darlehensschuld * power(1 + Jahreszins/1200, Laufzeit)
            *(Jahreszins/1200) /(power(1 + Jahreszins/1200, Laufzeit) -1);
  //Power errechnet aus Base und einen beliebigen Wert die Potenz. Wird als
  //Exponent ein Bruchwert oder ein Wert größer MaxInt angegeben,
  //muss Base größer als 0 sein.
end;


function TAnnuitaetendarlehen.get_ges_Zinsen(): real;
begin
  result := get_mon_Raten * laufzeit - Darlehensschuld;
end;


//*-----*//TEndfaelliges_Darlehen//*-----*//


constructor TEndfaelliges_Darlehen.create(id: string);
begin
  Ident := id;
end;


function TEndfaelliges_Darlehen.get_mon_Zinsen(): real;
begin
  result := get_ges_Zinsen
end;


function TEndfaelliges_Darlehen.get_ges_Zinsen(): real;
begin
  result := Darlehensschuld * power(1 + Jahreszins/100 {wegen Prozent},
            Laufzeit/12) - Darlehensschuld
end;


end.

DeddyH 27. Jan 2016 20:39

AW: Memory-Spiel: Ideen
 
Du hättest aber auch sagen können, dass sich die Suche auf die PDF bezog, ich war gedanklich innerhalb der Entwicklungsumgebung. Andererseits kann man sich tatsächlich fragen, ob es für einen simplen Wert gleich eine Klasse braucht. Zur Verwaltung dieser Werte hingegen würde sich eine solche sehr empfehlen.

XardasLP 27. Jan 2016 20:50

AW: Memory-Spiel: Ideen
 
Das ist halt auch so, an Unit2 sieht man ja, dass wir Klassen anders schreiben und so. Wie soll ich das viel komplexere verstehen. :O ^^

DeddyH 27. Jan 2016 20:57

AW: Memory-Spiel: Ideen
 
Schieb doch erstmal alle Gedanken an Klassen, Panels , Images etc. zur Seite und überlege Dir, was so ein Spiel ausmacht, was man dazu braucht und wie man das generell umsetzen könnte. Z.B. muss man ja 2 Karten irgendwie als zusammengehörig kennzeichnen. Erst nach dieser Grobskizzierung kann man dann ins Detail gehen.

Luckie 27. Jan 2016 20:59

AW: Memory-Spiel: Ideen
 
öHm. Was ist jetzt an deiner Unit2 prinzipielle anders als bei meinen Units/Klassen?

XardasLP 27. Jan 2016 21:26

AW: Memory-Spiel: Ideen
 
Zitat:

Schieb doch erstmal alle Gedanken an Klassen, Panels , Images etc. zur Seite und überlege Dir, was so ein Spiel ausmacht, was man dazu braucht und wie man das generell umsetzen könnte. Z.B. muss man ja 2 Karten irgendwie als zusammengehörig kennzeichnen. Erst nach dieser Grobskizzierung kann man dann ins Detail gehen.
Man kann es auch mit festen Positionen machen und den Zufall weglassen. Dann kann man das auch alles mit if then Anweisungen lösen. Was natürlich viel Quelltext ist, aber das beherrsche ich wenigstens :D

Zitat:

öHm. Was ist jetzt an deiner Unit2 prinzipielle anders als bei meinen Units/Klassen?
Mit Klassen arbeiten war noch nie so meins, vor allem weil unsere Beispiele halt so sind das man sie locker auch ohne eine einzige Klasse lösen kann.
Klar ist die Klasse von Vorteil wenn es dann um bei dem Beispiel evtl. 10 vorhandene Darlehen geht.

DeddyH 27. Jan 2016 21:35

AW: Memory-Spiel: Ideen
 
Was ich eigentlich meinte: unterteile Dein Projekt erst einmal in kleine Teilprobleme. Diese Teilprobleme unterteilst Du wieder in noch kleinere Teilprobleme. Das Ganze wiederholst Du so lange, bis eine weitere Unterteilung keinen Sinn mehr macht. Das alles aber nicht am Computer, sondern ganz antiquiert mit einem Blatt Papier und einem Stift. Diese zig Teilprobleme sollten nun so übersichtlich sein, dass sie sich relativ leicht in Code formulieren lassen. Ob Du das nun mit Klassen löst oder lieber vorwiegend prozedural, bleibt Dir überlassen.

XardasLP 27. Jan 2016 21:42

AW: Memory-Spiel: Ideen
 
Ja das ist schon mal eine gute Idee :)^^

Wir sollen alles machen was wir können. Also einfach da ich ja YT mache ist es kein Problem ein Intro zu gestalten. Oder das man bei der Form die Hintergrundfarben ändern kann. Schriftgrößen, Positionen, Hilfen usw.
solche Mini Verbesserungen machen dann höhere Punktzahlen aus.

Es gab einen der hat 3D Snake gemacht, also in Delphi eine 3D Engine eingebunden und so :D
Naja jedenfalls wusste der Lehrer auch nicht wie sowas geht und hat nur dumm in den Projekten rumgeklickt. Und dann erlaubt der sich am Ende noch Noten zu vergeben. Frechheit.!

XardasLP 30. Jan 2016 22:00

AW: Memory-Spiel: Ideen
 
Hi, also ich will das ja ohne Klassen machen...

Zwei gleiche Karten aufgedeckt geht schon mal.

Delphi-Quellcode:
procedure TFormSpiel.Image1Click(Sender: TObject);
begin
  Image1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_1.jpg');
  B1_Gefunden := 1;
  showmessage('B1_Gefunden ist ' + inttostr(b1_Gefunden));
    if (B1_Gefunden = 1) and (B1_1_Gefunden = 1) then
      begin
      Image1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_1A.jpg');
      Image1_1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_1A.jpg');
      end;
end;
Delphi-Quellcode:
procedure TFormSpiel.Image1_1Click(Sender: TObject);
begin
  Image1_1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_1.jpg');
  B1_1_Gefunden := 1;
    if (B1_1_Gefunden = 1) and (B1_Gefunden = 1) then
    begin
    Image1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_1A.jpg');
    Image1_1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_1A.jpg');
    end
end;
Sieht dann so aus:
https://gyazo.com/d537210bc75f975bf06e68f0d8d9c79a

_________________

Wenn zwei Karten nicht gleich sind erkennt er das auch.
Nun will ich aber, dass er dann trz. 2 Sekunden die Karten offen hält, damit man sich diese merken kann.

Delphi-Quellcode:
procedure TFormSpiel.Image2Click(Sender: TObject);
begin
  Image2.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_2.jpg');
  showmessage('B1_Gefunden ist ' + inttostr(B1_Gefunden));
showmessage('B1_1_Gefunden ist ' + inttostr(B1_1_Gefunden));
  showmessage(inttostr(b2_1_Gefunden));
    if (B1_Gefunden = 0) and (B1_1_Gefunden = 0) or (B2_1_Gefunden = 0) then
      begin
         Timer1.Enabled := True;
    {    showmessage('NEW B1_Gefunden ist ' + inttostr(B1_Gefunden));
        showmessage('NEW B1_1_Gefunden ist ' + inttostr(B1_1_Gefunden));
        B1_NichtGefunden := 1;
          showmessage('2x NEW B1_NichtGefunden ist ' + inttostr(B1_NichtGefunden));
        B1_1_NichtGefunden := 1;
        showmessage('2x NEW B1_NichtGefunden ist ' + inttostr(B1_1_NichtGefunden));
        if (B1_NichtGefunden = 1) and (B1_1_NichtGefunden = 1) then
         begin }
                Image1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Rueckseite.jpg');
                Image1_1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Rueckseite.jpg');
                Image2.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Rueckseite.jpg');
               end
               else
             begin
      //       showmessage(inttostr(B2_1_Gefunden));
             B2_Gefunden := 2;
     //      showmessage(inttostr(B2_Gefunden));
           if (B2_Gefunden = 2) and (B2_1_Gefunden = 2) then begin
            Image2.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_2A.jpg');
            Image2_1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_2A.jpg');
            end
{  Image2.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_2.jpg');
  B2 := 2;
  B1 := 0;
 showmessage(inttostr(b1));
    if (B1 = 0) then
     begin Image1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Rueckseite.jpg');
     Image1_1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Rueckseite.jpg');
     end
    else
     begin
      showmessage('B2_1 ist ' + inttostr(b2_1));
      end }
   end;
   end;
Was stimmt am Timer nicht?
Delphi-Quellcode:
procedure TFormSpiel.Timer1Timer(Sender: TObject);
var i, a: integer;
begin
  if (Timer1.Enabled = True) then
    begin
      i := 0;
        for i := 1000 to 5000 do begin
          a := i + 1000;
        end;
          showmessage(inttostr(a));
          if (a = 5000) then
            begin
            Image2.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Rueckseite.jpg');
            end
            else
              Timer1.Enabled := False;
              if (Timer1.Enabled = False) then showmessage('Zu');
    end;
end;

Ich frage euch, weil ich sonst meist lange vor dem Quelltext hocke und mehr ausprobiere bis es geht. Versuche Fehler mit (showmessage)'s einzuschränken, aber denke mal das ihr ihn schnell findet. :)

Und das (https://gyazo.com/ad61c7687ad9dca6f631ea95eec56bda) muss dann auch noch mit einer Sache vermieden werden, entweder es ist auch eine Zeitspanne dazwischen oder die Img. Dateien zerstören sich nach 2 Sekunden. Mal sehen

frankyboy1974 31. Jan 2016 09:24

AW: Memory-Spiel: Ideen
 
hallo,

ich hab mal versucht deinen Timer-Code zu verstehen:

Delphi-Quellcode:
procedure TFormSpiel.Timer1Timer(Sender: TObject);
var i, a: integer;
begin
  if (Timer1.Enabled = True) then //Muss du abfragen ob der Timer.enabled ist? Wenn er nicht enabled wäre, würde das programm hier doch gar nicht hinkommen; Die Diskussion ob es besser wäre, zu schreiben : 'If Timer1.enabled then begin', spar ich mir hier
    begin
      i := 0; //Die Schleifenvariabel vorher auf null zu setzen, macht keinen Sinn!!!
        for i := 1000 to 5000 do begin //Du setzt i hier doch sowieso auf 1000
          a := i + 1000; // Ich zähle für i von 1000 bis 5000 und a ist gleich i+ 1000????Sinnvoll?
        end;
          showmessage(inttostr(a));//Der Wert wird hier wohl immer gleich 6000 sein
          if (a = 5000) then //Wenn a=5000 (also i=4000) dann wird die Rückseite geladen, da a aber nach der Schleife immer 6000 ist, wird die Rückseite wohl nicht geladen
            begin
            Image2.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Rueckseite.jpg');
            end
            else //Ansonsten wird der Timer disabled; da nur der Else-Block erreicht wird, wird der Timer disabled aber die Rückseite wurde nicht geladen
              Timer1.Enabled := False;
              if (Timer1.Enabled = False) then showmessage('Zu');
    end;
end;
Wenn du mich jetzt fragst, wie man's besser machen sollte:

Ich würde es komplett anders programmieren.

mfg

p80286 31. Jan 2016 10:14

AW: Memory-Spiel: Ideen
 
Zitat:

Zitat von XardasLP (Beitrag 1328825)
Was stimmt am Timer nicht?

Da ich nicht weiß, sondern nur vermute, was Du erreichen willst: das weiß ich nicht!

Ein Timer "feuert" wenn die voreingestellte Zeit abgelaufen ist. Für Dich könnte das heißen, das Dein Programm eine Karte aufdeckt, den Timer einstellt und dann nichts mehr tut. Wenn der Timer "feuert" wird die Karte wieder verdeckt und das Programm läuft weiter.

Übrigens solltest Du Dich vllt. einmal mit dem Programmablaufplan auseinander setzen. Der könnte recht hilfreich sein, zunächst einmal ein wenig Struktur in Dein Programm zu bringen.

Gruß
K-H

P.S.
Wenn der Timer "enabled" ist
Delphi-Quellcode:
 if Timer1.Enabled then
, dann feuert er nach der eingestellten Zeitspanne. Nach
Delphi-Quellcode:
 Timer1.Enabled:=false;
, tut sich da nichts mehr!

XardasLP 31. Jan 2016 16:18

AW: Memory-Spiel: Ideen
 
Zitat:

Wenn du mich jetzt fragst, wie man's besser machen sollte:

Ich würde es komplett anders programmieren.

mfg
Naja der Timer soll egal ob die Karten zueinander passen oder nicht.
Also Ob Karte 1 und Karte 1 oder Karte 1 und Karte 2 die Image-Datei, in der es aufgedeckt ist 2 Sekunden offen halten.

XardasLP 31. Jan 2016 16:19

AW: Memory-Spiel: Ideen
 
Zitat:

Übrigens solltest Du Dich vllt. einmal mit dem Programmablaufplan auseinander setzen. Der könnte recht hilfreich sein, zunächst einmal ein wenig Struktur in Dein Programm zu bringen.
Struktogramme, ne danke :D

Mavarik 4. Feb 2016 11:52

AW: Memory-Spiel: Ideen
 
Zitat:

Zitat von XardasLP (Beitrag 1328889)
Struktogramme, ne danke :D

Genau besser nix lernen und einfach mal mit Copy&Paste für jedes Image per Doppelklick eine Procedure erzeugen.

Und natürlich immer den coolen langen Pfad mit übernehmen.

Selbstverständlich den Dateinamen Fix vorgeben... Will man ja sowieso nicht ändern.

Arrays sind sowieso schlecht... Genau wie Klassen.

Wenn Du hier Fragen stellst, warum liest Du den nicht die Antworten und befolgst die Empfehlungen?

XardasLP 4. Feb 2016 23:09

AW: Memory-Spiel: Ideen
 
Zitat:

Genau besser nix lernen und einfach mal mit Copy&Paste für jedes Image per Doppelklick eine Procedure erzeugen.

Und natürlich immer den coolen langen Pfad mit übernehmen.

Selbstverständlich den Dateinamen Fix vorgeben... Will man ja sowieso nicht ändern.

Arrays sind sowieso schlecht... Genau wie Klassen.

Wenn Du hier Fragen stellst, warum liest Du den nicht die Antworten und befolgst die Empfehlungen?


Haben bisher nur einmal mit Arrays gearbeitet.
Für eine Person reicht es aus, wenn das Spielfeld sich nicht zufällig gestaltet sondern ich 10 Formen vorgebe von der eine zufällig aufgerufen wird.

Klassen sind nicht schlecht, nur ist es bei mir so das ich nur schlechte Punktzahlen durch diese Klassen bekommen habe, weil ich diese nicht verstehe umzusetzen :P

Meinen Timer habe ich z.B. überarbeitet. Ich passe mich auch nur an alle anderen im Jahrgang an, da zeichnet auch keiner ein Struktogramm. :wink:

Mavarik 5. Feb 2016 10:34

AW: Memory-Spiel: Ideen
 
Zitat:

Zitat von XardasLP (Beitrag 1329463)
Ich passe mich auch nur an alle anderen im Jahrgang an, da zeichnet auch keiner ein Struktogramm. :wink:

Ich programmiere jetzt Delphi/Pascal seit ca. 33 Jahren und ich habe erst gestern mir noch einen schematischen Aufbau für die zu programmierende Klasse auf einen Zettel gekritzelt.

Logisch dass ich keine Struktogramme zeichne, dass hat P80286 auch sicherlich nicht gemeint...

p80286 5. Feb 2016 11:28

AW: Memory-Spiel: Ideen
 
Wenn ich mich richtig erinnere schrieb ich ProgrammAblaufPlan. Oder wie ein geschätztes Mitglied dieses Forums schreibt "dann programmiere mal mit Bleistift und Papier".
Es geht ja nicht darum nach irgendeiner Norm ein Schaubild zu erstellen, sondern notwendige Strukturen, Abhängigkeiten und Abläufe einmal für sich selbst darzustellen. Und die gewünschte Logik daran zu überprüfen.
Und ich bin wahrhaftig kein Fan der "Klassen, Klassen über alles"-Bewegung, aber manchmal kommt man nicht daran vorbei, machmal machen sie das Leben einfacher, aber um das zu beurteilen muß man schon wissen was Klassen überhaupt sind und wofür und wie man sie einsetzen kann/muß.
Und wenn Du jetzt die Gelegenheit hast, Dich damit auseinander zu setzen, dann solltest Du das auch tun. Später könnte zu spät sein.

Wenn die anderen das nicht brauchen, deren Sache.

Gruß
K-H

Perlsau 5. Feb 2016 12:36

AW: Memory-Spiel: Ideen
 
Mavarick, ich kann dich darin nur bestätigen: Ohne minimale Aufzeichnungen dessen, was die Anwendung machen soll und wie ich die einzelnen Anforderungen unterteile und umsetze, fange ich schon lange nicht mehr zu programmieren an. Bevor bei mir Delphi für eine neue Anwendung gestartet wird, wird erst einmal OpenOffice gestartet und ein bissel was geschrieben. Ist die Anwendung sehr komplex, starte ich CorelDraw und mache mir eine schematische Darstellung. Spezielle Struktogramm-Software verwende ich nicht, wäre aber sicher interessant.

Mir passiert es häufig, daß ich mitten in der Programmierung (ich arbeite zu Hause) bemerke, daß mir die Konzentration schwerzufallen beginnt, weil ich z.B. schon seit über 10 Stunden ununterbrochen an etwas dran bin. Dann bin ich so frei und lege mich hin, egal welche Tages- oder Nachtzeit. Manchmal kann ich dann nicht gleich einschlafen, weil mir noch Dinge durch den Kopf gehen, und nicht selten kommt es dann vor, daß mir eine Lösung einfällt. Deshalb liegt bei mir vor dem Bett oder manchmal auch im Bett (das ist riesig) immer ein Block mit Bleistift, und der ist schon wieder fast voll. Oft wache ich auch auf und habe eine Idee, die ich dann ebenfalls erstmal notiere, bevor ich aufstehe.

Aber ich versteh auch die Schüler, nicht zuletzt, weil in der EE ein Gymnasiallehrer (Mathematiker) genau darüber schon geschrieben hat: Die Schüler interessiert die Programmiererei meistens nicht wirklich, die wollen gewöhnlich nur eine gute Note. Sogar diese Mimi (eine Schülerin von Mathematiker) in diesem berühmten EE-Thread, wo ein User ihr wochenlang täglich beim Verständnis von Delphi geholfen hat, zeigt nun, da sie für ihre Mühe eine 1 erhalten hat, keinerlei weiteres Interesse mehr am Programmieren. Natürlich wissen die Schüler, die hier und in den anderen Delphi-Foren aufschlagen, auch meist ganz genau, wie sie sich zu verhalten haben, um bei den Leuten hier die eine oder andere Copy&Paste-Fähige Lösung herauszukitzeln. Manche werden auch gleich unverschämt und halten das dann auch noch für Stärke, mit der sie bei ihren Kumpels protzen können: "Guck ma, dem hab ich's aber gezeigt, wa?"

Sir Rufo 5. Feb 2016 13:18

AW: Memory-Spiel: Ideen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Da ich mich gerade mit der StateMachine befasst habe hier ein Zahlen-Paar-Ratespiel mit der StateMachine realisiert.

Der gesamte Ablauf-Plan wird in der StateMachine abgebildet. Der Rest ist nur noch Reaktion auf den Wechsel der States.

Der Quellcode ist keine CopyPaste-Vorlage für den TE, sondern als Anhaltspunkt für den benötigten Ablaufplan gedacht. Im Anhang befindet sich die lauffähige EXE.
Delphi-Quellcode:
unit ZahlenPaareRaten.Forms.MainForm;

interface

uses
  Winapi.Windows, Winapi.Messages,
  System.SysUtils, System.Variants, System.Classes,

  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,

  stateless; // => https://github.com/SirRufo/stateless

type
  TForm1 = class( TForm )
    CardPanel: TGridPanel;
    TriggerTimer: TTimer;
    Label1: TLabel;
    procedure TriggerTimerTimer( Sender: TObject );
    procedure FormShow( Sender: TObject );
    procedure Label1Click( Sender: TObject );
  private type
{$SCOPEDENUMS ON}
    TState    = ( Start, Memoize, Running, FirstDrawn, SecondDrawn, NoMatch, Match, Finished );
    TTrigger  = ( StartGame, Run, DrawCard, DrawNext );
    TCardState = ( Bottom, Up, Hidden );
{$SCOPEDENUMS OFF}
    TStateMachine = TStateMachine<TState, TTrigger>;
  private
    FCardStates        : array [ 0 .. 15 ] of TCardState;
    FCards             : array [ 0 .. 15 ] of Integer;
    FState             : TStateMachine;
    FDrawCardTrigger   : TStateMachine.TTriggerWithParameters<Integer>;
    FTriggerTimerTrigger: TTrigger;
    procedure ConfigureStateMachine( State: TStateMachine );
    procedure ResetGame;
    procedure PresentCards;
    procedure BuildCardControls;
    procedure StartTriggerTimer( Trigger: TTrigger; Interval: Cardinal );
  public
    procedure AfterConstruction; override;
    procedure BeforeDestruction; override;
  published
    procedure CardClick( Sender: TObject );
  end;

var
  Form1: TForm1;

implementation

uses
  Enumerables; // nicht enthalten

{$R *.dfm}
{ TForm1 }

procedure TForm1.AfterConstruction;
begin
  inherited;
  FState          := TStateMachine.Create( TState.Start );
  FDrawCardTrigger := FState.SetTriggerParameters<Integer>( TTrigger.DrawCard );

  ConfigureStateMachine( FState );

  BuildCardControls;
  ResetGame;
end;

procedure TForm1.BeforeDestruction;
begin
  FState.Free;
  inherited;
end;

procedure TForm1.BuildCardControls;
var
  Row   : Integer;
  Col   : Integer;
  Control: TButton;
begin
  for Row  := 0 to CardPanel.RowCollection.Count - 1 do
    for Col := 0 to CardPanel.ColumnCollection.Count - 1 do
      begin
        Control       := TButton.Create( Self );
        Control.Parent := CardPanel;
        Control.Margins.SetBounds( 3, 3, 3, 3 );
        Control.AlignWithMargins := True;
        Control.Align           := alClient;
        Control.OnClick         := CardClick;
      end;
end;

procedure TForm1.CardClick( Sender: TObject );
var
  Control : TControl absolute Sender;
  CardIndex: Integer;
begin
  if not( Sender is TControl )
  then
    Exit;

  CardIndex := CardPanel.ControlCollection.IndexOf( Control );
  if ( CardIndex >= 0 ) and FState.CanFire( TTrigger.DrawCard )
  then
    FState.Fire<Integer>( FDrawCardTrigger, CardIndex );
end;

procedure TForm1.ConfigureStateMachine( State: TStateMachine );
var
  firstCard, secondCard, matchCount: Integer;
begin

  State.Configure( TState.Start )
  {} .OnEntry(
    procedure
    begin
      matchCount := 0;
      ResetGame;
      PresentCards;
    end )
  {} .Permit( TTrigger.StartGame, TState.Memoize )
  {end};

  State.Configure( TState.Memoize )
  {} .OnEntry(
    procedure
    var
      I: Integer;
    begin
      Label1.Caption := 'Merke dir jetzt die Karten';
      for I := 0 to 15 do
        FCardStates[ I ] := TCardState.Up;
      PresentCards;
      StartTriggerTimer( TTrigger.Run, 6000 );
    end )
  {} .OnExit(
    procedure
    var
      I: Integer;
    begin
      for I := 0 to 15 do
        FCardStates[ I ] := TCardState.Bottom;
      PresentCards;
    end )
  {} .Permit( TTrigger.Run, TState.Running )
  {end};

  State.Configure( TState.Running )
  {} .OnEntry(
    procedure
    begin
      Label1.Caption := 'Wähle die erste Karte';
      PresentCards;
    end )
  {} .PermitDynamic<Integer>( FDrawCardTrigger,
    function( const c: Integer ): TState
    begin
      if FCardStates[ c ] = TCardState.Bottom
      then
        Result := TState.FirstDrawn
      else
        Result := TState.Running;
    end )
  {end};

  State.Configure( TState.FirstDrawn )
  {} .OnEntry(
    procedure
    begin
      Label1.Caption := 'Wähle die zweite Karte';
    end )
  {} .OnEntryFrom<Integer>( FDrawCardTrigger,
    procedure( const c: Integer )
    begin
      firstCard := c;
      FCardStates[ c ] := TCardState.Up;
      PresentCards;
    end )
  {} .PermitDynamic<Integer>( FDrawCardTrigger,
    function( const c: Integer ): TState
    begin
      if FCardStates[ c ] = TCardState.Bottom
      then
        begin
          if FCards[ firstCard ] = FCards[ c ]
          then
            Result := TState.Match
          else
            Result := TState.NoMatch;
        end
      else
        Result := TState.FirstDrawn;
    end )
  {end};

  State.Configure( TState.SecondDrawn )
  {} .OnEntryFrom<Integer>( FDrawCardTrigger,
    procedure( const c: Integer )
    begin
      secondCard := c;
      FCardStates[ c ] := TCardState.Up;
      PresentCards;
    end )
  {} .PermitDynamic( TTrigger.DrawNext,
    function( ): TState
    begin
      if matchCount = 8
      then
        Result := TState.Finished
      else
        Result := TState.Running;
    end )
  {end};

  State.Configure( TState.NoMatch )
  {} .SubstateOf( TState.SecondDrawn )
  {} .OnEntry(
    procedure
    begin
      Label1.Caption := 'Schade, die Karten passen nicht';
      StartTriggerTimer( TTrigger.DrawNext, 2000 );
    end )
  {} .OnExit(
    procedure
    begin
      FCardStates[ firstCard ] := TCardState.Bottom;
      FCardStates[ secondCard ] := TCardState.Bottom;
    end )
  {end};

  State.Configure( TState.Match )
  {} .SubstateOf( TState.SecondDrawn )
  {} .OnEntry(
    procedure
    begin
      Label1.Caption := 'Karten passen zusammen';
      Inc( matchCount );
      StartTriggerTimer( TTrigger.DrawNext, 500 );
    end )
  {} .OnExit(
    procedure
    begin
      FCardStates[ firstCard ] := TCardState.Hidden;
      FCardStates[ secondCard ] := TCardState.Hidden;
    end )
  {end};

  State.Configure( TState.Finished )
  {} .OnEntry(
    procedure
    begin
      Label1.Caption := 'Spiel beendet. Klicke hier um nochmal zu spielen';
      PresentCards;
    end )
  {} .Permit( TTrigger.StartGame, TState.Start )
  {end};
end;

procedure TForm1.FormShow( Sender: TObject );
begin
  PresentCards;
end;

procedure TForm1.Label1Click( Sender: TObject );
begin
  if FState.CanFire( TTrigger.StartGame )
  then
    FState.Fire( TTrigger.StartGame );
end;

procedure TForm1.PresentCards;
var
  Item : TCollectionItem;
  Button: TButton;
begin
  for Item in CardPanel.ControlCollection do
    begin
      Button := TButton( TControlItem( Item ).Control );
      case FCardStates[ Item.Index ] of
        TCardState.Bottom:
          begin
            Button.Visible := True;
            Button.Caption := '?';
          end;
        TCardState.Up:
          begin
            Button.Visible := True;
            Button.Caption := IntToStr( FCards[ Item.Index ] );
          end;
        TCardState.Hidden:
          begin
            Button.Visible := False;
          end;
      end;
    end;
end;

procedure TForm1.ResetGame;
var
  I    : Integer;
  lcards: TArray<Integer>;
begin
  lcards := Enumerable
  {} .Range( 1, 99 ) // Zahlen von 1  bis 99
  {} .Shuffle( ) // mischen
  {} .Take( 8 ) // 8 nehmen
  {} .ToArray( ) // in ein Array
  {end};

  lcards := Enumerable
  {} .From<Integer>( lcards ) // die 8 Zahlen von eben
  {} .Concat( lcards ) // mit den 8 Zahlen von eben verbinden (jetzt haben wir die Paare)
  {} .Shuffle( ) // mischen
  {} .ToArray( ) // in ein Array
  {end};

  for I := 0 to 15 do
    begin
      FCardStates[ I ] := TCardState.Bottom;
      FCards[ I ]     := lcards[ I ];
    end;

  Label1.Caption := 'Zum Starten hier drücken';
end;

procedure TForm1.StartTriggerTimer( Trigger: TTrigger; Interval: Cardinal );
begin
  TriggerTimer.Enabled := False;
  TriggerTimer.Interval := Interval;
  FTriggerTimerTrigger := Trigger;
  TriggerTimer.Enabled := True;
end;

procedure TForm1.TriggerTimerTimer( Sender: TObject );
begin
  TriggerTimer.Enabled := False;
  if FState.CanFire( FTriggerTimerTrigger )
  then
    begin
      FState.Fire( FTriggerTimerTrigger );
    end;
end;

end.

Mavarik 5. Feb 2016 14:50

AW: Memory-Spiel: Ideen
 
Zitat:

Zitat von Perlsau (Beitrag 1329515)
Mavari(c)k, ich kann dich darin nur bestätigen: Ohne minimale Aufzeichnungen dessen, was die Anwendung machen soll und wie ich die einzelnen Anforderungen unterteile und umsetze, fange ich schon lange nicht mehr zu programmieren an. Bevor bei mir Delphi für eine neue Anwendung gestartet wird, wird erst einmal OpenOffice gestartet und ein bissel was geschrieben. Ist die Anwendung sehr komplex, starte ich CorelDraw und mache mir eine schematische Darstellung. Spezielle Struktogramm-Software verwende ich nicht, wäre aber sicher interessant.

Den Umweg über OO spare ich mir... Ich deklariere dann eher mal ein

Delphi-Quellcode:
TWirdnochwas = Class
  Procedure Machwas;
end;
Und dokumentiere es mit DocInside. Somit hab ich es nicht vergessen, es kommt ins Repo usw...
Meine Gekritzel finden nur den Weg in die digitale Welt, wenn ich es für andere brauche...

Bjoerk 5. Feb 2016 16:08

AW: Memory-Spiel: Ideen
 
Hatte mit letztens auch ein paar Gedanken gemacht. Voraussetzung wäre aber daß ihr euch etwas mit Klassen beschäftigt (ist nicht sooooo schwer). Was nämlich ein schönes Schmankerl wäre, wenn man die Karten so anordnen könnte, wie man es beim Memoryspiel auch macht (kreuz und quer, auch schräg, Stichworte: tagXFORM, SetGraphicsMode und SetWorldTransform). Wäre aber etwas Programmieraufwand (Prüfen ob die Karten sich überlappen und auf welche Karte geklickt wurde). Zeichnen würde man das Ganze dann in eine Paintbox.

Mal so ins Blaue getippt:

Delphi-Quellcode:
type
  TMemoryCardStatus = (mcsNone, mcsOpen, mcsClosed, mcsPlayer1, mcsPlayer2, ..);

  TMemoryCard = class
  private
    FX: integer;
    FY: integer;
    FWidth: integer;
    FHeight: integer;
    FAlpha: integer;
    FFrontBitmap: TBitmap;
    FBackBitmap: TBitmap;
    FStatus: TMemoryCardStatus;
  public
    property X: integer read FX write FX;
    property Y: integer read FY write FY;
    property Width: integer read FWidth write FWidth;
    property Height: integer read FHeight write FHeight;
    property Alpha: integer read FAlpha write FAlpha;
    property FrontBitmap: TBitmap read FFrontBitmap;
    property BackBitmap: TBitmap read FBackBitmap;
    property Status: TMemoryCardStatus read FStatus write FStatus;
    function Intersect(Value: TMemoryCard): boolean;
    function PtIn(X, Y: integer): boolean;
    procedure Draw(Canvas: TCanvas);
    constructor Create;
    destructor Destroy; override;
  end;

  TMemoryCards = class(TObjectList)
  private
    function GetItems(Index: integer): TMemoryCard;
    function Intersect: boolean;
  public
    procedure Start(CanvasWidth, CanvasHeight: integer);
    procedure Draw(Canvas: TCanvas);
    function IndexOfPtIn(X, Y, CanvasWidth, CanvasHeight: integer): integer;
    property Items[Index: integer]: TMemoryCard read GetItems; default;
  end;

Mavarik 5. Feb 2016 16:22

AW: Memory-Spiel: Ideen
 
Zitat:

Zitat von Bjoerk (Beitrag 1329568)
Was nämlich ein schönes Schmankerl wäre, wenn man die Karten so anordnen könnte, wie man es beim Memoryspiel auch macht (kreuz und quer, auch schräg

So?

Oder wirklich per Hand?

Luckie 5. Feb 2016 16:45

AW: Memory-Spiel: Ideen
 
Nett. ;)

XardasLP 5. Feb 2016 17:48

AW: Memory-Spiel: Ideen
 
Jo nice :D

Wir sollen nur ein Programm machen, es muss gut aussehen und laufen. Ob die Technik, also der Quellcode im Hintergrund optimiert ist oder nicht ist erstmal egal.

Bei uns in der Abschlussprüfung gibt es 2 Wahlaufgaben am Ende.

1) Mit Diagrammen arbeiten und anschließendem Klassen- programmieren.

2) Anbindung einer Datenbank an Delphi (Access), arbeiten OHNE Klassen, arbeiten mit Textdateien


Mehr gibt es bei uns nicht. Dann noch Theorie wie Rechnerarchitektur, Ablaufpläne, GANNT-Diagramme, Wirtschaftsinformatik, Logikpläne, Schaltpläne.

Daraus besteht die Prüfung. 60 Punkte sind Theorie- Fragen und 30 Punkte sind Programmieren.


Mittlerweile komme ich ganz gut voran, und schreibe sogar manchmal was auf einen Zettel :P

Bjoerk 6. Feb 2016 23:40

AW: Memory-Spiel: Ideen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Mavarik (Beitrag 1329575)
Zitat:

Zitat von Bjoerk (Beitrag 1329568)
Was nämlich ein schönes Schmankerl wäre, wenn man die Karten so anordnen könnte, wie man es beim Memoryspiel auch macht (kreuz und quer, auch schräg

So?

Oder wirklich per Hand?

Halt einfach kreuz und quer, wie Kinder sie auch auf den Tisch legen.

Mavarik 7. Feb 2016 00:37

AW: Memory-Spiel: Ideen
 
Zitat:

Zitat von Bjoerk (Beitrag 1329689)
Halt einfach kreuz und quer, wie Kinder sie auch auf den Tisch legen.

Sehr nice...

XardasLP 23. Mär 2016 16:23

AW: Memory-Spiel: Ideen
 
Hallo,

wie kann man ein Image1.Free wieder createn?

Delphi-Quellcode:
FormSpiel.Image1.Create(nil);

Will mein Memory Spiel und alle Komponenten auf einer Form wieder zurück setzen, damit ein neues Spiel beginnen kann.


Hier zum Ansehen:
https://www.youtube.com/watch?v=PnEQ...annel=XardasLP

nahpets 23. Mär 2016 17:04

AW: Memory-Spiel: Ideen
 
Versuchs mal mit
Delphi-Quellcode:
Image1.Picture := Nil;
Allerdings kannst Du dann anschließend nicht mehr auf Picture zugreifen, bis ein neues Bild geladen wurde.

Ansonsten schau mal hier: https://www.benefind.de/web.php?org=...+delphi+source

Ein Image zur Laufzeit zu erstellen müsste so gehen:
Delphi-Quellcode:
Image1 := TImage.Create(FormSpiel);

XardasLP 23. Mär 2016 17:28

AW: Memory-Spiel: Ideen
 
https://gyazo.com/b8b6bd000dfa2902cccf83494c71e311

Nope geht nicht.


Delphi-Quellcode:
FormSpiel.Image1.Free;
FormSpiel.Image1_1.Free;
FormSpiel.Image2.Free;
FormSpiel.Image2_1.Free;
FormSpiel.Image3.Free;
FormSpiel.Image3_1.Free;
FormSpiel.Image4.Free;
FormSpiel.Image4_1.Free;
FormSpiel.Image5.Free;
FormSpiel.Image5_1.Free;
FormSpiel.Image6.Free;
FormSpiel.Image6_1.Free;
FormSpiel.Image7.Free;
FormSpiel.Image7_1.Free;
FormSpiel.Image8.Free;
FormSpiel.Image8_1.Free;

FormSpiel.Image1 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image1_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image2 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image2_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image3 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image3_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image4 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image4_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image5 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image5_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image6 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image6_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image7 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image7_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image8 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image8_1 := FormSpiel.Image1_1.Create(FormSpiel);

Luckie 23. Mär 2016 17:35

AW: Memory-Spiel: Ideen
 
Zitat:

Zitat von XardasLP (Beitrag 1333672)
Nope geht nicht.

Immer diese wahnsinnig aussagekräftigen Fehlerbeschreibungen. :roll: Sollen wir jetzt raten, was nicht geht und welche Fehlermeldung kommt? :roll:

himitsu 23. Mär 2016 17:41

AW: Memory-Spiel: Ideen
 
Gute Fehlerbeschreibung (und nein, ein externes Bild zählt nicht) und dann nicht lesen können.
PS: Bilder "hier" anhängen. Und Strg+C, wenn der Fehlerdialog aktiv ist und dann per Strg+V hier als TEXT rein.

Zitat:

Zitat von nahpets (Beitrag 1333670)
Ein Image zur Laufzeit zu erstellen müsste so gehen:
Delphi-Quellcode:
Image1 := TImage.Create(FormSpiel);

Ja, der Picture.Graphic ein NIL zuzuweisen funktioniert garantiert.

Und wo bitte liegt der Code, daß heir ständig auf FormSpiel zugegriffen werden muß?

nahpets 23. Mär 2016 18:04

AW: Memory-Spiel: Ideen
 
Ich schrieb sinngemäß
Delphi-Quellcode:
FormSpiel.Image1 := TImage.Create(FormSpiel);
und nicht
Delphi-Quellcode:
FormSpiel.Image1 := FormSpiel.Image1.Create(FormSpiel);
Anstatt die Images freizugeben und anschließend neu zu erstellen, erscheint die Methode
Zitat:

Zitat von himitsu
Ja, der Picture.Graphic ein NIL zuzuweisen funktioniert garantiert.

sinnvoller.

XardasLP 23. Mär 2016 19:31

AW: Memory-Spiel: Ideen
 
Wenn man sich das Video (https://www.youtube.com/watch?v=PnEQdamZbak) angesehen hätte, würde man ja sehen, dass das Programm nachdem das Spiel gewonnen wurde ein neues Spiel starten soll und dazu die FormSpiel komplett zurückgesetzt werden muss.

Zitat:

Und wo bitte liegt der Code, daß heir ständig auf FormSpiel zugegriffen werden muß?
Also muss die FormGewonnen auf Elemente der FormSpiel zugreifen und diese löschen und wieder .create/n.

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Access violation at address 00483BCF in module 'Project1.exe'. Read of address 00000000'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------

Luckie 23. Mär 2016 19:35

AW: Memory-Spiel: Ideen
 
Ach, der Link war die Fehlermeldung? :?

XardasLP 23. Mär 2016 19:54

AW: Memory-Spiel: Ideen
 
Liste der Anhänge anzeigen (Anzahl: 3)
Jop. ^^

Glaube mit dem kann man auch nicht wirklich viel anfangen. :P

Habe halt alles ohne Klassen programmiert. Aber einmal den richtigen Quellcode, war es nur kopieren/einfügen und Variablen ändern.

Also Delphi_1.jpg: Wenn man auf "Spiel starten" klickt passiert folgendes:

Delphi-Quellcode:
procedure TFormEinstellungen.ButtonStartClick(Sender: TObject);
var
  zahl: integer;
  sl: Tstringlist;
  Kartenposition: integer;
  Position1: integer;
  Position1_1: integer;
  Position2: integer;
  Position2_1: integer;
  Position3: integer;
  Position3_1: integer;
  Position4: integer;
  Position4_1: integer;
  Position5: integer;
  Position5_1: integer;
  Position6: integer;
  Position6_1: integer;
  Position7: integer;
  Position7_1: integer;
  Position8: integer;
  Position8_1: integer;
begin

if (RBE.Checked = False) and (RBM.Checked = False)
then begin showmessage('Wähle bitte einen Spielmodus aus!');
end
else
begin

if (RBZ.Checked = False) and (RBB.Checked = False)
then begin showmessage('Wähle bitte ein Karten- Motiv aus!');
end
else
begin

if (Edit_Timer_UNAUFGEDECKT.Text = '')
then begin showmessage('Bitte wähle die Sekunden aus, nachdem ein falsch gefundenes Kartenpaar verdeckt werden soll!');
end
else
begin
if (RBE.Checked = True) or (RBM.Checked = True) and (RBZ.Checked = True) or
(RBB.Checked = True) and (RBja.Checked = True) or (RBnein.Checked = True)
then begin
FormSpiel.Show;
FormEinstellungen.Visible := False;
FormSpiel.Edit_Einstellung_Timer_LOESCHEN.Text := inttostr(LOESCHEN_JA);
FormSpiel.Timer_LOESCHEN.Interval := strtoint(Edit_Timer_LOESCHEN.Text);
FormSpiel.Timer_UNAUFGEDECKT.Interval := strtoint(Edit_Timer_UNAUFGEDECKT.Text);

randomize;
  sl := tstringlist.Create;
for zahl :=1 to 16 do
  begin
  sl.Insert(random(sl.count),inttostr(zahl));
  end;
Memo_Stringlist.Lines := sl;
Position1 := strtoint(Memo_Stringlist.Lines[0]);
Position1_1 := strtoint(Memo_Stringlist.Lines[1]);
Position2 := strtoint(Memo_Stringlist.Lines[2]);
Position2_1 := strtoint(Memo_Stringlist.Lines[3]);
Position3 := strtoint(Memo_Stringlist.Lines[4]);
Position3_1 := strtoint(Memo_Stringlist.Lines[5]);
Position4 := strtoint(Memo_Stringlist.Lines[6]);
Position4_1 := strtoint(Memo_Stringlist.Lines[7]);
Position5 := strtoint(Memo_Stringlist.Lines[8]);
Position5_1 := strtoint(Memo_Stringlist.Lines[9]);
Position6 := strtoint(Memo_Stringlist.Lines[10]);
Position6_1 := strtoint(Memo_Stringlist.Lines[11]);
Position7 := strtoint(Memo_Stringlist.Lines[12]);
Position7_1 := strtoint(Memo_Stringlist.Lines[13]);
Position8 := strtoint(Memo_Stringlist.Lines[14]);
Position8_1 := strtoint(Memo_Stringlist.Lines[15]);

//__________________________________________________//
//*=====*=====*=====*//Position1//*=====*=====*=====*//

case Position1 of
1: FormSpiel.Image1.Left := 24;
2: FormSpiel.Image1.Left := 160;
3: FormSpiel.Image1.Left := 296;
4: FormSpiel.Image1.Left := 432;
5: FormSpiel.Image1.Left := 24;
6: FormSpiel.Image1.Left := 160;
7: FormSpiel.Image1.Left := 296;
8: FormSpiel.Image1.Left := 432;
9: FormSpiel.Image1.Left := 24;
10: FormSpiel.Image1.Left := 160;
11: FormSpiel.Image1.Left := 296;
12: FormSpiel.Image1.Left := 432;
13: FormSpiel.Image1.Left := 24;
14: FormSpiel.Image1.Left := 160;
15: FormSpiel.Image1.Left := 296;
16: FormSpiel.Image1.Left := 432;
end;

case Position1 of
1: FormSpiel.Image1.Top := 104;
2: FormSpiel.Image1.Top := 104;
3: FormSpiel.Image1.Top := 104;
4: FormSpiel.Image1.Top := 104;
5: FormSpiel.Image1.Top := 240;
6: FormSpiel.Image1.Top := 240;
7: FormSpiel.Image1.Top := 240;
8: FormSpiel.Image1.Top := 240;
9: FormSpiel.Image1.Top := 376;
10: FormSpiel.Image1.Top := 376;
11: FormSpiel.Image1.Top := 376;
12: FormSpiel.Image1.Top := 376;
13: FormSpiel.Image1.Top := 512;
14: FormSpiel.Image1.Top := 512;
15: FormSpiel.Image1.Top := 512;
16: FormSpiel.Image1.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position1_1//*=====*=====*=====*//

case Position1_1 of
1: FormSpiel.Image1_1.Left := 24;
2: FormSpiel.Image1_1.Left := 160;
3: FormSpiel.Image1_1.Left := 296;
4: FormSpiel.Image1_1.Left := 432;
5: FormSpiel.Image1_1.Left := 24;
6: FormSpiel.Image1_1.Left := 160;
7: FormSpiel.Image1_1.Left := 296;
8: FormSpiel.Image1_1.Left := 432;
9: FormSpiel.Image1_1.Left := 24;
10: FormSpiel.Image1_1.Left := 160;
11: FormSpiel.Image1_1.Left := 296;
12: FormSpiel.Image1_1.Left := 432;
13: FormSpiel.Image1_1.Left := 24;
14: FormSpiel.Image1_1.Left := 160;
15: FormSpiel.Image1_1.Left := 296;
16: FormSpiel.Image1_1.Left := 432;
end;

case Position1_1 of
1: FormSpiel.Image1_1.Top := 104;
2: FormSpiel.Image1_1.Top := 104;
3: FormSpiel.Image1_1.Top := 104;
4: FormSpiel.Image1_1.Top := 104;
5: FormSpiel.Image1_1.Top := 240;
6: FormSpiel.Image1_1.Top := 240;
7: FormSpiel.Image1_1.Top := 240;
8: FormSpiel.Image1_1.Top := 240;
9: FormSpiel.Image1_1.Top := 376;
10: FormSpiel.Image1_1.Top := 376;
11: FormSpiel.Image1_1.Top := 376;
12: FormSpiel.Image1_1.Top := 376;
13: FormSpiel.Image1_1.Top := 512;
14: FormSpiel.Image1_1.Top := 512;
15: FormSpiel.Image1_1.Top := 512;
16: FormSpiel.Image1_1.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position2//*=====*=====*=====*//

case Position2 of
1: FormSpiel.Image2.Left := 24;
2: FormSpiel.Image2.Left := 160;
3: FormSpiel.Image2.Left := 296;
4: FormSpiel.Image2.Left := 432;
5: FormSpiel.Image2.Left := 24;
6: FormSpiel.Image2.Left := 160;
7: FormSpiel.Image2.Left := 296;
8: FormSpiel.Image2.Left := 432;
9: FormSpiel.Image2.Left := 24;
10: FormSpiel.Image2.Left := 160;
11: FormSpiel.Image2.Left := 296;
12: FormSpiel.Image2.Left := 432;
13: FormSpiel.Image2.Left := 24;
14: FormSpiel.Image2.Left := 160;
15: FormSpiel.Image2.Left := 296;
16: FormSpiel.Image2.Left := 432;
end;

case Position2 of
1: FormSpiel.Image2.Top := 104;
2: FormSpiel.Image2.Top := 104;
3: FormSpiel.Image2.Top := 104;
4: FormSpiel.Image2.Top := 104;
5: FormSpiel.Image2.Top := 240;
6: FormSpiel.Image2.Top := 240;
7: FormSpiel.Image2.Top := 240;
8: FormSpiel.Image2.Top := 240;
9: FormSpiel.Image2.Top := 376;
10: FormSpiel.Image2.Top := 376;
11: FormSpiel.Image2.Top := 376;
12: FormSpiel.Image2.Top := 376;
13: FormSpiel.Image2.Top := 512;
14: FormSpiel.Image2.Top := 512;
15: FormSpiel.Image2.Top := 512;
16: FormSpiel.Image2.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position2_1//*=====*=====*=====*//

case Position2_1 of
1: FormSpiel.Image2_1.Left := 24;
2: FormSpiel.Image2_1.Left := 160;
3: FormSpiel.Image2_1.Left := 296;
4: FormSpiel.Image2_1.Left := 432;
5: FormSpiel.Image2_1.Left := 24;
6: FormSpiel.Image2_1.Left := 160;
7: FormSpiel.Image2_1.Left := 296;
8: FormSpiel.Image2_1.Left := 432;
9: FormSpiel.Image2_1.Left := 24;
10: FormSpiel.Image2_1.Left := 160;
11: FormSpiel.Image2_1.Left := 296;
12: FormSpiel.Image2_1.Left := 432;
13: FormSpiel.Image2_1.Left := 24;
14: FormSpiel.Image2_1.Left := 160;
15: FormSpiel.Image2_1.Left := 296;
16: FormSpiel.Image2_1.Left := 432;
end;

case Position2_1 of
1: FormSpiel.Image2_1.Top := 104;
2: FormSpiel.Image2_1.Top := 104;
3: FormSpiel.Image2_1.Top := 104;
4: FormSpiel.Image2_1.Top := 104;
5: FormSpiel.Image2_1.Top := 240;
6: FormSpiel.Image2_1.Top := 240;
7: FormSpiel.Image2_1.Top := 240;
8: FormSpiel.Image2_1.Top := 240;
9: FormSpiel.Image2_1.Top := 376;
10: FormSpiel.Image2_1.Top := 376;
11: FormSpiel.Image2_1.Top := 376;
12: FormSpiel.Image2_1.Top := 376;
13: FormSpiel.Image2_1.Top := 512;
14: FormSpiel.Image2_1.Top := 512;
15: FormSpiel.Image2_1.Top := 512;
16: FormSpiel.Image2_1.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position3//*=====*=====*=====*//

case Position3 of
1: FormSpiel.Image3.Left := 24;
2: FormSpiel.Image3.Left := 160;
3: FormSpiel.Image3.Left := 296;
4: FormSpiel.Image3.Left := 432;
5: FormSpiel.Image3.Left := 24;
6: FormSpiel.Image3.Left := 160;
7: FormSpiel.Image3.Left := 296;
8: FormSpiel.Image3.Left := 432;
9: FormSpiel.Image3.Left := 24;
10: FormSpiel.Image3.Left := 160;
11: FormSpiel.Image3.Left := 296;
12: FormSpiel.Image3.Left := 432;
13: FormSpiel.Image3.Left := 24;
14: FormSpiel.Image3.Left := 160;
15: FormSpiel.Image3.Left := 296;
16: FormSpiel.Image3.Left := 432;
end;

case Position3 of
1: FormSpiel.Image3.Top := 104;
2: FormSpiel.Image3.Top := 104;
3: FormSpiel.Image3.Top := 104;
4: FormSpiel.Image3.Top := 104;
5: FormSpiel.Image3.Top := 240;
6: FormSpiel.Image3.Top := 240;
7: FormSpiel.Image3.Top := 240;
8: FormSpiel.Image3.Top := 240;
9: FormSpiel.Image3.Top := 376;
10: FormSpiel.Image3.Top := 376;
11: FormSpiel.Image3.Top := 376;
12: FormSpiel.Image3.Top := 376;
13: FormSpiel.Image3.Top := 512;
14: FormSpiel.Image3.Top := 512;
15: FormSpiel.Image3.Top := 512;
16: FormSpiel.Image3.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position3_1//*=====*=====*=====*//

case Position3_1 of
1: FormSpiel.Image3_1.Left := 24;
2: FormSpiel.Image3_1.Left := 160;
3: FormSpiel.Image3_1.Left := 296;
4: FormSpiel.Image3_1.Left := 432;
5: FormSpiel.Image3_1.Left := 24;
6: FormSpiel.Image3_1.Left := 160;
7: FormSpiel.Image3_1.Left := 296;
8: FormSpiel.Image3_1.Left := 432;
9: FormSpiel.Image3_1.Left := 24;
10: FormSpiel.Image3_1.Left := 160;
11: FormSpiel.Image3_1.Left := 296;
12: FormSpiel.Image3_1.Left := 432;
13: FormSpiel.Image3_1.Left := 24;
14: FormSpiel.Image3_1.Left := 160;
15: FormSpiel.Image3_1.Left := 296;
16: FormSpiel.Image3_1.Left := 432;
end;

case Position3_1 of
1: FormSpiel.Image3_1.Top := 104;
2: FormSpiel.Image3_1.Top := 104;
3: FormSpiel.Image3_1.Top := 104;
4: FormSpiel.Image3_1.Top := 104;
5: FormSpiel.Image3_1.Top := 240;
6: FormSpiel.Image3_1.Top := 240;
7: FormSpiel.Image3_1.Top := 240;
8: FormSpiel.Image3_1.Top := 240;
9: FormSpiel.Image3_1.Top := 376;
10: FormSpiel.Image3_1.Top := 376;
11: FormSpiel.Image3_1.Top := 376;
12: FormSpiel.Image3_1.Top := 376;
13: FormSpiel.Image3_1.Top := 512;
14: FormSpiel.Image3_1.Top := 512;
15: FormSpiel.Image3_1.Top := 512;
16: FormSpiel.Image3_1.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position4//*=====*=====*=====*//

case Position4 of
1: FormSpiel.Image4.Left := 24;
2: FormSpiel.Image4.Left := 160;
3: FormSpiel.Image4.Left := 296;
4: FormSpiel.Image4.Left := 432;
5: FormSpiel.Image4.Left := 24;
6: FormSpiel.Image4.Left := 160;
7: FormSpiel.Image4.Left := 296;
8: FormSpiel.Image4.Left := 432;
9: FormSpiel.Image4.Left := 24;
10: FormSpiel.Image4.Left := 160;
11: FormSpiel.Image4.Left := 296;
12: FormSpiel.Image4.Left := 432;
13: FormSpiel.Image4.Left := 24;
14: FormSpiel.Image4.Left := 160;
15: FormSpiel.Image4.Left := 296;
16: FormSpiel.Image4.Left := 432;
end;

case Position4 of
1: FormSpiel.Image4.Top := 104;
2: FormSpiel.Image4.Top := 104;
3: FormSpiel.Image4.Top := 104;
4: FormSpiel.Image4.Top := 104;
5: FormSpiel.Image4.Top := 240;
6: FormSpiel.Image4.Top := 240;
7: FormSpiel.Image4.Top := 240;
8: FormSpiel.Image4.Top := 240;
9: FormSpiel.Image4.Top := 376;
10: FormSpiel.Image4.Top := 376;
11: FormSpiel.Image4.Top := 376;
12: FormSpiel.Image4.Top := 376;
13: FormSpiel.Image4.Top := 512;
14: FormSpiel.Image4.Top := 512;
15: FormSpiel.Image4.Top := 512;
16: FormSpiel.Image4.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position4_1//*=====*=====*=====*//

case Position4_1 of
1: FormSpiel.Image4_1.Left := 24;
2: FormSpiel.Image4_1.Left := 160;
3: FormSpiel.Image4_1.Left := 296;
4: FormSpiel.Image4_1.Left := 432;
5: FormSpiel.Image4_1.Left := 24;
6: FormSpiel.Image4_1.Left := 160;
7: FormSpiel.Image4_1.Left := 296;
8: FormSpiel.Image4_1.Left := 432;
9: FormSpiel.Image4_1.Left := 24;
10: FormSpiel.Image4_1.Left := 160;
11: FormSpiel.Image4_1.Left := 296;
12: FormSpiel.Image4_1.Left := 432;
13: FormSpiel.Image4_1.Left := 24;
14: FormSpiel.Image4_1.Left := 160;
15: FormSpiel.Image4_1.Left := 296;
16: FormSpiel.Image4_1.Left := 432;
end;

case Position4_1 of
1: FormSpiel.Image4_1.Top := 104;
2: FormSpiel.Image4_1.Top := 104;
3: FormSpiel.Image4_1.Top := 104;
4: FormSpiel.Image4_1.Top := 104;
5: FormSpiel.Image4_1.Top := 240;
6: FormSpiel.Image4_1.Top := 240;
7: FormSpiel.Image4_1.Top := 240;
8: FormSpiel.Image4_1.Top := 240;
9: FormSpiel.Image4_1.Top := 376;
10: FormSpiel.Image4_1.Top := 376;
11: FormSpiel.Image4_1.Top := 376;
12: FormSpiel.Image4_1.Top := 376;
13: FormSpiel.Image4_1.Top := 512;
14: FormSpiel.Image4_1.Top := 512;
15: FormSpiel.Image4_1.Top := 512;
16: FormSpiel.Image4_1.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position5//*=====*=====*=====*//

case Position5 of
1: FormSpiel.Image5.Left := 24;
2: FormSpiel.Image5.Left := 160;
3: FormSpiel.Image5.Left := 296;
4: FormSpiel.Image5.Left := 432;
5: FormSpiel.Image5.Left := 24;
6: FormSpiel.Image5.Left := 160;
7: FormSpiel.Image5.Left := 296;
8: FormSpiel.Image5.Left := 432;
9: FormSpiel.Image5.Left := 24;
10: FormSpiel.Image5.Left := 160;
11: FormSpiel.Image5.Left := 296;
12: FormSpiel.Image5.Left := 432;
13: FormSpiel.Image5.Left := 24;
14: FormSpiel.Image5.Left := 160;
15: FormSpiel.Image5.Left := 296;
16: FormSpiel.Image5.Left := 432;
end;

case Position5 of
1: FormSpiel.Image5.Top := 104;
2: FormSpiel.Image5.Top := 104;
3: FormSpiel.Image5.Top := 104;
4: FormSpiel.Image5.Top := 104;
5: FormSpiel.Image5.Top := 240;
6: FormSpiel.Image5.Top := 240;
7: FormSpiel.Image5.Top := 240;
8: FormSpiel.Image5.Top := 240;
9: FormSpiel.Image5.Top := 376;
10: FormSpiel.Image5.Top := 376;
11: FormSpiel.Image5.Top := 376;
12: FormSpiel.Image5.Top := 376;
13: FormSpiel.Image5.Top := 512;
14: FormSpiel.Image5.Top := 512;
15: FormSpiel.Image5.Top := 512;
16: FormSpiel.Image5.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position5_1//*=====*=====*=====*//

case Position5_1 of
1: FormSpiel.Image5_1.Left := 24;
2: FormSpiel.Image5_1.Left := 160;
3: FormSpiel.Image5_1.Left := 296;
4: FormSpiel.Image5_1.Left := 432;
5: FormSpiel.Image5_1.Left := 24;
6: FormSpiel.Image5_1.Left := 160;
7: FormSpiel.Image5_1.Left := 296;
8: FormSpiel.Image5_1.Left := 432;
9: FormSpiel.Image5_1.Left := 24;
10: FormSpiel.Image5_1.Left := 160;
11: FormSpiel.Image5_1.Left := 296;
12: FormSpiel.Image5_1.Left := 432;
13: FormSpiel.Image5_1.Left := 24;
14: FormSpiel.Image5_1.Left := 160;
15: FormSpiel.Image5_1.Left := 296;
16: FormSpiel.Image5_1.Left := 432;
end;

case Position5_1 of
1: FormSpiel.Image5_1.Top := 104;
2: FormSpiel.Image5_1.Top := 104;
3: FormSpiel.Image5_1.Top := 104;
4: FormSpiel.Image5_1.Top := 104;
5: FormSpiel.Image5_1.Top := 240;
6: FormSpiel.Image5_1.Top := 240;
7: FormSpiel.Image5_1.Top := 240;
8: FormSpiel.Image5_1.Top := 240;
9: FormSpiel.Image5_1.Top := 376;
10: FormSpiel.Image5_1.Top := 376;
11: FormSpiel.Image5_1.Top := 376;
12: FormSpiel.Image5_1.Top := 376;
13: FormSpiel.Image5_1.Top := 512;
14: FormSpiel.Image5_1.Top := 512;
15: FormSpiel.Image5_1.Top := 512;
16: FormSpiel.Image5_1.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position6//*=====*=====*=====*//

case Position6 of
1: FormSpiel.Image6.Left := 24;
2: FormSpiel.Image6.Left := 160;
3: FormSpiel.Image6.Left := 296;
4: FormSpiel.Image6.Left := 432;
5: FormSpiel.Image6.Left := 24;
6: FormSpiel.Image6.Left := 160;
7: FormSpiel.Image6.Left := 296;
8: FormSpiel.Image6.Left := 432;
9: FormSpiel.Image6.Left := 24;
10: FormSpiel.Image6.Left := 160;
11: FormSpiel.Image6.Left := 296;
12: FormSpiel.Image6.Left := 432;
13: FormSpiel.Image6.Left := 24;
14: FormSpiel.Image6.Left := 160;
15: FormSpiel.Image6.Left := 296;
16: FormSpiel.Image6.Left := 432;
end;

case Position6 of
1: FormSpiel.Image6.Top := 104;
2: FormSpiel.Image6.Top := 104;
3: FormSpiel.Image6.Top := 104;
4: FormSpiel.Image6.Top := 104;
5: FormSpiel.Image6.Top := 240;
6: FormSpiel.Image6.Top := 240;
7: FormSpiel.Image6.Top := 240;
8: FormSpiel.Image6.Top := 240;
9: FormSpiel.Image6.Top := 376;
10: FormSpiel.Image6.Top := 376;
11: FormSpiel.Image6.Top := 376;
12: FormSpiel.Image6.Top := 376;
13: FormSpiel.Image6.Top := 512;
14: FormSpiel.Image6.Top := 512;
15: FormSpiel.Image6.Top := 512;
16: FormSpiel.Image6.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position6_1//*=====*=====*=====*//

case Position6_1 of
1: FormSpiel.Image6_1.Left := 24;
2: FormSpiel.Image6_1.Left := 160;
3: FormSpiel.Image6_1.Left := 296;
4: FormSpiel.Image6_1.Left := 432;
5: FormSpiel.Image6_1.Left := 24;
6: FormSpiel.Image6_1.Left := 160;
7: FormSpiel.Image6_1.Left := 296;
8: FormSpiel.Image6_1.Left := 432;
9: FormSpiel.Image6_1.Left := 24;
10: FormSpiel.Image6_1.Left := 160;
11: FormSpiel.Image6_1.Left := 296;
12: FormSpiel.Image6_1.Left := 432;
13: FormSpiel.Image6_1.Left := 24;
14: FormSpiel.Image6_1.Left := 160;
15: FormSpiel.Image6_1.Left := 296;
16: FormSpiel.Image6_1.Left := 432;
end;

case Position6_1 of
1: FormSpiel.Image6_1.Top := 104;
2: FormSpiel.Image6_1.Top := 104;
3: FormSpiel.Image6_1.Top := 104;
4: FormSpiel.Image6_1.Top := 104;
5: FormSpiel.Image6_1.Top := 240;
6: FormSpiel.Image6_1.Top := 240;
7: FormSpiel.Image6_1.Top := 240;
8: FormSpiel.Image6_1.Top := 240;
9: FormSpiel.Image6_1.Top := 376;
10: FormSpiel.Image6_1.Top := 376;
11: FormSpiel.Image6_1.Top := 376;
12: FormSpiel.Image6_1.Top := 376;
13: FormSpiel.Image6_1.Top := 512;
14: FormSpiel.Image6_1.Top := 512;
15: FormSpiel.Image6_1.Top := 512;
16: FormSpiel.Image6_1.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position7//*=====*=====*=====*//

case Position7 of
1: FormSpiel.Image7.Left := 24;
2: FormSpiel.Image7.Left := 160;
3: FormSpiel.Image7.Left := 296;
4: FormSpiel.Image7.Left := 432;
5: FormSpiel.Image7.Left := 24;
6: FormSpiel.Image7.Left := 160;
7: FormSpiel.Image7.Left := 296;
8: FormSpiel.Image7.Left := 432;
9: FormSpiel.Image7.Left := 24;
10: FormSpiel.Image7.Left := 160;
11: FormSpiel.Image7.Left := 296;
12: FormSpiel.Image7.Left := 432;
13: FormSpiel.Image7.Left := 24;
14: FormSpiel.Image7.Left := 160;
15: FormSpiel.Image7.Left := 296;
16: FormSpiel.Image7.Left := 432;
end;

case Position7 of
1: FormSpiel.Image7.Top := 104;
2: FormSpiel.Image7.Top := 104;
3: FormSpiel.Image7.Top := 104;
4: FormSpiel.Image7.Top := 104;
5: FormSpiel.Image7.Top := 240;
6: FormSpiel.Image7.Top := 240;
7: FormSpiel.Image7.Top := 240;
8: FormSpiel.Image7.Top := 240;
9: FormSpiel.Image7.Top := 376;
10: FormSpiel.Image7.Top := 376;
11: FormSpiel.Image7.Top := 376;
12: FormSpiel.Image7.Top := 376;
13: FormSpiel.Image7.Top := 512;
14: FormSpiel.Image7.Top := 512;
15: FormSpiel.Image7.Top := 512;
16: FormSpiel.Image7.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position6_1//*=====*=====*=====*//

case Position7_1 of
1: FormSpiel.Image7_1.Left := 24;
2: FormSpiel.Image7_1.Left := 160;
3: FormSpiel.Image7_1.Left := 296;
4: FormSpiel.Image7_1.Left := 432;
5: FormSpiel.Image7_1.Left := 24;
6: FormSpiel.Image7_1.Left := 160;
7: FormSpiel.Image7_1.Left := 296;
8: FormSpiel.Image7_1.Left := 432;
9: FormSpiel.Image7_1.Left := 24;
10: FormSpiel.Image7_1.Left := 160;
11: FormSpiel.Image7_1.Left := 296;
12: FormSpiel.Image7_1.Left := 432;
13: FormSpiel.Image7_1.Left := 24;
14: FormSpiel.Image7_1.Left := 160;
15: FormSpiel.Image7_1.Left := 296;
16: FormSpiel.Image7_1.Left := 432;
end;

case Position7_1 of
1: FormSpiel.Image7_1.Top := 104;
2: FormSpiel.Image7_1.Top := 104;
3: FormSpiel.Image7_1.Top := 104;
4: FormSpiel.Image7_1.Top := 104;
5: FormSpiel.Image7_1.Top := 240;
6: FormSpiel.Image7_1.Top := 240;
7: FormSpiel.Image7_1.Top := 240;
8: FormSpiel.Image7_1.Top := 240;
9: FormSpiel.Image7_1.Top := 376;
10: FormSpiel.Image7_1.Top := 376;
11: FormSpiel.Image7_1.Top := 376;
12: FormSpiel.Image7_1.Top := 376;
13: FormSpiel.Image7_1.Top := 512;
14: FormSpiel.Image7_1.Top := 512;
15: FormSpiel.Image7_1.Top := 512;
16: FormSpiel.Image7_1.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position8//*=====*=====*=====*//

case Position8 of
1: FormSpiel.Image8.Left := 24;
2: FormSpiel.Image8.Left := 160;
3: FormSpiel.Image8.Left := 296;
4: FormSpiel.Image8.Left := 432;
5: FormSpiel.Image8.Left := 24;
6: FormSpiel.Image8.Left := 160;
7: FormSpiel.Image8.Left := 296;
8: FormSpiel.Image8.Left := 432;
9: FormSpiel.Image8.Left := 24;
10: FormSpiel.Image8.Left := 160;
11: FormSpiel.Image8.Left := 296;
12: FormSpiel.Image8.Left := 432;
13: FormSpiel.Image8.Left := 24;
14: FormSpiel.Image8.Left := 160;
15: FormSpiel.Image8.Left := 296;
16: FormSpiel.Image8.Left := 432;
end;

case Position8 of
1: FormSpiel.Image8.Top := 104;
2: FormSpiel.Image8.Top := 104;
3: FormSpiel.Image8.Top := 104;
4: FormSpiel.Image8.Top := 104;
5: FormSpiel.Image8.Top := 240;
6: FormSpiel.Image8.Top := 240;
7: FormSpiel.Image8.Top := 240;
8: FormSpiel.Image8.Top := 240;
9: FormSpiel.Image8.Top := 376;
10: FormSpiel.Image8.Top := 376;
11: FormSpiel.Image8.Top := 376;
12: FormSpiel.Image8.Top := 376;
13: FormSpiel.Image8.Top := 512;
14: FormSpiel.Image8.Top := 512;
15: FormSpiel.Image8.Top := 512;
16: FormSpiel.Image8.Top := 512;
end;


//__________________________________________________//
//*=====*=====*=====*//Position8_1//*=====*=====*=====*//

case Position8_1 of
1: FormSpiel.Image8_1.Left := 24;
2: FormSpiel.Image8_1.Left := 160;
3: FormSpiel.Image8_1.Left := 296;
4: FormSpiel.Image8_1.Left := 432;
5: FormSpiel.Image8_1.Left := 24;
6: FormSpiel.Image8_1.Left := 160;
7: FormSpiel.Image8_1.Left := 296;
8: FormSpiel.Image8_1.Left := 432;
9: FormSpiel.Image8_1.Left := 24;
10: FormSpiel.Image8_1.Left := 160;
11: FormSpiel.Image8_1.Left := 296;
12: FormSpiel.Image8_1.Left := 432;
13: FormSpiel.Image8_1.Left := 24;
14: FormSpiel.Image8_1.Left := 160;
15: FormSpiel.Image8_1.Left := 296;
16: FormSpiel.Image8_1.Left := 432;
end;

case Position8_1 of
1: FormSpiel.Image8_1.Top := 104;
2: FormSpiel.Image8_1.Top := 104;
3: FormSpiel.Image8_1.Top := 104;
4: FormSpiel.Image8_1.Top := 104;
5: FormSpiel.Image8_1.Top := 240;
6: FormSpiel.Image8_1.Top := 240;
7: FormSpiel.Image8_1.Top := 240;
8: FormSpiel.Image8_1.Top := 240;
9: FormSpiel.Image8_1.Top := 376;
10: FormSpiel.Image8_1.Top := 376;
11: FormSpiel.Image8_1.Top := 376;
12: FormSpiel.Image8_1.Top := 376;
13: FormSpiel.Image8_1.Top := 512;
14: FormSpiel.Image8_1.Top := 512;
15: FormSpiel.Image8_1.Top := 512;
16: FormSpiel.Image8_1.Top := 512;
end
end
end
end
end

end;
Es wird also festgelegt (zufällig) an welchen Plätzen die Paare verteilt werden.

Man gelangt dann zu dieser Form (Delphi_2.jpg)

Dort spielt man bis alle Karten aufgedeckt sind.
Ich zeige euch mal den Quellcode für Karte1 und die drei Timer jeweils nur angeschnitten.

Kopf der Form:
Delphi-Quellcode:
unit USpiel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg, StdCtrls, ComCtrls, CommCtrl;

type
  TFormSpiel = class(TForm)
    Timer_FALSCH: TTimer;
    Timer_UNAUFGEDECKT: TTimer;
    Timer_LOESCHEN: TTimer;
    Panel_Spielfeld: TPanel;
    Image1: TImage;
    Image1_1: TImage;
    Image2: TImage;
    Image2_1: TImage;
    Image4_1: TImage;
    Image4: TImage;
    Image3_1: TImage;
    Image3: TImage;
    Image5: TImage;
    Image5_1: TImage;
    Image6: TImage;
    Image6_1: TImage;
    Image8_1: TImage;
    Image8: TImage;
    Image7_1: TImage;
    Image7: TImage;
    Label_Information: TLabel;
    Image9: TImage;
    Label3: TLabel;
    Label4: TLabel;
    Image10: TImage;
    Panel14: TPanel;
    Panel16: TPanel;
    Panel17: TPanel;
    Panel18: TPanel;
    Panel19: TPanel;
    Panel21: TPanel;
    Panel22: TPanel;
    Panel23: TPanel;
    Panel24: TPanel;
    Panel25: TPanel;
    Panel26: TPanel;
    GroupBox1: TGroupBox;
    Label5: TLabel;
    Label6: TLabel;
    Label_Paare_Gefunden: TLabel;
    Label_PKZ_1: TLabel;
    Label_PKZ_2: TLabel;
    ProgressBar_Spielfortschritt: TProgressBar;
    Panel9: TPanel;
    Panel12: TPanel;
    Panel13: TPanel;
    Panel20: TPanel;
    Panel1: TPanel;
    Edit_Einstellung_Timer_LOESCHEN: TEdit;
    Button1: TButton;
    procedure Image1Click(Sender: TObject);
    procedure Image1_1Click(Sender: TObject);
    procedure Image2Click(Sender: TObject);
    procedure Image2_1Click(Sender: TObject);
    procedure Image3Click(Sender: TObject);
    procedure Image3_1Click(Sender: TObject);
    procedure Image4Click(Sender: TObject);
    procedure Image4_1Click(Sender: TObject);
    procedure Image5Click(Sender: TObject);
    procedure Image5_1Click(Sender: TObject);
    procedure Image6Click(Sender: TObject);
    procedure Image6_1Click(Sender: TObject);
    procedure Image7Click(Sender: TObject);
    procedure Image7_1Click(Sender: TObject);
    procedure Image8Click(Sender: TObject);
    procedure Image8_1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer_FALSCHTimer(Sender: TObject);
    procedure Timer_UNAUFGEDECKTTimer(Sender: TObject);
    procedure Timer_LOESCHENTimer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormSpiel: TFormSpiel;
  B1, B1_1: integer; // Bild 1 GEFUNDEN, Bild 1_1 GEFUNDEN
  B2, B2_1: integer; // Bild 2 GEFUNDEN, Bild 2_1 GEFUNDEN
  B3, B3_1: integer; // Bild 3 GEFUNDEN, Bild 3_1 GEFUNDEN
  B4, B4_1: integer; // Bild 4 GEFUNDEN, Bild 4_1 GEFUNDEN
  B5, B5_1: integer; // Bild 5 GEFUNDEN, Bild 5_1 GEFUNDEN
  B6, B6_1: integer; // Bild 6 GEFUNDEN, Bild 6_1 GEFUNDEN
  B7, B7_1: integer; // Bild 7 GEFUNDEN, Bild 7_1 GEFUNDEN
  B8, B8_1: integer; // Bild 8 GEFUNDEN, Bild 8_1 GEFUNDEN
  anz1, anz1_1: integer; // Bild 1 Anzahl, Bild 1_1 Anzahl
  anz2, anz2_1: integer; // Bild 2 Anzahl, Bild 2_1 Anzahl
  anz3, anz3_1: integer; // Bild 3 Anzahl, Bild 3_1 Anzahl
  anz4, anz4_1: integer; // Bild 4 Anzahl, Bild 4_1 Anzahl
  anz5, anz5_1: integer; // Bild 5 Anzahl, Bild 5_1 Anzahl
  anz6, anz6_1: integer; // Bild 6 Anzahl, Bild 6_1 Anzahl
  anz7, anz7_1: integer; // Bild 7 Anzahl, Bild 7_1 Anzahl
  anz8, anz8_1: integer; // Bild 8 Anzahl, Bild 8_1 Anzahl
  erg: integer; // Ergebnis der addierten Anzahlen
  Spielende: integer; //Wenn alle 8 Paare gefunden wurden, also 16 Punkte erreicht sind
  Paar1: integer; // Bild 1 und Bild 1_1 sind gefunden = 2 Punkte
  Paar2: integer; // Bild 2 und Bild 2_1 sind gefunden = 2 Punkte
  Paar3: integer; // Bild 3 und Bild 3_1 sind gefunden = 2 Punkte
  Paar4: integer; // Bild 4 und Bild 4_1 sind gefunden = 2 Punkte
  Paar5: integer; // Bild 5 und Bild 5_1 sind gefunden = 2 Punkte
  Paar6: integer; // Bild 6 und Bild 6_1 sind gefunden = 2 Punkte
  Paar7: integer; // Bild 7 und Bild 7_1 sind gefunden = 2 Punkte
  Paar8: integer; // Bild 8 und Bild 8_1 sind gefunden = 2 Punkte
  Paarsumme: integer; //Summe aus Paar1 ... Paar8
  Paar1GELOESCHT: integer; //Karte 1 und Karte 1_1 wurden aufgedeckt und zerstört
  Paar2GELOESCHT: integer; //Karte 2 und Karte 2_1 wurden aufgedeckt und zerstört
  Paar3GELOESCHT: integer; //Karte 3 und Karte 3_1 wurden aufgedeckt und zerstört
  Paar4GELOESCHT: integer; //Karte 4 und Karte 4_1 wurden aufgedeckt und zerstört
  Paar5GELOESCHT: integer; //Karte 5 und Karte 5_1 wurden aufgedeckt und zerstört
  Paar6GELOESCHT: integer; //Karte 6 und Karte 6_1 wurden aufgedeckt und zerstört
  Paar7GELOESCHT: integer; //Karte 7 und Karte 7_1 wurden aufgedeckt und zerstört
  Paar8GELOESCHT: integer; //Karte 8 und Karte 8_1 wurden aufgedeckt und zerstört
  ErsterZug : integer;
  ZweiterZug : integer;
implementation

uses UGewonnen;

{$R *.dfm}
Karte1:
Delphi-Quellcode:
procedure TFormSpiel.Image1Click(Sender: TObject);
begin{1}

  if (erg > 1) then
    begin{2}
      erg := 0;
      anz1 := 0;
      anz1_1 := 0;
      anz2 := 0;
      anz2_1 := 0;
      anz3 := 0;
      anz3_1 := 0;
      anz4 := 0;
      anz4_1 := 0;
      anz5 := 0;
      anz5_1 := 0;
      anz6 := 0;
      anz6_1 := 0;
      anz7 := 0;
      anz7_1 := 0;
      anz8 := 0;
      anz8_1 := 0;
    end{2}

    else
      begin{3}
        anz1 := 1;
        erg := anz1 + anz1_1 + anz2 + anz2_1 + anz3 + anz3_1 + anz4 + anz4_1 + anz5 + anz5_1 + anz6 + anz6_1 + anz7 + anz7_1 + anz8 + anz8_1;

          if (erg = 1) then
            begin{4}
              Image1.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_1.jpg');
              Image9.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_1.jpg');
              B1 := 1;
              ErsterZug := 1;
              Label_Information.Caption := 'Sie haben Karte 1 aufgedeckt!';
              Spielende := Spielende+1;
                        if Spielende <=9 then Label_PKZ_1.Caption := inttostr(Spielende) + ' von 16';
                        if Spielende >10 then Label_PKZ_2.Visible := True;
                        if Spielende >10 then Label_PKZ_2.Caption := inttostr(Spielende);
                        ProgressBar_Spielfortschritt.Position := Spielende;
                          if (Spielende >=4) and (Spielende <= 8) then
                        SendMessage(ProgressBar_Spielfortschritt.Handle, PBM_SETBARCOLOR, 0, $000090FF);
                         if (Spielende >=8) and (Spielende <= 12) then
                        SendMessage(ProgressBar_Spielfortschritt.Handle, PBM_SETBARCOLOR, 0, clYellow);
                        if (Spielende >=12) and (Spielende < 16) then
                        SendMessage(ProgressBar_Spielfortschritt.Handle, PBM_SETBARCOLOR, 0, clGreen);

                        if Paar1GELOESCHT = 0 then
                        Image1.Enabled := False;

            end{4}

              else
                if (erg = 2) then
                  begin{5}
                    Image1.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_1.jpg');
                    Image10.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_1.jpg');
                    B1 := 1;
                      if (B1 = 1) and (B1_1 = 1) then
                      begin{6}
                        Label_Information.Caption := 'Sie haben Paar 1 gefunden! Super :)';
                        Image1.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_1A.jpg');
                        Image1_1.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_1A.jpg');
                        Image9.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_1A.jpg');
                        Image10.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_1A.jpg');
                        Timer_LOESCHEN.Enabled := True;
                        Paar1 := 1;
                        Paarsumme := Paar1 + Paar2 + Paar3 + Paar4 + Paar5 + Paar6 + Paar7 + Paar8;
                        Label_Paare_Gefunden.Caption := inttostr(Paarsumme) + ' / 8';

                        if Paar1GELOESCHT = 0 then
                        Image1.Enabled := False;

                        if Paar1GELOESCHT = 0 then
                        Image1_1.Enabled := False;

                        if Paar2GELOESCHT = 0 then
                        Image2.Enabled := False;

                        if Paar2GELOESCHT = 0 then
                        Image2_1.Enabled := False;

                        if Paar3GELOESCHT = 0 then
                        Image3.Enabled := False;

                        if Paar3GELOESCHT = 0 then
                        Image3_1.Enabled := False;

                        if Paar4GELOESCHT = 0 then
                        Image4.Enabled := False;

                        if Paar4GELOESCHT = 0 then
                        Image4_1.Enabled := False;

                        if Paar5GELOESCHT = 0 then
                        Image5.Enabled := False;

                        if Paar5GELOESCHT = 0 then
                        Image5_1.Enabled := False;

                        if Paar6GELOESCHT = 0 then
                        Image6.Enabled := False;

                        if Paar6GELOESCHT = 0 then
                        Image6_1.Enabled := False;

                        if Paar7GELOESCHT = 0 then
                        Image7.Enabled := False;

                        if Paar7GELOESCHT = 0 then
                        Image7_1.Enabled := False;

                        if Paar8GELOESCHT = 0 then
                        Image8.Enabled := False;

                        if Paar8GELOESCHT = 0 then
                        Image8_1.Enabled := False;

                        Spielende := Spielende+1;
                        if Spielende <=9 then Label_PKZ_1.Caption := inttostr(Spielende) + ' von 16';
                        if Spielende >10 then Label_PKZ_2.Visible := True;
                        if Spielende >10 then Label_PKZ_2.Caption := inttostr(Spielende);
                        ProgressBar_Spielfortschritt.Position := Spielende;
                          if (Spielende >=4) and (Spielende <= 8) then
                        SendMessage(ProgressBar_Spielfortschritt.Handle, PBM_SETBARCOLOR, 0, $000090FF);
                         if (Spielende >=8) and (Spielende <= 12) then
                        SendMessage(ProgressBar_Spielfortschritt.Handle, PBM_SETBARCOLOR, 0, clYellow);
                        if (Spielende >=12) and (Spielende < 16) then
                        SendMessage(ProgressBar_Spielfortschritt.Handle, PBM_SETBARCOLOR, 0, clGreen);
                        if (Spielende = 16) then begin
                        showmessage('Sie haben das Spiel gewonnen! Herzlichen Glückwunsch :)');
                        SendMessage(ProgressBar_Spielfortschritt.Handle, PBM_SETBARCOLOR, 0, clLime);
                        FormGewonnen.Show;
                        FormSpiel.Close;
                        end
                      end{6}

                        else
                        begin
                           Label_Information.Caption := 'Leider passen diese Karten nicht zusammen! :(';
                           Timer_FALSCH.Enabled := True;
                           ZweiterZug := 1;

                        Spielende := Spielende-1;
                        if Spielende <=9 then Label_PKZ_1.Caption := inttostr(Spielende) + ' von 16';
                        if Spielende >10 then Label_PKZ_2.Visible := True;
                        if Spielende >10 then Label_PKZ_2.Caption := inttostr(Spielende);
                        ProgressBar_Spielfortschritt.Position := Spielende;
                          if (Spielende >=4) and (Spielende <= 8) then
                        SendMessage(ProgressBar_Spielfortschritt.Handle, PBM_SETBARCOLOR, 0, $000090FF);
                         if (Spielende >=8) and (Spielende <= 12) then
                        SendMessage(ProgressBar_Spielfortschritt.Handle, PBM_SETBARCOLOR, 0, clYellow);
                        if (Spielende >=12) and (Spielende < 16) then
                        SendMessage(ProgressBar_Spielfortschritt.Handle, PBM_SETBARCOLOR, 0, clGreen);

                       if Paar1GELOESCHT = 0 then
                        Image1.Enabled := False;

                        if Paar1GELOESCHT = 0 then
                        Image1_1.Enabled := False;

                        if Paar2GELOESCHT = 0 then
                        Image2.Enabled := False;

                        if Paar2GELOESCHT = 0 then
                        Image2_1.Enabled := False;

                        if Paar3GELOESCHT = 0 then
                        Image3.Enabled := False;

                        if Paar3GELOESCHT = 0 then
                        Image3_1.Enabled := False;

                        if Paar4GELOESCHT = 0 then
                        Image4.Enabled := False;

                        if Paar4GELOESCHT = 0 then
                        Image4_1.Enabled := False;

                        if Paar5GELOESCHT = 0 then
                        Image5.Enabled := False;

                        if Paar5GELOESCHT = 0 then
                        Image5_1.Enabled := False;

                        if Paar6GELOESCHT = 0 then
                        Image6.Enabled := False;

                        if Paar6GELOESCHT = 0 then
                        Image6_1.Enabled := False;

                        if Paar7GELOESCHT = 0 then
                        Image7.Enabled := False;

                        if Paar7GELOESCHT = 0 then
                        Image7_1.Enabled := False;

                        if Paar8GELOESCHT = 0 then
                        Image8.Enabled := False;

                        if Paar8GELOESCHT = 0 then
                        Image8_1.Enabled := False;


      end{3}
                  end{5}  end


end;{1}
Timer_FALSCH (sorgt für rote Anzeige der Karten):
Delphi-Quellcode:
procedure TFormSpiel.Timer_FALSCHTimer(Sender: TObject);
begin

//*=====*=====*=====*//Karte 1 und Karte 2//*=====*=====*=====*/
if (B1 = 1) and (B2 = 2) then
begin
Image1.Picture.LoadFromFile('\Spielkarten\Spielkarte_1F.jpg');
Image2.Picture.LoadFromFile('\Spielkarten\Spielkarte_2F.jpg');

if (ErsterZug = 1) or (ErsterZug = 11) then
Image9.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_1F.jpg');

if (ZweiterZug = 1) or (ZweiterZug = 11) then
Image10.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_1F.jpg');

if (ErsterZug = 2) or (ErsterZug = 21) then
Image9.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_2F.jpg');

if (ZweiterZug = 2) or (ZweiterZug = 21) then
Image10.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_2F.jpg');

Timer_FALSCH.Enabled := False;
Timer_UNAUFGEDECKT.Enabled := True;
end


//*=====*=====*=====*//Karte 1 und Karte 2_1//*=====*=====*=====*//
else
begin
if (B1 = 1) and (B2_1 = 2) then
begin
Image1.Picture.LoadFromFile('\Spielkarten\Spielkarte_1F.jpg');
Image2_1.Picture.LoadFromFile('\Spielkarten\Spielkarte_2F.jpg');

if (ErsterZug = 1) or (ErsterZug = 11) then
Image9.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_1F.jpg');

if (ZweiterZug = 1) or (ZweiterZug = 11) then
Image10.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_1F.jpg');

if (ErsterZug = 2) or (ErsterZug = 21) then
Image9.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_2F.jpg');

if (ZweiterZug = 2) or (ZweiterZug = 21) then
Image10.Picture.LoadFromFile('\MEMORY\Spielkarten\Spielkarte_2F.jpg');

Timer_FALSCH.Enabled := False;
Timer_UNAUFGEDECKT.Enabled := True;
end
...usw. sind 16*8 Möglichkeiten

Danach wird Timer_UNAUFGEDECKT ausgeführt:
Delphi-Quellcode:
procedure TFormSpiel.Timer_UNAUFGEDECKTTimer(Sender: TObject);
begin

Timer_UNAUFGEDECKT.Enabled := False;

if Paar1GELOESCHT = 0 then
Image1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar1GELOESCHT = 0 then
Image1_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar1GELOESCHT = 0 then
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar1GELOESCHT = 0 then
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar1GELOESCHT = 0 then
Image1.Enabled := True;
if Paar1GELOESCHT = 0 then
Image1_1.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar2GELOESCHT = 0 then
Image2_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar2GELOESCHT = 0 then
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar2GELOESCHT = 0 then
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar2GELOESCHT = 0 then
Image2.Enabled := True;
if Paar2GELOESCHT = 0 then
Image2_1.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar3GELOESCHT = 0 then
Image3_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar3GELOESCHT = 0 then
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar3GELOESCHT = 0 then
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar3GELOESCHT = 0 then
Image3.Enabled := True;
if Paar3GELOESCHT = 0 then
Image3_1.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar4GELOESCHT = 0 then
Image4_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar4GELOESCHT = 0 then
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar4GELOESCHT = 0 then
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar4GELOESCHT = 0 then
Image4.Enabled := True;
if Paar4GELOESCHT = 0 then
Image4_1.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar5GELOESCHT = 0 then
Image5_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar5GELOESCHT = 0 then
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar5GELOESCHT = 0 then
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar5GELOESCHT = 0 then
Image5.Enabled := True;
if Paar5GELOESCHT = 0 then
Image5_1.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar6GELOESCHT = 0 then
Image6_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar6GELOESCHT = 0 then
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar6GELOESCHT = 0 then
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar6GELOESCHT = 0 then
Image6.Enabled := True;
if Paar6GELOESCHT = 0 then
Image6_1.Enabled := True;

if Paar7GELOESCHT = 0 then begin
Image7.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar7GELOESCHT = 0 then
Image7_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar7GELOESCHT = 0 then
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar7GELOESCHT = 0 then
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar7GELOESCHT = 0 then
Image7.Enabled := True;
if Paar7GELOESCHT = 0 then
Image7_1.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar8GELOESCHT = 0 then
Image8_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar8GELOESCHT = 0 then
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar8GELOESCHT = 0 then
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
if Paar8GELOESCHT = 0 then
Image8.Enabled := True;
if Paar8GELOESCHT = 0 then
Image8_1.Enabled := True;

Timer_UNAUFGEDECKT.Enabled := False;
ErsterZug := 0;
ZweiterZug := 0;
anz1 := 0;
anz1_1 := 0;
anz2 := 0;
anz2_1 := 0;
anz3 := 0;
anz3_1 := 0;
anz4 := 0;
anz4_1 := 0;
anz5 := 0;
anz5_1 := 0;
anz6 := 0;
anz6_1 := 0;
anz7 := 0;
anz7_1 := 0;
anz8 := 0;
anz8_1 := 0;
B1 := 0;
B1_1 := 0;
B2 := 0;
B2_1 := 0;
B3 := 0;
B3_1 := 0;
B4 := 0;
B4_1 := 0;
B5 := 0;
B5_1 := 0;
B6 := 0;
B6_1 := 0;
B7 := 0;
B7_1 := 0;
B8 := 0;
B8_1 := 0;
erg := 0;

end
end;
Dieser dreht alle Karten um außer diese, welche ausgeschlossen werden.

Wenn 2 Karten richtig sind setzt dieser Timer_LOESCHEN ein:
Delphi-Quellcode:
procedure TFormSpiel.Timer_LOESCHENTimer(Sender: TObject);
begin

if (B1 = 1) and (B1_1 = 1) then
begin
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image1.Visible := False;
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image1_1.Visible := False;
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Paar1GELOESCHT := 1;
B1   := 0;
B1_1 := 0;
B2   := 0;
B2_1 := 0;
B3   := 0;
B3_1 := 0;
B4   := 0;
B4_1 := 0;
B5   := 0;
B5_1 := 0;
B6   := 0;
B6_1 := 0;
B7   := 0;
B7_1 := 0;
B8   := 0;
B8_1 := 0;
anz1 := 0;
anz1_1 := 0;
anz2 := 0;
anz2_1 := 0;
anz3 := 0;
anz3_1 := 0;
anz4 := 0;
anz4_1 := 0;
anz5 := 0;
anz5_1 := 0;
anz6 := 0;
anz6_1 := 0;
anz7 := 0;
anz7_1 := 0;
anz8 := 0;
anz8_1 := 0;
erg := 0;
ErsterZug := 0;
ZweiterZug := 0;
if Paar1GELOESCHT = 0 then
Image1.Enabled := True;

if Paar1GELOESCHT = 0 then
Image1_1.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2_1.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3_1.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4_1.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5_1.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6_1.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7_1.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8_1.Enabled := True;

Timer_LOESCHEN.Enabled := False;
end
else
begin

if (B2 = 2) and (B2_1 = 2) then
begin
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image2.Visible := False;
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image2_1.Visible := False;
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Paar2GELOESCHT := 1;
B1   := 0;
B1_1 := 0;
B2   := 0;
B2_1 := 0;
B3   := 0;
B3_1 := 0;
B4   := 0;
B4_1 := 0;
B5   := 0;
B5_1 := 0;
B6   := 0;
B6_1 := 0;
B7   := 0;
B7_1 := 0;
B8   := 0;
B8_1 := 0;
anz1 := 0;
anz1_1 := 0;
anz2 := 0;
anz2_1 := 0;
anz3 := 0;
anz3_1 := 0;
anz4 := 0;
anz4_1 := 0;
anz5 := 0;
anz5_1 := 0;
anz6 := 0;
anz6_1 := 0;
anz7 := 0;
anz7_1 := 0;
anz8 := 0;
anz8_1 := 0;
erg := 0;
ErsterZug := 0;
ZweiterZug := 0;
if Paar1GELOESCHT = 0 then
Image1.Enabled := True;

if Paar1GELOESCHT = 0 then
Image1_1.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2_1.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3_1.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4_1.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5_1.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6_1.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7_1.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8_1.Enabled := True;
Timer_LOESCHEN.Enabled := False;
end
else
begin

if (B3 = 3) and (B3_1 = 3) then
begin
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image3.Visible := False;
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image3_1.Visible := False;
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Paar3GELOESCHT := 1;
B1   := 0;
B1_1 := 0;
B2   := 0;
B2_1 := 0;
B3   := 0;
B3_1 := 0;
B4   := 0;
B4_1 := 0;
B5   := 0;
B5_1 := 0;
B6   := 0;
B6_1 := 0;
B7   := 0;
B7_1 := 0;
B8   := 0;
B8_1 := 0;
anz1 := 0;
anz1_1 := 0;
anz2 := 0;
anz2_1 := 0;
anz3 := 0;
anz3_1 := 0;
anz4 := 0;
anz4_1 := 0;
anz5 := 0;
anz5_1 := 0;
anz6 := 0;
anz6_1 := 0;
anz7 := 0;
anz7_1 := 0;
anz8 := 0;
anz8_1 := 0;
erg := 0;
ErsterZug := 0;
ZweiterZug := 0;
if Paar1GELOESCHT = 0 then
Image1.Enabled := True;

if Paar1GELOESCHT = 0 then
Image1_1.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2_1.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3_1.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4_1.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5_1.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6_1.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7_1.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8_1.Enabled := True;
Timer_LOESCHEN.Enabled := False;
end
else
begin

if (B4 = 4) and (B4_1 = 4) then
begin
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image4.Visible := False;
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image4_1.Visible := False;
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Paar4GELOESCHT := 1;
B1   := 0;
B1_1 := 0;
B2   := 0;
B2_1 := 0;
B3   := 0;
B3_1 := 0;
B4   := 0;
B4_1 := 0;
B5   := 0;
B5_1 := 0;
B6   := 0;
B6_1 := 0;
B7   := 0;
B7_1 := 0;
B8   := 0;
B8_1 := 0;
anz1 := 0;
anz1_1 := 0;
anz2 := 0;
anz2_1 := 0;
anz3 := 0;
anz3_1 := 0;
anz4 := 0;
anz4_1 := 0;
anz5 := 0;
anz5_1 := 0;
anz6 := 0;
anz6_1 := 0;
anz7 := 0;
anz7_1 := 0;
anz8 := 0;
anz8_1 := 0;
erg := 0;
ErsterZug := 0;
ZweiterZug := 0;
if Paar1GELOESCHT = 0 then
Image1.Enabled := True;

if Paar1GELOESCHT = 0 then
Image1_1.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2_1.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3_1.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4_1.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5_1.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6_1.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7_1.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8_1.Enabled := True;
Timer_LOESCHEN.Enabled := False;
end
else
begin

if (B5 = 5) and (B5_1 = 5) then
begin
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image5.Visible := False;
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image5_1.Visible := False;
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Paar5GELOESCHT := 1;
B1   := 0;
B1_1 := 0;
B2   := 0;
B2_1 := 0;
B3   := 0;
B3_1 := 0;
B4   := 0;
B4_1 := 0;
B5   := 0;
B5_1 := 0;
B6   := 0;
B6_1 := 0;
B7   := 0;
B7_1 := 0;
B8   := 0;
B8_1 := 0;
anz1 := 0;
anz1_1 := 0;
anz2 := 0;
anz2_1 := 0;
anz3 := 0;
anz3_1 := 0;
anz4 := 0;
anz4_1 := 0;
anz5 := 0;
anz5_1 := 0;
anz6 := 0;
anz6_1 := 0;
anz7 := 0;
anz7_1 := 0;
anz8 := 0;
anz8_1 := 0;
erg := 0;
ErsterZug := 0;
ZweiterZug := 0;
if Paar1GELOESCHT = 0 then
Image1.Enabled := True;

if Paar1GELOESCHT = 0 then
Image1_1.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2_1.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3_1.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4_1.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5_1.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6_1.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7_1.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8_1.Enabled := True;
Timer_LOESCHEN.Enabled := False;
end
else
begin

if (B6 = 6) and (B6_1 = 6) then
begin
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image6.Visible := False;
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image6_1.Visible := False;
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Paar6GELOESCHT := 1;
B1   := 0;
B1_1 := 0;
B2   := 0;
B2_1 := 0;
B3   := 0;
B3_1 := 0;
B4   := 0;
B4_1 := 0;
B5   := 0;
B5_1 := 0;
B6   := 0;
B6_1 := 0;
B7   := 0;
B7_1 := 0;
B8   := 0;
B8_1 := 0;
anz1 := 0;
anz1_1 := 0;
anz2 := 0;
anz2_1 := 0;
anz3 := 0;
anz3_1 := 0;
anz4 := 0;
anz4_1 := 0;
anz5 := 0;
anz5_1 := 0;
anz6 := 0;
anz6_1 := 0;
anz7 := 0;
anz7_1 := 0;
anz8 := 0;
anz8_1 := 0;
erg := 0;
ErsterZug := 0;
ZweiterZug := 0;
if Paar1GELOESCHT = 0 then
Image1.Enabled := True;

if Paar1GELOESCHT = 0 then
Image1_1.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2_1.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3_1.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4_1.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5_1.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6_1.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7_1.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8_1.Enabled := True;
end
else
begin

if (B7 = 7) and (B7_1 = 7) then
begin
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image7.Visible := False;
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image7_1.Visible := False;
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Timer_LOESCHEN.Enabled := False;
Paar7GELOESCHT := 1;
B1   := 0;
B1_1 := 0;
B2   := 0;
B2_1 := 0;
B3   := 0;
B3_1 := 0;
B4   := 0;
B4_1 := 0;
B5   := 0;
B5_1 := 0;
B6   := 0;
B6_1 := 0;
B7   := 0;
B7_1 := 0;
B8   := 0;
B8_1 := 0;
anz1 := 0;
anz1_1 := 0;
anz2 := 0;
anz2_1 := 0;
anz3 := 0;
anz3_1 := 0;
anz4 := 0;
anz4_1 := 0;
anz5 := 0;
anz5_1 := 0;
anz6 := 0;
anz6_1 := 0;
anz7 := 0;
anz7_1 := 0;
anz8 := 0;
anz8_1 := 0;
erg := 0;
ErsterZug := 0;
ZweiterZug := 0;
if Paar1GELOESCHT = 0 then
Image1.Enabled := True;

if Paar1GELOESCHT = 0 then
Image1_1.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2_1.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3_1.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4_1.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5_1.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6_1.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7_1.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8_1.Enabled := True;
end
else
begin

if (B8 = 8) and (B8_1 = 8) then
begin
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image8.Visible := False;
if (Edit_Einstellung_Timer_LOESCHEN.Text = '1') then
Image8_1.Visible := False;
Image9.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Image10.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
Timer_LOESCHEN.Enabled := False;
Paar8GELOESCHT := 1;
B1   := 0;
B1_1 := 0;
B2   := 0;
B2_1 := 0;
B3   := 0;
B3_1 := 0;
B4   := 0;
B4_1 := 0;
B5   := 0;
B5_1 := 0;
B6   := 0;
B6_1 := 0;
B7   := 0;
B7_1 := 0;
B8   := 0;
B8_1 := 0;
anz1 := 0;
anz1_1 := 0;
anz2 := 0;
anz2_1 := 0;
anz3 := 0;
anz3_1 := 0;
anz4 := 0;
anz4_1 := 0;
anz5 := 0;
anz5_1 := 0;
anz6 := 0;
anz6_1 := 0;
anz7 := 0;
anz7_1 := 0;
anz8 := 0;
anz8_1 := 0;
erg := 0;
ErsterZug := 0;
ZweiterZug := 0;
if Paar1GELOESCHT = 0 then
Image1.Enabled := True;

if Paar1GELOESCHT = 0 then
Image1_1.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2.Enabled := True;

if Paar2GELOESCHT = 0 then
Image2_1.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3.Enabled := True;

if Paar3GELOESCHT = 0 then
Image3_1.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4.Enabled := True;

if Paar4GELOESCHT = 0 then
Image4_1.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5.Enabled := True;

if Paar5GELOESCHT = 0 then
Image5_1.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6.Enabled := True;

if Paar6GELOESCHT = 0 then
Image6_1.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7.Enabled := True;

if Paar7GELOESCHT = 0 then
Image7_1.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8.Enabled := True;

if Paar8GELOESCHT = 0 then
Image8_1.Enabled := True;
Timer_LOESCHEN.Enabled := False;
end
end
end
end
end
end
end
end
end;
Sobald alle 8 Paare gefunden worden, ist das Spiel gewonnen und er wechsel zur FormGewonnen (Delphi_3.jpg) und macht dabei FormSpiel.Close;

Nun sagt mir bitte, wie ich die FormSpiel zurücksetzen kann?

Der Button "Neues Spiel" soll dann alles zurücksetzen und man kommt wieder in die Spieleinstellungen (Delphi_1.jpg).

Delphi-Quellcode:
procedure TFormGEWONNEN.ImageNEUES_SPIELClick(Sender: TObject);
begin
FormEinstellungen.Show;
FormGewonnen.Close;

FormSpiel.Image1.Free;
FormSpiel.Image1_1.Free;
FormSpiel.Image2.Free;
FormSpiel.Image2_1.Free;
FormSpiel.Image3.Free;
FormSpiel.Image3_1.Free;
FormSpiel.Image4.Free;
FormSpiel.Image4_1.Free;
FormSpiel.Image5.Free;
FormSpiel.Image5_1.Free;
FormSpiel.Image6.Free;
FormSpiel.Image6_1.Free;
FormSpiel.Image7.Free;
FormSpiel.Image7_1.Free;
FormSpiel.Image8.Free;
FormSpiel.Image8_1.Free;

FormSpiel.Image1 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image1_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image2 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image2_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image3 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image3_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image4 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image4_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image5 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image5_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image6 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image6_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image7 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image7_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image8 := FormSpiel.Image1.Create(FormSpiel);
FormSpiel.Image8_1 := FormSpiel.Image1_1.Create(FormSpiel);

FormSpiel.Image1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image1_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image2.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image2_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image3.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image3_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image4.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image4_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image5.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image5_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image6.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image6_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image7.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image7_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image8.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Image8_1.Picture.LoadFromFile('\Spielkarten\Rueckseite.jpg');
FormSpiel.Label_Information.Caption := '';
FormSpiel.ProgressBar_Spielfortschritt.Position := 0;
FormSpiel.Label_Paare_Gefunden.Caption := '0 / 8';
FormSpiel.Label_PKZ_1.Caption := '0 von 16';
FormSpiel.Label_PKZ_2.Caption := '';
FormSpiel.Image1.Enabled := True;
FormSpiel.Image1_1.Enabled := True;
FormSpiel.Image2.Enabled := True;
FormSpiel.Image2_1.Enabled := True;
FormSpiel.Image3.Enabled := True;
FormSpiel.Image3_1.Enabled := True;
FormSpiel.Image4.Enabled := True;
FormSpiel.Image4_1.Enabled := True;
FormSpiel.Image5.Enabled := True;
FormSpiel.Image5_1.Enabled := True;
FormSpiel.Image6.Enabled := True;
FormSpiel.Image6_1.Enabled := True;
FormSpiel.Image7.Enabled := True;
FormSpiel.Image7_1.Enabled := True;
FormSpiel.Image8.Enabled := True;
FormSpiel.Image8_1.Enabled := True;
end;

So :lol::oops: ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:06 Uhr.
Seite 2 von 4     12 34      

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