Thema: Delphi Timer und Laufzeit

Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Timer und Laufzeit

  Alt 20. Mai 2010, 01:21
Für viele Schachuhren braucht man eigentlich nur einen Timer.
Dieser Timer ist nur dafür zuständig alle 0,2s die Anzeige sämlicher Schachuhren zu aktualisieren.
Eine einzelne Schachuhr könnte z.B. so aussehen:
Delphi-Quellcode:
TChessClock = class(TObject)
private
  FLastStart : TDateTime;
  FSummeZeit : TDateTime; // 1.0 entspricht einem Tag, 0.04166= eine Stunde
  FRunning : Boolean;
public
  procedure Start;
  procedure Stop;
  procedure Reset;

  function GetSummezeit:TDateTime; // liefert die aufgelaufene Zeit
  function GetSummeZeitAsString:string;

  property Running : Boolean read FRunning;
end;
...
function TChessClock.GetSummezeit:TDateTime;
begin
  if Running then
    result := FSummeZeit + (Now-FLastStart)
  else
    result := FSummeZeit;
end;
Zu Beginn ist SummeZeit = 0. Wird die Uhr gestartet, dann wird die aktuelle Uhrzeit+Datum (Funktion Now benützen) im Feld FLastStart gespeichert.
Wird die Uhr gestoppt, dann wird intern gerechnet:
FSummeZeit := FSummeZeit + (Now - FLastStart); Man kann die Uhr auch so designen, dass mit einer Zeitvorgabe (z.B. 10Min) gestartet wird und dann dieses Zeitguthaben verkleinert wird.

Für ein Schachspiel müssen zwei Uhren zusammengenommen werden.
Hier würde ich eine weitere Klasse verwenden, um zwei Objekte von TChessClock zusammenzufassen.
Beim Stop der einen Uhr startet wird automatisch die Uhr des Gegners gestartet.
Dann kann man beliebig viele Objekte dieser Doppeluhren in einer TObjectList oder in einem dyn. Array anlegen.
Der Timer hat dann "nur" noch die Aufgabe, alle Doppeluhren aus der Liste auszulesen und im Formular anzuzeigen.
  Mit Zitat antworten Zitat