Hi!
Zitat von
TOC:
"Möchtest Du einen einzigen Button auf den du klickst, und er berechnet dann in der Reihenfolge zuerst die 1 von Cell[0,0], beim zweiten klick die 2 von Cell[1, 0] usw bis 16 und beide StringGrids sind dann nach 16 Clicks voll?"
Zitat von
kunta:
Genau. Diesen Fall möchte ich erreichen.
Also gut, dann müssen wir das Programm halt nochmal etwas anpassen.
Die Funktion "GetRandomNumber" hasst Du ja weiter oben in diesem Thread, die wieder hole ich hier nicht noch mal.
Also, erstmal brauchen wir eine Variable, diese müssen wir zuerst mal auf eins setzen und dann mit jedem Klick hoch zählen.
Nur, wohin mit der Variable? Ich würde folgendes vorschlagen:
Delphi-Quellcode:
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Button1: TButton;
Button2: TButton;
procedure StringGrid1SelectCell(Sender: TObject; Col, Row: Integer;
var CanSelect: Boolean);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
// Diese Zähler-Variable ist wichtig!
Count: Integer;
public
end;
So in etwa könnte das Formular in Deinem Programm aussehen, und unter "Private" habe ich die Zählvariable hinein geschrieben.
Es gibt auch andere Möglichkeiten, zum Beispiel hätte man auch eine globale Variable nehmen können, aber ich persönlich finde es so besser.
Dann ist folgendes noch wichtig: Am Programmstart müssen wir erstmal mit Randomize den Zufallszahlengenerator initialisieren und die Zählvariable auf 1 setzen. Dazu würde ich folgenden Vorschlag machen:
Delphi-Quellcode:
// Diese Methode wird immer aufgerufen wenn das Formular erzeugt wird, also beim Programmstart
procedure TForm1.FormCreate(Sender: TObject);
begin
// Zufallszahlgenerator initialisieren
Randomize;
// Zählvariable auf 1 setzen
Count:=1;
end;
Ok. Und nun, der Würfel-Knopf:
Delphi-Quellcode:
// Würfel-Knopf
// Diese Prozedur erzeugt die Zufallszahlen von 1 bis 16 in aufsteigender Reihenfolge
// und schreibt die Anzahl der Würfelversuche in Stringgrid2
procedure TForm1.Button1Click(Sender: TObject);
Var
Col, Row: Integer;
begin
// Aus Zählvariable die Spalte berechnen
Col:=(Count-1) mod 4;
// Aus Zählvariable die Zeile berechnen
Row:=(Count-1) div 4;
// Schreibe die Zählvariable in StringGrid1
StringGrid1.Cells[Col, Row]:=IntToStr(Count);
// Zähle die Versuche bis die Zahl gewürfelt wurde und schreib die Anzahl in StringGrid2
StringGrid2.Cells[Col, Row]:=IntToStr(GetRandomNumber(Count, 1, 16));
// Erhöhe die Zählvariable
Inc(Count);
// Falls Zählvariable>16 ist...
If Count>16 then Begin
// Meldung an Benutzer ausgeben
ShowMessage('Stringrid ist voll!');
// Würfelknopf sperren
Button1.Enabled:=false;
End;
end;
Ok. Also, jedesmal, wenn Du auf den Würfel-Knop klickst zählt er um eins weiter, und wenn die Stringgrids voll sind gibt es eine Meldung und der Würfel-Knopf wird gesperrt.
Man könnte auch noch einen zweiten-Knopf machen, nämlich um die StringGrids wieder zu lehren, den Zäher wieder auf 1 zu setzen und den Würfel-Knopf zu entsperren. Dazu noch ein letzter Vorschlag:
Delphi-Quellcode:
// Lösch-Knopf
// Diese Prozedur setzt die Zählvariable zurück und löscht die StringGrids
procedure TForm1.Button2Click(Sender: TObject);
Var
Col, Row: Integer;
begin
// Zählvariable wieder auf 1 setzen
Count:=1;
// Zähle für die Zeilen von 0 bis 3...
For Row:=0 to 3 do Begin
// Zähle für die Spalten von 0 bis 3...
For Col:=0 to 3 do Begin
// Lösche die Zelle in StringGrid1 und 2 mit Leerstring
StringGrid1.Cells[Col, Row]:='';
StringGrid2.Cells[Col, Row]:='';
End;
End;
// Entsperre wieder den Würfel-Knopf
Button1.Enabled:=true;
end;
Grüße von TOC!