Закончил Columns из 7-й главы, седьмого упражнения
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
unit Unit2;
|
||||
|
||||
{$mode ObjFPC}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils;
|
||||
|
||||
const
|
||||
StartMSecsPerFrame = 20;
|
||||
|
||||
type
|
||||
IGameHandler = class(TObject)
|
||||
private
|
||||
MSecsPerFrame: Integer;
|
||||
|
||||
public
|
||||
Finished: Boolean;
|
||||
constructor Create;
|
||||
procedure DoIteration; virtual; abstract;
|
||||
|
||||
procedure SlowDown;
|
||||
procedure SpeedUp;
|
||||
end;
|
||||
|
||||
TActionThread = class(TThread)
|
||||
private
|
||||
FGameHandler: IGameHandler;
|
||||
|
||||
public
|
||||
constructor Create(AGameHandler: IGameHandler);
|
||||
destructor Destroy;
|
||||
|
||||
property GameHandler: IGameHandler read FGameHandler;
|
||||
|
||||
procedure Execute; override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
constructor IGameHandler.Create;
|
||||
begin
|
||||
Finished := false;
|
||||
MSecsPerFrame := StartMSecsPerFrame
|
||||
end;
|
||||
|
||||
procedure IGameHandler.SlowDown;
|
||||
begin
|
||||
MSecsPerFrame := StartMSecsPerFrame
|
||||
end;
|
||||
|
||||
procedure IGameHandler.SpeedUp;
|
||||
begin
|
||||
MSecsPerFrame := 100
|
||||
end;
|
||||
|
||||
constructor TActionThread.Create(AGameHandler: IGameHandler);
|
||||
begin
|
||||
inherited Create(false);
|
||||
FGameHandler := AGameHandler
|
||||
end;
|
||||
|
||||
destructor TActionThread.Destroy;
|
||||
begin
|
||||
FreeAndNil(FGameHandler)
|
||||
end;
|
||||
|
||||
procedure TActionThread.Execute;
|
||||
var
|
||||
OldTime: TDateTime;
|
||||
ToWait: Integer;
|
||||
begin
|
||||
while not GameHandler.Finished do
|
||||
begin
|
||||
OldTime := Now;
|
||||
Synchronize(@FGameHandler.DoIteration);
|
||||
{ Синхронизация с таймером. }
|
||||
ToWait := Round(GameHandler.MSecsPerFrame - (Now - OldTime) * MSecsPerDay);
|
||||
if ToWait > 0 then
|
||||
Sleep(ToWait)
|
||||
end
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
Reference in New Issue
Block a user