Autor Beitrag
elzer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Sa 04.10.08 20:47 
Hey Leute,
Also ich versuche mein Problem zu schildern. Ich bin gerade dabei die Grundlagen durchzuarbeiten und habe versucht ein Paar Funktionen in ein Programm zu bringen. Ich habe also den Quelltext für Tic Tac Toe geschrieben. Die Angabe, welcher Spieler am Zug ist habe ich in einer Radiobox, also der Radiobutton des jeweiligen Spieler ist 'checked=true'^^.
So jetzt habe ich mir überlegt, dass die Zeit, die jeder Spieler am Zug ist in einem Label gemessen wird. Da ich mit Zeitfunktionen usw wie es z.B. www.delphi-forum.de/...ighlight=zeit+messen hier beschrieben wird nichts anfangen kann habe ich es so versucht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.ZeitFuerSpieler1;
var a,b:real;
begin
a:=strtofloat(Label7.Caption);
while spieler1.Checked=true do
begin
b:=a+0.01//Zahl in Label7 wird um 1 Hundertstel erhöht
Label7.Caption:=floattostr(b); //Variable wird ausgegeben
sleep(10);
end;
end;


Das Programm startet auch soweit, aber sobald ich ZeitFuerSpieler1 verwende friert es ein und ich muss es zurücksetzen. Könnt ihr mir bitte helfen, und vorallem, geht es überhaupt so? Und, sobald ich Spieler1.Checked wieder deaktiviere (=false) würde dann die Zeit in Label7 stehen bleiben?
Vielen dank für eure Hilfe :)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 04.10.08 21:07 
Moin und :welcome: im Forum!

user profile iconelzer hat folgendes geschrieben Zum zitierten Posting springen:
geht es überhaupt so?
Nein, das wird so nix, da du (normalerweise) unter Windows ein ereignisorientiertes Programm erstellst. ;)

Ansatz:
  • wenn ein Spieler am Zug ist, in einer (globalen) Variablen die aktuelle Zeit merken, also sowas: Start := Now;
  • Wenn der Spieler, der am Zug ist, wechselt, dann so die vergangene Zeit messen: Time := SecondsBetween(Start,Now);
  • Start wieder auf die aktuelle Zeit setzen, damit der aktuelle Spieler wieder bei "Null" anfängt.
cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
elzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Sa 04.10.08 21:47 
Danke für deine schnelle Antwort.
Delphi kennt den Befehl 'SecondsBetween' nicht, muss ich vll irgendetwas im Quelltext mit TDateTime oder so verbinden?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var start:real;  //globale Variable: Start
[...]
procedure TForm1.aClick(Sender: TObject);
var x,y:real;
begin
if s1.Checked=true then
begin
a.Text:=' X';
s1.checked:=false;  //RadioButton von Spieler1 wird Deaktiviert
Label7.Caption:=SecondsBetween(start,now);  //Undefinierter Bezeichner 'SecondsBetween'
s2.checked:=true; //RadioButton von Spieler2 wird Aktiviert
start:=now;
end;
end;
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 04.10.08 21:48 
du musst bei uses dateutils eintragen dann sollts gehen!

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
elzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Sa 04.10.08 21:53 
:) Danke
'Inkompatible Typen 'Sting' und 'Int64''
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
uses dateutils
var start:real;  
[...]  
procedure TForm1.aClick(Sender: TObject);  
var x,y:real;  
begin  
if s1.Checked=true then  
begin  
a.Text:=' X';  
s1.checked:=false;  
Label7.Caption:=SecondsBetween(start,now);  //Inkompatible Typen 'Sting' und 'Int64' 
s2.checked:=true; 
start:=now;  
end;  
end;



Wäre Lieb wenn ihr mir nochmal helfen könntet^^
Lg Chris
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 04.10.08 21:55 
Moin!

user profile iconelzer hat folgendes geschrieben Zum zitierten Posting springen:
Delphi kennt den Befehl 'SecondsBetween' nicht,
Den passenden Tipp hat dir user profile iconelundril ja schon gegeben. ;)

Du solltest aber auch hier:
user profile iconelzer hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
var start:real;  //globale Variable: Start					
den Datentyp TTime oder TDateTime verwenden. :idea:

//EDIT: Und du musst natürlich das Ergebnis mit IntToStr() umwandeln, wenn es in einem Label angezeigt werden soll. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
elzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Sa 04.10.08 22:03 
Zitat:
//EDIT: Und du musst natürlich das Ergebnis mit IntToStr() umwandeln, wenn es in einem Label angezeigt werden soll.


Stimmt, tut mir Leid habe ich übersehen :)
Jetzt bekomme ich zwar eine Zahl angezeigt, aber diese ist viel zu groß (3432319279).
Muss ich noch in einer Zeile angeben in was er mir die Zahl im Caption (z.B. sec) ausgeben soll?
LG Chris
elzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Sa 04.10.08 22:32 
jetzt geht es, ich habe zwar nichts mehr geändert, aber nach einem Speichern und wieder Öffnen hat es funktioniert :).
Danke Leute:)