Toni hat geschrieben:Waren soweit meine anderen Befehle richtig?
Soweit ja, warum du das Image jedoch deaktivierst und wieder aktivierst habe ich nicht verstanden.
Ich fasse mal zusammen (obwohl das eher deine Aufgabe wäre):
- du hast 9 Images
- diese sollen am Anfang "leer" sein
- mit zwei Radiobuttons (RB1, RB2), möchtest du festlegen, welches Bild in ein angeklicktes Image geladen wird
- sobald in 3 (von 9) Images 3 gleiche Bilder geladen wurden, ist das Spiel gewonnen.
Von Anfang an:
Erstelle ein leeres Formular und lege 2 Radiobuttons (von dir gewählt: RB1, RB2) darauf ab. Nun fügst du 9 Images ebenfalls dem Formular hinzu.
Bleiben wir mal bei den gewählten Bezeichnern. Du deklarierst global:
Code: Alles auswählen
var
ImageName: Array[1..9] of String; //aktuell in jeweiliges Image geladenes Bild
const
MyImages: Array[1..2] of String =
('X_A.png', 'X_1.png'); //möglich ladbare Bilder
Kommen wir zu Punkt 1: "9 Images sollen am Anfang leer sein".
Im Ereignis OnCreate des Formulars würde ich nun definieren, dass die Images leer sind. Würdest du ImageName[1]..[9]:=' '; machen, hätten alle 9 ImageNamen den gleichen Namen (obwohl leer) und das Spiel wäre schon gewonnen. Daher gibst Du jedem ImageNamen einfach eine andere Bezeichnung z.B. ImageName[1]:='NoImage1'; ImageName[2]:='NoImage2'; usw. Oder als Schleife:
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
for i:=1 to 9 do ImageName[i]:='NoImage' + IntToStr(i); //kein Bild ist geladen!
end;
Nun zu Punkt 2: "mit zwei Radiobuttons (RB1, RB2), möchtest du festlegen, welches Bild in ein angeklicktes Image geladen wird". Das hattest Du soweit richtig (das mit dem Enabled:=False hatte ich nicht verstanden), allerdings fehlt noch die Abfrage, ob nun schon das Spiel gewonnen wurde (das machst du am besten in einer separaten Procedure "TesteGewonnen". Die entsprechenden "OnClick"-Ereignisbehandlungsroutinen der Images sehen dann wie folgt aus:
Code: Alles auswählen
procedure TForm1.Image1Click(Sender: TObject);
begin
if RB1.Checked then
ImageName[1]:=MyImages[1];
if RB2.Checked then
ImageName[1]:=MyImages[2];
if FileExists(ImageName[1]) then //Testen, ob Bild existiert
Image1.Picture.LoadFromFile(ImageName[1]);
TesteGewonnen;
end;
procedure TForm1.Image2Click(Sender: TObject);
begin
if RB1.Checked then
ImageName[2]:=MyImages[1];
if RB2.Checked then
ImageName[2]:=MyImages[2];
if FileExists(ImageName[2]) then
Image2.Picture.LoadFromFile(ImageName[2]);
TesteGewonnen;
end;
...
Nun zu Punkt 3: "sobald in 3 (von 9) Images 3 gleiche Bilder geladen wurden, ist das Spiel gewonnen". Wie zuvor geschrieben, erstellst du für den Test eine separate Procedure "TesteGewonnen". Dazu gehst du in deine Klasse vom Formular z.B. "TForm1" und schreibst in den "private" Teil:
Code: Alles auswählen
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
...
procedure Image8Click(Sender: TObject);
procedure Image9Click(Sender: TObject);
private
{ private declarations }
procedure TesteGewonnen; //<-- diese Procedure und Drückst <Strg> + <Shift> + <c>
public
Mit dem drücken der Tastenkombination <Strg> + <Shift> + <c> aktivierst du die Autovervollständigung und es wird eine blanke Procedure mit "begin" und "end" im Implementierungsteil erstellt.
Dort kannst du nun überprüfen, ob 3 gleiche Images vorhanden sind. Z.B.:
Code: Alles auswählen
procedure TForm1.TesteGewonnen;
begin
if (ImageName[1] = ImageName[2]) and (ImageName[1] = ImageName[3]) then
ShowMessage('Ich habe gewonnen');
end;
Komplizierter wird es, wenn du statt nur 3 Images 4 Images auf dem Formular hast. Dann müsstest Du schon mehr Kombinationen testen:
Code: Alles auswählen
procedure TForm1.TesteGewonnen;
begin
if (ImageName[1] = ImageName[2]) and (ImageName[1] = ImageName[3]) then
ShowMessage('Ich habe gewonnen');
if (ImageName[1] = ImageName[2]) and (ImageName[1] = ImageName[4]) then
ShowMessage('Ich habe gewonnen');
if (ImageName[2] = ImageName[3]) and (ImageName[2] = ImageName[4]) then
ShowMessage('Ich habe gewonnen');
end;
Bei noch mehr Images lohnt es sich, diese Abfrage per Schleife zu machen. Ein Beispiel dafür hatte ich schon weiter oben gepostet gehabt.
So nun hat diese Erklärung etwa die zehnfache Zeit gedauert, als das Ganze in Code zu fassen und hier zu posten. Ich hoffe Dir hilft es!!!