1
0

Закончил тетрис из 7-й главы, шестого упражнения

This commit is contained in:
2026-04-10 09:56:05 +02:00
parent e4dd7b7416
commit 8987b96aeb
7 changed files with 881 additions and 0 deletions
@@ -0,0 +1,78 @@
unit Unit2;
{$mode ObjFPC}
interface
uses
Classes, SysUtils, Graphics;
type
IGameHandler = interface
procedure DoIteration;
procedure Reset;
procedure Finish;
function IsFinished: Boolean;
end;
TActionThread = class(TThread)
public
GameHandler: IGameHandler;
constructor Create(AGameHandler: IGameHandler);
procedure Execute; override;
end;
const
FieldHeight = 20;
FieldWidth = 10; { высота и ширина игрового поля }
Delay = 6; { Задержка падения фигуры (в кадрах). }
LinesPerLevel = 10;
var
ActionThread: TActionThread;
MSecsPerFrame: Integer; { миллисекунд на кадр }
Key_Space, Key_Left, Key_Right, Key_Down: Boolean; { состояния клавиш }
Bitmaps: array[0..4] of TBitmap; { "строительные блоки" }
Field: array[-1..FieldWidth, 0..FieldHeight] of Integer; { игровое поле }
Pieces: array[1..7, 0..3, 0..3] of Integer = (
((1,1,1,1), (0,0,0,0), (0,0,0,0), (0,0,0,0)),
((1,1,0,0), (0,1,1,0), (0,0,0,0), (0,0,0,0)),
((1,1,1,0), (0,0,1,0), (0,0,0,0), (0,0,0,0)),
((1,1,0,0), (1,1,0,0), (0,0,0,0), (0,0,0,0)),
((1,0,0,0), (1,1,0,0), (1,0,0,0), (0,0,0,0)),
((0,0,1,0), (1,1,1,0), (0,0,0,0), (0,0,0,0)),
((0,1,1,0), (1,1,0,0), (0,0,0,0), (0,0,0,0))
);
implementation
constructor TActionThread.Create(AGameHandler: IGameHandler);
begin
inherited Create(false);
GameHandler := AGameHandler
end;
procedure TActionThread.Execute;
var
OldTime: TDateTime;
ToWait: Integer;
begin
while not GameHandler.IsFinished do
begin
OldTime := Now;
Synchronize(@GameHandler.DoIteration);
{ Синхронизация с таймером. }
ToWait := Round(MSecsPerFrame - (Now - OldTime) * MSecsPerDay);
if ToWait > 0 then
Sleep(ToWait)
end;
end;
exports
MSecsPerFrame, Bitmaps, Field, Pieces,
Key_Space, Key_Left, Key_Right, Key_Down;
end.