Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Die richtigen Antworten zählen...


PrP - Mi 14.11.07 18:29
Titel: Die richtigen Antworten zählen...
Hi,

ich mach ein leichtes 1 mal 1 Programm:

Alle 5 Sekunden steht eine neue Rechnung da, die man beantworten muss. Nach 10 Rechungen soll der Timer gestoppt werden und keine weitere Rechung mehr kommen. Soweit, so gut. Jetzt möchte ich, dass in einem Label angezeigt wird, wieoft man richtig gerechnet habe.
Ich krieg des aber nicht hin, es steht immer nur da, dass ich einmal richtig gerechnet habe und ich find den Fehler einfach nicht.
Was ich bis jetzt zusammengebracht habe:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
randomize;
z1 := Random (9) + 1;
z2 := Random (9) + 1;
zahl2 := z1 * z2;
richtig := 0;
anzahl := 0;
label1.caption := 'Wieviel ist ' + IntToStr (z1) + ' mal ' + IntToStr (z2) + '?';

label2.visible := false;


end;

procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
z1 := Random (9) + 1;
z2 := Random (9) + 1;
label1.caption := 'Wieviel ist ' + IntToStr (z1) + ' mal ' + IntToStr (z2) + '?';

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
zahl1 := StrToInt (edit1.text);
zahl2 := z1 * z2;
if zahl1 = zahl2 then richtig := richtig + 1;

form1.Label2.visible := true;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
form1.Timer1.Enabled := false;

label3.caption := 'Du hast ' + IntToStr (richtig) + ' Mal richtig geantwortet!';
end;

end.


Danke schonmal für eure Hilfe

LG


Jann1k - Mi 14.11.07 18:45

Das Problem ist dein Timer:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Timer1Timer(Sender: TObject);  
begin  
randomize;  
z1 := Random (9) + 1;  
z2 := Random (9) + 1;  
zahl2 := z1 * z2;  
richtig := 0;  //<- diese Zeile
anzahl := 0;  
label1.caption := 'Wieviel ist ' + IntToStr (z1) + ' mal ' + IntToStr (z2) + '?';  

 
label2.visible := false;  

 end;


In der markierten Zeile setzt du die Anzahl der richtig gegebenen Antworten auf 0, am Ende hast du also nur die richtige Antwort von der letzten Frage.

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt


Chryzler - Mi 14.11.07 18:47

Du setzt ja jedesmal im Timer die richtig-Variable wieder auf Null. Initialisier die Zähl-Variable doch einfach nur im OnCreate.
Abgesehen davon solltest du Randomize nur einmal beim Programmstart ausführen, also mach am besten den Aufruf im Timer1Timer raus.


PrP - Mi 14.11.07 18:53

Danke, Problem gelöst :D