精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>其他>>一个俄罗斯方块小游戏程序

主题:一个俄罗斯方块小游戏程序
发信人: teleme(PassWord)
整理人: teleme(2001-07-29 19:39:06), 站内信件
//****************Tetro2是一个about窗体
//***************Tetro1.pas
unit Tetris1;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, ExtCtrls, Buttons, ComCtrls;

const
  GlassWidth=10;
  GlassHeight=23;

var
  GlassWorkSheet:    array [1..GlassHeight,1..GlassWidth] of Byte;
  OldGlassWorkSheet: array [1..GlassHeight,1..GlassWidth] of Byte;

type
  TFigureWorksheet=array [1..4,1..4] of Byte;

const
  Triada: TFigureWorksheet=
    ((0,1,0,0),
     (1,1,1,0),
     (0,0,0,0),
     (0,0,0,0));
  LCorner: TFigureWorksheet=
    ((1,1,1,0),
     (1,0,0,0),
     (0,0,0,0),
     (0,0,0,0));
  RCorner: TFigureWorksheet=
    ((1,1,1,0),
     (0,0,1,0),
     (0,0,0,0),
     (0,0,0,0));
  LZigzag: TFigureWorksheet=
    ((1,1,0,0),
     (0,1,1,0),
     (0,0,0,0),
     (0,0,0,0));
  RZigzag: TFigureWorksheet=
    ((0,1,1,0),
     (1,1,0,0),
     (0,0,0,0),
     (0,0,0,0));
  Stick: TFigureWorksheet=
    ((1,1,1,1),
     (0,0,0,0),
     (0,0,0,0),
     (0,0,0,0));
  Box: TFigureWorksheet=
    ((1,1,0,0),
     (1,1,0,0),
     (0,0,0,0),
     (0,0,0,0));

const
  FigureWorkSheet: TFigureWorksheet=
    ((0,0,0,0),
     (0,0,0,0),
     (0,0,0,0),
     (0,0,0,0));

const
  BarWidth= 14;
  BarHeight=14;

  NextBarWidth= 9;
  NextBarHeight=9;

const
  TopOfs=    6;
  LeftOfs=   5;
  FieldWidth=4;

const
  MaxFigureNumber=7;
  MaxCornerNumber=4;
  MaxFigureSize=  4;
  MaxFigureColor= 7;

type
  TMoveDirect=  (mdDown,mdLeft,mdRight);
  TFigureCorner=(fc00,fc90,fc180,fc270);

type
  TTetro1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Timer1: TTimer;
    Bevel3: TBevel;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    SpeedButton7: TSpeedButton;
    SpeedButton8: TSpeedButton;
    Bevel1: TBevel;
    Bevel2: TBevel;
    Bevel4: TBevel;
    SpeedButton9: TSpeedButton;
    procedure FormPaint(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure SpeedButton8Click(Sender: TObject);
    procedure SpeedButton5Click(Sender: TObject);
    procedure SpeedButton6Click(Sender: TObject);
    procedure SpeedButton7Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure SpeedButton9Click(Sender: TObject);
  private
  public
    Level:        Byte;
    Score:        Longint;
    ReentTimer:   Boolean;
    ReentKeys:    Boolean;

    FigureActive: Boolean;
    FigureType:   Byte;
    FigureX:      Byte;
    FigureY:      Byte;
    FigureCorner: TFigureCorner;
    FigureMove:   TMoveDirect;

    FirstColor:   Byte;
    SecondColor:  Byte;
    FirstFigure:  Byte;
    SecondFigure: Byte;

    NextTopOfs:   Integer;
    NextLeftOfs:  Integer;

    RedrawSheet:  Boolean;

    function  FigureXSize: Byte;
    function  FigureYSize: Byte;
    procedure GenerateNewFigure;
    procedure ClearFigureIntoGlass;
    function  PutFigureIntoGlass(MoveDirect: TMoveDirect): Boolean;
    procedure RotateFigure;
    procedure ScanFillLines;
    procedure SetFigureColor;
  end;

var
  Tetro1: TTetro1;

implementation

uses Tetris2;

{$R *.DFM}

procedure TTetro1.FormPaint(Sender: TObject);
var
  X1,Y1,X2,Y2: Integer;
  NewRect:     TRect;
  I,J:         Byte;
  CurSheet:    TFigureWorksheet;
  NextColor:   TColor;
begin
  if RedrawSheet then FillChar(OldGlassWorkSheet,SizeOf(OldGlassWorkSheet),#255);
  for I := 1 to GlassHeight do
    for J := 1 to GlassWidth do begin
      if GlassWorkSheet[I,J]=OldGlassWorkSheet[I,J] then Continue;
      X1 := LeftOfs+(J-1)*BarWidth;
      X2 := X1+BarWidth;
      Y1 := TopOfs+(I-1)*BarHeight;
      Y2 := Y1+BarHeight;
      case GlassWorkSheet[I,J] of
        0: Canvas.Brush.Color := clNavy;
        1: Canvas.Brush.Color := clSilver;
        2: Canvas.Brush.Color := clRed;
        3: Canvas.Brush.Color := clLime;
        4: Canvas.Brush.Color := clBlue;
        5: Canvas.Brush.Color := clFuchsia;
        6: Canvas.Brush.Color := clAqua;
        7: Canvas.Brush.Color := clYellow;
        8: Canvas.Brush.Color := clWhite;
      end;
      if GlassWorkSheet[I,J]>0 then begin
        NewRect := Rect(X1+1,Y1+1,X2-1,Y2-1);
        Canvas.FillRect(NewRect);
        Canvas.Pen.Color := clGray;
        Canvas.MoveTo(X1,Y1);
        Canvas.LineTo(X1,Y2-1);
        Canvas.LineTo(X2-1,Y2-1);
        Canvas.Pen.Color := clWhite;
        Canvas.LineTo(X2-1,Y1);
        Canvas.LineTo(X1,Y1);
      end
      else begin
        NewRect := Rect(X1,Y1,X2,Y2);
        Canvas.FillRect(NewRect);
      end;
    end;
  case FirstFigure of
    0: Move(Triada,CurSheet,SizeOf(CurSheet));
    1: Move(LCorner,CurSheet,SizeOf(CurSheet));
    2: Move(RCorner,CurSheet,SizeOf(CurSheet));
    3: Move(LZigzag,CurSheet,SizeOf(CurSheet));
    4: Move(RZigzag,CurSheet,SizeOf(CurSheet));
    5: Move(Stick,CurSheet,SizeOf(CurSheet));
    6: Move(Box,CurSheet,SizeOf(CurSheet));
  end;
  case FirstColor of
    0: NextColor := clNavy;
    1: NextColor := clSilver;
    2: NextColor := clRed;
    3: NextColor := clLime;
    4: NextColor := clBlue;
    5: NextColor := clFuchsia;
    6: NextColor := clAqua;
    7: NextColor := clYellow;
    8: NextColor := clWhite;
  end;
  for I := 1 to MaxFigureSize-2 do
    for J := 1 to MaxFigureSize do begin
      X1 := NextLeftOfs+(J-1)*NextBarWidth;
      X2 := X1+NextBarWidth;
      Y1 := NextTopOfs+(I-1)*NextBarHeight;
      Y2 := Y1+NextBarHeight;
      if CurSheet[I,J]>0 then begin
        NewRect := Rect(X1+1,Y1+1,X2-1,Y2-1);
        Canvas.Brush.Color := NextColor;
        Canvas.FillRect(NewRect);
        Canvas.Pen.Color := clGray;
        Canvas.MoveTo(X1,Y1);
        Canvas.LineTo(X1,Y2-1);
        Canvas.LineTo(X2-1,Y2-1);
        Canvas.Pen.Color := clWhite;
        Canvas.LineTo(X2-1,Y1);
        Canvas.LineTo(X1,Y1);
      end
      else begin
        Canvas.Brush.Color := clSilver;
        NewRect := Rect(X1,Y1,X2,Y2);
        Canvas.FillRect(NewRect);
      end;
    end;
  Move(GlassWorkSheet,OldGlassWorkSheet,SizeOf(OldGlassWorkSheet));
end;

function TTetro1.FigureXSize: Byte;
var
  I,J,K: Byte;
begin
  K := 0;
  for J := 1 to MaxFigureSize do
    for I := 1 to MaxFigureSize do
      if FigureWorkSheet[J,I]>0 then
        if K<I then K := I;
FigureXSize := K;
end;

function TTetro1.FigureYSize: Byte;
var
I,J,K: Byte;
begin
K := 0;
for J := 1 to MaxFigureSize do
for I := 1 to MaxFigureSize do
if FigureWorkSheet[J,I]>0 then
        if K<J then K := J;
FigureYSize := K;
end;

procedure TTetro1.GenerateNewFigure;
begin
Timer1.Enabled := False;
SecondFigure := FirstFigure;
SecondColor := FirstColor;
FigureType := SecondFigure;
FigureX := 5;
FigureY := 0;
FigureCorner := fc270;
FillChar(FigureWorkSheet,SizeOf(FigureWorkSheet),0);
case FigureType of
0: Move(Triada,FigureWorkSheet,SizeOf(FigureWorkSheet));
1: Move(LCorner,FigureWorkSheet,SizeOf(FigureWorkSheet));
2: Move(RCorner,FigureWorkSheet,SizeOf(FigureWorkSheet));
3: Move(LZigzag,FigureWorkSheet,SizeOf(FigureWorkSheet));
4: Move(RZigzag,FigureWorkSheet,SizeOf(FigureWorkSheet));
5: Move(Stick,FigureWorkSheet,SizeOf(FigureWorkSheet));
6: Move(Box,FigureWorkSheet,SizeOf(FigureWorkSheet));
end;
SetFigureColor;
FigureMove := mdDown;
FirstFigure := Random(MaxFigureNumber);
FirstColor := Random(MaxFigureColor)+1;
Timer1.Enabled := True;
end;

procedure TTetro1.ClearFigureIntoGlass;
var
I,J: Byte;
begin
for J := 1 to FigureYSize do
for I := 1 to FigureXSize do
if FigureWorkSheet[J,I]>0 then
        GlassWorkSheet[FigureY+J,FigureX+I] := 0;
end;

function TTetro1.PutFigureIntoGlass(MoveDirect: TMoveDirect): Boolean;
var
  I,J: Byte;
begin
  PutFigureIntoGlass := True;
  if (FigureY+FigureYSize>GlassHeight) and (MoveDirect=mdDown) then begin
    Dec(FigureY);
    PutFigureIntoGlass := False;
    Exit;
  end
  else
    while (FigureX+FigureXSize>GlassWidth) and (MoveDirect=mdDown) do
       Dec(FigureX);
    for J := 1 to FigureYSize do begin
      for I := 1 to FigureXSize do begin
        if (FigureWorkSheet[J,I]>0) and
          (GlassWorkSheet[FigureY+J,FigureX+I]>0) then begin
          PutFigureIntoGlass := False;
          case MoveDirect of
            mdDown:  Dec(FigureY);
            mdRight: Dec(FigureX);
            mdLeft:  Inc(FigureX);
          end;
          Exit;
        end;
      end;
    end;
  for J := 1 to FigureYSize do
    for I := 1 to FigureXSize do
      if FigureWorkSheet[J,I]>0 then
        GlassWorkSheet[FigureY+J,FigureX+I] := FigureWorkSheet[J,I];
  RedrawSheet := False;
  FormPaint(Self);
  RedrawSheet := True;
end;

procedure TTetro1.ScanFillLines;
var
  I,J,K,L: byte;
begin
  ClearFigureIntoGlass;
  for I := 1 to GlassHeight do begin
    K := 0;
    for J := 1 to GlassWidth do
      if GlassWorkSheet[I,J]>0 then Inc(K);
    if K=GlassWidth then begin
      for L := I downto 1 do
        for J := 1 to GlassWidth do
          if L>1 then GlassWorkSheet[L,J] := GlassWorkSheet[L-1,J];
    end;
  end;
  PutFigureIntoGlass(FigureMove);
end;

procedure TTetro1.Timer1Timer(Sender: TObject);
var
  I,J: Byte;
begin
  if ReentTimer then Exit
    else ReentTimer := True;
  if StrToInt(Label3.Caption)<>Level then Label3.Caption := IntToStr(Level);
  if StrToInt(Label4.Caption)<>Score then Label4.Caption := IntToStr(Score);
  if not FigureActive then begin
    GenerateNewFigure;
    if not PutFigureIntoGlass(FigureMove) then begin
      MessageDlg('Glass is full... Game over!',mtInformation,[mbOk],0);
      FillChar(OldGlassWorkSheet,SizeOf(OldGlassWorkSheet),#255);
      Timer1.Enabled := False;
      SpeedButton1.Enabled := False;
      SpeedButton2.Enabled := False;
      SpeedButton3.Enabled := False;
      SpeedButton4.Enabled := False;
      SpeedButton5.Enabled := True;
      SpeedButton6.Enabled := False;
      SpeedButton7.Enabled := False;
      ClearFigureIntoGlass;
      FigureActive := False;
      Level := 1;
      Score := 0;
      for I := 1 to GlassHeight do
        for J := 1 to GlassWidth do GlassWorkSheet[I,J] := 0;
      RedrawSheet := False;
      FormPaint(Self);
      RedrawSheet := True;
    end;
    FigureActive := True;
  end
  else begin
    ClearFigureIntoGlass;
    Inc(FigureY);
    if not PutFigureIntoGlass(FigureMove) then begin
      case FigureType of
        0: Score := Score+10;
        1: Score := Score+30;
        2: Score := Score+30;
        3: Score := Score+25;
        4: Score := Score+25;
        5: Score := Score+15;
        6: Score := Score+20;
      end;
      if Score>300 then Level := 2;
      if Score>700 then Level := 3;
      if Score>1300 then Level := 4;
      if Score>2000 then Level := 5;
      if Score>3000 then Level := 6;
      if Score>5000 then Level := 7;
      Timer1.Interval := Round((7.1-Level)*100);
      FigureActive := False;
    end;
  end;
  ScanFillLines;
  ReentTimer := False;
end;

procedure TTetro1.FormCreate(Sender: TObject);
begin
  FillChar(OldGlassWorkSheet,SizeOf(OldGlassWorkSheet),#255);
  RedrawSheet := True;
  with Bevel3 do begin
    Top := TopOfs-FieldWidth;
    Left := LeftOfs-FieldWidth;
    Width := GlassWidth*BarWidth+FieldWidth*2;
    Height := GlassHeight*BarHeight+FieldWidth*2;
  end;
  ClientWidth := Bevel3.Width+FieldWidth*3+SpeedButton5.Width;
  ClientHeight := Bevel3.Height+FieldWidth*2;
  SpeedButton1.Left := Bevel3.Width+FieldWidth*2-2;
  SpeedButton2.Left := SpeedButton1.Left+SpeedButton1.Width+1;
  SpeedButton3.Left := SpeedButton2.Left+SpeedButton2.Width+1;
  SpeedButton4.Left := SpeedButton2.Left;
  SpeedButton5.Left := Bevel3.Width+FieldWidth*2;
  SpeedButton6.Left := SpeedButton5.Left;
  SpeedButton7.Left := SpeedButton5.Left;
  SpeedButton8.Left := SpeedButton5.Left;
  SpeedButton9.Left := SpeedButton5.Left;
  Label1.Left := Bevel3.Width+FieldWidth*2;
  Label2.Left := Label1.Left;
  Bevel1.Left := Label1.Left;
  Bevel1.Width := SpeedButton5.Width;
  Bevel2.Left := Label1.Left;
  Bevel2.Width := SpeedButton5.Width;
  Label3.Left := Bevel1.Left+FieldWidth;
  Label4.Left := Bevel1.Left+FieldWidth;
  Bevel4.Top := SpeedButton9.Top+SpeedButton9.Height+4;
  Bevel4.Left := SpeedButton9.Left+SpeedButton9.Width div 4-4;
  Bevel4.Height := NextBarHeight*(MaxFigureSize-1)+4;
  Bevel4.Width :=NextBarWidth*MaxFigureSize+8;
  NextTopOfs := SpeedButton9.Top+SpeedButton9.Height+8;
  NextLeftOfs := SpeedButton9.Left+SpeedButton9.Width div 4;
  Level := 1;
  Timer1.Interval := Round((6.5-Level)*100);
  Score := 0;
  ReentTimer := False;
  ReentKeys := False;
  FigureActive := False;
  Label3.Caption := '1';
  Label4.Caption := '0';
  Randomize;
  FirstFigure := Random(MaxFigureNumber);
  FirstColor := Random(MaxFigureColor)+1;
end;

procedure TTetro1.RotateFigure;
var
  OldFigureCornet: TFigureCorner;
  CurSheet:        TFigureWorksheet;
  OldFigureCorner: TFigureCorner;
procedure RotateFigureWorksheet;
var
  VertFlag:  Byte;
  HorizFlag: Byte;
  K,I,J:     Byte;
begin
  FillChar(FigureWorkSheet,SizeOf(FigureWorkSheet),0);
  case FigureType of
    0: Move(Triada,FigureWorkSheet,SizeOf(FigureWorkSheet));
    1: Move(LCorner,FigureWorkSheet,SizeOf(FigureWorkSheet));
    2: Move(RCorner,FigureWorkSheet,SizeOf(FigureWorkSheet));
    3: Move(LZigzag,FigureWorkSheet,SizeOf(FigureWorkSheet));
    4: Move(RZigzag,FigureWorkSheet,SizeOf(FigureWorkSheet));
    5: Move(Stick,FigureWorkSheet,SizeOf(FigureWorkSheet));
    6: Move(Box,FigureWorkSheet,SizeOf(FigureWorkSheet));
  end;
  FillChar(CurSheet,SizeOf(CurSheet),0);
  for K := 0 to Byte(FigureCorner) do begin
    for I := 1 to MaxFigureSize do
      for J := 1 to MaxFigureSize do
        CurSheet[J,I] := FigureWorkSheet[MaxFigureSize-I+1,J];
    Move(CurSheet,FigureWorkSheet,SizeOf(FigureWorkSheet));
  end;
  SetFigureColor;
  HorizFlag := 0;
  while HorizFlag=0 do begin
    for I := 1 to MaxFigureSize do
      if FigureWorkSheet[1,I]>0 then HorizFlag := 1;
    if HorizFlag=0 then begin
      for J := 1 to MaxFigureSize-1 do
        for I := 1 to MaxFigureSize do
          FigureWorkSheet[J,I] := FigureWorkSheet[J+1,I];
      for J := 1 to MaxFigureSize do
        FigureWorkSheet[MaxFigureSize,J] := 0;
    end;
  end;
  VertFlag := 0;
  while VertFlag=0 do begin
    for J := 1 to MaxFigureSize do
      if FigureWorkSheet[J,1]>0 then VertFlag := 1;
    if VertFlag=0 then begin
      for J := 1 to MaxFigureSize do
        for I := 1 to MaxFigureSize-1 do
          FigureWorkSheet[J,I] := FigureWorkSheet[J,I+1];
      for J := 1 to MaxFigureSize do
        FigureWorkSheet[J,MaxFigureSize] := 0;
    end;
  end;
end;
begin
  ClearFigureIntoGlass;
  OldFigureCorner := FigureCorner;
  if FigureCorner>fc00 then Dec(FigureCorner)
    else FigureCorner := fc270;
  RotateFigureWorksheet;
  if not PutFigureIntoGlass(mdDown) then begin
    FigureCorner := OldFigureCorner;
    RotateFigureWorksheet;
    PutFigureIntoGlass(mdDown);
  end;
end;

procedure TTetro1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ReentKeys then Exit
    else ReentKeys := True;
  if not FigureActive then begin
    ReentKeys := False;
    Exit;
  end;
  case Key of
    VK_UP:    RotateFigure;
    VK_DOWN,
    VK_SPACE: begin
                repeat
                  ClearFigureIntoGlass;
                  Inc(FigureY);
                until not PutFigureIntoGlass(mdDown);
                Inc(Score,5);
              end;
    VK_LEFT:  if FigureX>0 then begin
                ClearFigureIntoGlass;
                Dec(FigureX);
                PutFigureIntoGlass(mdLeft);
              end;
    VK_RIGHT: if FigureX+FigureXSize<GlassWidth then begin
ClearFigureIntoGlass;
Inc(FigureX);
PutFigureIntoGlass(mdRight);
end;
end;
ReentKeys := False;
end;

procedure TTetro1.SetFigureColor;
var
I,J: Byte;
begin
for I := 1 to MaxFigureSize do
for J := 1 to MaxFigureSize do
if FigureWorkSheet[I,J]>0 then FigureWorkSheet[I,J] := SecondColor;
end;

procedure TTetro1.SpeedButton8Click(Sender: TObject);
begin
  if MessageDlg('Exit programm?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
    Application.Terminate;
end;

procedure TTetro1.SpeedButton5Click(Sender: TObject);
begin
  Timer1.Enabled := True;
  SpeedButton5.Enabled := False;
  SpeedButton1.Enabled := True;
  SpeedButton2.Enabled := True;
  SpeedButton3.Enabled := True;
  SpeedButton4.Enabled := True;
  SpeedButton6.Enabled := True;
  SpeedButton7.Enabled := True;
end;

procedure TTetro1.SpeedButton6Click(Sender: TObject);
begin
  if Timer1.Enabled then begin
    Timer1.Enabled := False;
    SpeedButton1.Enabled := False;
    SpeedButton2.Enabled := False;
    SpeedButton3.Enabled := False;
    SpeedButton4.Enabled := False;
    SpeedButton7.Enabled := False;
  end
  else begin
    Timer1.Enabled := True;
    SpeedButton1.Enabled := True;
    SpeedButton2.Enabled := True;
    SpeedButton3.Enabled := True;
    SpeedButton4.Enabled := True;
    SpeedButton7.Enabled := True;
  end;
end;

procedure TTetro1.SpeedButton7Click(Sender: TObject);
var
  I,J: Byte;
begin
  Timer1.Enabled := False;
  ClearFigureIntoGlass;
  FigureActive := False;
  Level := 1;
  Score := 0;
  for I := 1 to GlassHeight do
    for J := 1 to GlassWidth do GlassWorkSheet[I,J] := 0;
  RedrawSheet := False;
  FormPaint(Self);
  RedrawSheet := True;
  Timer1.Enabled := True;
end;

procedure TTetro1.SpeedButton2Click(Sender: TObject);
begin
  Timer1.Enabled := False;
  RotateFigure;
  Timer1.Enabled := True;
end;

procedure TTetro1.SpeedButton1Click(Sender: TObject);
begin
  Timer1.Enabled := False;
  if FigureX>0 then begin
    ClearFigureIntoGlass;
    Dec(FigureX);
    PutFigureIntoGlass(mdLeft);
  end;
  Timer1.Enabled := True;
end;

procedure TTetro1.SpeedButton3Click(Sender: TObject);
begin
  Timer1.Enabled := False;
  if FigureX+FigureXSize<GlassWidth then begin
ClearFigureIntoGlass;
Inc(FigureX);
PutFigureIntoGlass(mdRight);
end;
Timer1.Enabled := True;
end;

procedure TTetro1.SpeedButton4Click(Sender: TObject);
begin
Timer1.Enabled := False;
repeat
ClearFigureIntoGlass;
Inc(FigureY);
until not PutFigureIntoGlass(mdDown);
Inc(Score,5);
Timer1.Enabled := True;
end;

procedure TTetro1.SpeedButton9Click(Sender: TObject);
var
OldState: Boolean;
begin
OldState := Timer1.Enabled;
Timer1.Enabled := False;
Tetro2.ShowModal;
Timer1.Enabled := OldState;
end;

end.

//*****************Tetro1.dfm
object Tetro1: TTetro1
Left = 309
Top = 141
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
Caption = 'Simple tetris'
ClientHeight = 271
ClientWidth = 192
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = []
Icon.Data = {
0000010001002020100000000000E80200001600000028000000200000004000
0000010004000000000080020000000000000000000000000000000000000000
0000000080000080000000808000800000008000800080800000C0C0C0008080
80000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000
0000000000000000000000000000000000000000000000000000000000000000
00000000F888888880F888888880000000000000F777777780F7777777800099
0BB0BB00F777777780F77777778000990BB0BB00F777777780F7777777800000
00000000F777777780F77777778000AA0EE0EE00F777777780F77777778000AA
0EE0EE00F777777780F77777778000000EE00000F777777780F77777778000EE
EEEEEE00FFFFFFFFF0FFFFFFFFF000EEEEEEEE000000000000000000000000EE
EEEEEE000000000000F88888888000EEEEEEEE0BB099000000F77777778000EE
EEEEEE0BB099000000F77777778000EEEEEEEE000000000000F77777778000EE
EEEEEEEEEEEE000000F77777778000EEEEEEEEEEEEEE000000F77777778000EE
0000EEEEEEEE000000F77777778000EE0AA0EEEEEEEE000000F77777778000EE
0AA0EEEEEEEE000000FFFFFFFFF000EE0000EEEEEEEE000000000000000000EE
0AA0EEEEEEEE000000F88888888000EE0AA0EEEEEEEE000000F77777778000EE
0000000EEEEE000000F77777778000EE0AA0AA0EEEEE000000F77777778000EE
0AA0AA0EEEEE000000F77777778000EE0000000EEEEE000000F77777778000EE
EEEEEEEEEEEE000000F77777778000EEEEEEEEEEEEEE000000F7777777800000
000000000000000000FFFFFFFFF000000000000000000000000000000000FFFF
FFFFFFE000008000000080000000800000008000000080000000800000008000
0000800000008000000080000000800078008000780080007800800078008000
7800800078008000780080007800800078008000780080007800800078008000
7800800078008000780080007800800078008000780080007800FFFFF800}
OldCreateOrder = True
Position = poScreenCenter
Visible = True
OnCreate = FormCreate
OnKeyDown = FormKeyDown
OnPaint = FormPaint
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 128
Top = 171
Width = 32
Height = 13
Caption = 'Level'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
end
object Label2: TLabel
Left = 128
Top = 206
Width = 34
Height = 13
Caption = 'Score'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
end
object Label3: TLabel
Left = 131
Top = 188
Width = 12
Height = 13
Caption = '99'
end
object Label4: TLabel
Left = 131
Top = 223
Width = 30
Height = 13
Caption = '99999'
end
object Bevel3: TBevel
Left = 3
Top = 3
Width = 115
Height = 264
end
object SpeedButton1: TSpeedButton
Left = 128
Top = 126
Width = 21
Height = 21
Hint = 'Move left'
Enabled = False
Glyph.Data = {
76010000424D7601000000000000760000002800000020000000100000000100
04000000000000010000120B0000120B00001000000000000000000000000000
800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3333333333333333333333333333333333333333333333333333333333333333
3333333333333FF3333333333333003333333333333F77F33333333333009033
333333333F7737F333333333009990333333333F773337FFFFFF330099999000
00003F773333377777770099999999999990773FF33333FFFFF7330099999000
000033773FF33777777733330099903333333333773FF7F33333333333009033
33333333337737F3333333333333003333333333333377333333333333333333
3333333333333333333333333333333333333333333333333333333333333333
3333333333333333333333333333333333333333333333333333}
NumGlyphs = 2
ParentShowHint = False
ShowHint = True
OnClick = SpeedButton1Click
end
object SpeedButton2: TSpeedButton
Left = 149
Top = 126
Width = 21
Height = 21
Hint = 'Rotate'
Enabled = False
Glyph.Data = {
CE070000424DCE07000000000000360000002800000024000000120000000100
1800000000009807000000000000000000000000000000000000008080008080
0080800080800080800080808000008000008000008000008000008000000080
80008080008080008080008080008080008080008080008080008080008080FF
FFFF808080808080808080808080808080808080008080FFFFFF008080008080
0080800080800080800080008000000080800080808000000080000080000080
0000800000800000800080000080000000808000808000808000808000808080
8080808080FFFFFF008080808080008080008080008080008080008080008080
808080808080FFFFFF0080800080800080800080800080000080008000008000
0000800000800000800000800000800000800000800000800000800080000000
8080008080008080008080808080FFFFFF808080808080008080008080FFFFFF
FFFFFFFFFFFFFFFFFFFFFFFF008080008080808080FFFFFF0080800080800080
8000800000800000800000800000800000800000FF0000FF0000FF0000FF0000
FF00008000008000008000800000008080008080008080808080FFFFFF008080
008080008080FFFFFF808080808080808080808080808080FFFFFF0080800080
80808080FFFFFF00808000808000800000800000800000800000800000FF0000
808000808000808000808000808000FF00008000008000008000800000008080
008080808080FFFFFF008080008080FFFFFF8080800080800080800080800080
80008080808080FFFFFF008080008080808080FFFFFF00808000800000800000
800000800000800000808000808000808000808000808000808000808000FF00
008000008000800000008080008080808080FFFFFF0080800080808080800080
80008080008080008080008080008080008080808080FFFFFF008080808080FF
FFFF008080008000008000008000008000008000008000008080008080008080
00808000808000808000FF00800000800000800000008080008080808080FFFF
FFFFFFFFFFFFFFFFFFFF808080FFFFFF00808000808000808000808000808080
808080808080808080808000808000808000FF0000FF0000FF0000FF0000FF00
00FF0000FF000080800080800080800080800080800080800080800080800080
8000808000808080808080808080808080808080808080808080808000808000
8080008080008080008080008080008080008080008080008080008080008080
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000808000808000808000808000808000808000808000808000
8080008080008080008080008080008080008080FFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFF0080800080800080800080800080800080800080800080800080
8000808000808000808080000080000080000080000080000080000000808000
8080FFFFFFFFFFFFFFFFFFFFFFFF008080008080008080008080008080008080
80808080808080808080808080808080808000808000FF008000008000008000
0000808000808000808000808000808000808000FF0000800000800000800000
8000008000800000008080808080808080808080808080FFFFFF008080008080
008080008080008080808080FFFFFF0080800080800080800080808080800080
8000FF0000800000800080000000808000808000808000808000808000808000
808000FF00008000008000008000008000800000008080808080FFFFFF008080
808080FFFFFF0080800080800080800080800080800080808080800080800080
8000808000808080808000808000808000FF0000800000800080000000808000
8080008080008080008080800000800000008000008000008000008000800000
008080008080808080008080008080808080FFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF80808080808000808000808000808000808080808000808000808000FF0000
8000008000008000800000800000800000800000800000008000008000008000
008000008000008000800000008080008080808080FFFFFF0080800080808080
80808080808080808080808080008080008080008080FFFFFFFFFFFF00808080
808000808000808000808000FF00008000008000008000008000008000008000
00800000800000800000800000FF0000FF000080008000000080800080800080
80808080FFFFFFFFFFFF008080008080008080008080008080008080FFFFFFFF
FFFF808080808080FFFFFF80808000808000808000808000808000FF0000FF00
00800000800000800000800000800000800000FF0000FF0000808000808000FF
00008080008080008080008080008080808080808080FFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF808080808080008080008080808080008080008080008080
00808000808000808000808000FF0000FF0000FF0000FF0000FF0000FF000080
8000808000808000808000808000808000808000808000808000808000808000
8080808080808080808080808080808080808080008080008080008080008080
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000808000808000808000808000808000808000808000808000
8080008080008080008080008080008080008080008080008080008080008080
008080008080008080008080008080008080}
NumGlyphs = 2
ParentShowHint = False
ShowHint = True
OnClick = SpeedButton2Click
end
object SpeedButton3: TSpeedButton
Left = 170
Top = 126
Width = 21
Height = 21
Hint = 'Move right'
Enabled = False
Glyph.Data = {
76010000424D7601000000000000760000002800000020000000100000000100
04000000000000010000120B0000120B00001000000000000000000000000000
800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3333333333333333333333333333333333333333333333333333333333333333
3333333333333333333333333333333333333333333FF3333333333333003333
3333333333773FF3333333333309003333333333337F773FF333333333099900
33333FFFFF7F33773FF30000000999990033777777733333773F099999999999
99007FFFFFFF33333F7700000009999900337777777F333F7733333333099900
33333333337F3F77333333333309003333333333337F77333333333333003333
3333333333773333333333333333333333333333333333333333333333333333
3333333333333333333333333333333333333333333333333333}
NumGlyphs = 2
ParentShowHint = False
ShowHint = True
OnClick = SpeedButton3Click
end
object SpeedButton4: TSpeedButton
Left = 149
Top = 148
Width = 21
Height = 21
Hint = 'Put'
Enabled = False
Glyph.Data = {
76010000424D7601000000000000760000002800000020000000100000000100
04000000000000010000120B0000120B00001000000000000000000000000000
800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333303333
333333333337F33333333333333033333333333333373F333333333333090333
33333333337F7F33333333333309033333333333337373F33333333330999033
3333333337F337F33333333330999033333333333733373F3333333309999903
333333337F33337F33333333099999033333333373333373F333333099999990
33333337FFFF3FF7F33333300009000033333337777F77773333333333090333
33333333337F7F33333333333309033333333333337F7F333333333333090333
33333333337F7F33333333333309033333333333337F7F333333333333090333
33333333337F7F33333333333300033333333333337773333333}
NumGlyphs = 2
ParentShowHint = False
ShowHint = True
OnClick = SpeedButton4Click
end
object SpeedButton5: TSpeedButton
Left = 127
Top = 4
Width = 62
Height = 20
Hint = 'Start game'
Caption = '&Start'
Glyph.Data = {
CE070000424DCE07000000000000360000002800000024000000120000000100
1800000000009807000000000000000000000000000000000000008080008080
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000808000808000808000808000808000808000808000808000
8080008080008080008080008080008080008080008080008080008080008080
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000808000808000808000808000808000808000808000808000
8080008080008080008080008080FFFFFF008080008080008080008080008080
0080800080800080800080800080800080800080800080800080800080800080
8080000080000000808000808000808000808000808000808000808000808000
8080008080008080008080008080008080008080008080808080808080FFFFFF
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000808080000000800000800080000000808000808000808000
8080008080008080008080008080008080008080008080008080008080008080
808080008080008080808080FFFFFF0080800080800080800080800080800080
8000808000808000808000808000808000808080000000800000800000800000
8000800000008080008080008080008080008080008080008080008080008080
008080008080008080808080008080008080008080008080808080FFFFFF0080
8000808000808000808000808000808000808000808000808000808080000000
8000008000008000008000008000008000800000008080008080008080008080
0080800080800080800080800080800080808080800080800080800080800080
80008080008080808080FFFFFF00808000808000808000808000808000808000
808000808080000000800000800000800000FF00008000008000008000008000
800000008080008080008080008080008080008080008080008080808080FFFF
FF008080008080808080FFFFFF008080008080008080808080FFFFFF00808000
808000808000808000808000808000808000800000800000800000FF00008080
00FF000080000080000080008000000080800080800080800080800080800080
80008080008080808080FFFFFF008080808080008080808080FFFFFF00808000
8080808080FFFFFF00808000808000808000808000808000808000808000FF00
00800000FF0000808000808000808000FF000080000080000080008000000080
80008080008080008080008080008080008080808080FFFFFF80808000808000
8080008080808080FFFFFF008080008080808080FFFFFF008080008080008080
00808000808000808000808000FF0000808000808000808000808000808000FF
0000800000800000800080000000808000808000808000808000808000808000
8080808080008080008080008080008080008080808080FFFFFF008080008080
808080FFFFFF0080800080800080800080800080800080800080800080800080
8000808000808000808000808000FF0000800000800000800080000000808000
8080008080008080008080008080008080008080008080008080008080008080
008080808080FFFFFF008080008080808080FFFFFF0080800080800080800080
8000808000808000808000808000808000808000808000808000808000FF0000
8000008000008000800000008080008080008080008080008080008080008080
008080008080008080008080008080008080808080FFFFFF0080800080808080
80FFFFFF00808000808000808000808000808000808000808000808000808000
808000808000808000808000FF00008000008000008000800000008080008080
0080800080800080800080800080800080800080800080800080800080800080
80808080FFFFFF008080008080808080FFFFFF00808000808000808000808000
808000808000808000808000808000808000808000808000808000FF00008000
0080000080008000000080800080800080800080800080800080800080800080
80008080008080008080008080008080808080FFFFFF008080008080808080FF
FFFF008080008080008080008080008080008080008080008080008080008080
00808000808000808000FF000080000080008000000080800080800080800080
8000808000808000808000808000808000808000808000808000808000808080
8080FFFFFF008080808080FFFFFF008080008080008080008080008080008080
00808000808000808000808000808000808000808000808000FF000080000080
0000808000808000808000808000808000808000808000808000808000808000
8080008080008080008080008080808080FFFFFF808080008080008080008080
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000FF0000808000808000808000808000808000808000808000
8080008080008080008080008080008080008080008080008080008080808080
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000808000808000808000808000808000808000808000808000
8080008080008080008080008080008080008080008080008080008080008080
008080008080008080008080008080008080}
NumGlyphs = 2
ParentShowHint = False
ShowHint = True
OnClick = SpeedButton5Click
end
object SpeedButton6: TSpeedButton
Left = 127
Top = 26
Width = 62
Height = 21
Hint = 'Pause game'
Caption = '&Pause'
Enabled = False
NumGlyphs = 2
ParentShowHint = False
ShowHint = True
OnClick = SpeedButton6Click
end
object SpeedButton7: TSpeedButton
Left = 127
Top = 49
Width = 62
Height = 20
Hint = 'Reset game'
Caption = '&Reset'
Enabled = False
NumGlyphs = 2
ParentShowHint = False
ShowHint = True
OnClick = SpeedButton7Click
end
object SpeedButton8: TSpeedButton
Left = 127
Top = 247
Width = 62
Height = 21
Hint = 'Exit program'
Caption = '&Close'
Glyph.Data = {
CE070000424DCE07000000000000360000002800000024000000120000000100
1800000000009807000000000000000000000000000000000000008080008080
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000808000808000808000808000808000808000808000808000
8080008080008080008080008080008080008080008080008080008080008080
0080800080800080800080800080800080808080808080800080800080800080
8000808000808000808000808000808000808000808000808000808000808000
8080008080008080008080FFFFFF008080008080008080008080008080008080
0080800080800080800080800080800080800080800080800080800000FF0000
800000808080800080800080800080800080800080800000FF80808000808000
8080008080008080008080008080008080008080808080808080FFFFFF008080
008080008080008080008080008080FFFFFF0080800080800080800080800080
800080800080800000FF00008000008000008080808000808000808000808000
00FF000080000080808080008080008080008080008080008080008080808080
FFFFFF008080808080FFFFFF008080008080008080FFFFFF808080808080FFFF
FF0080800080800080800080800080800080800000FF00008000008000008000
00808080800080800000FF000080000080000080000080808080008080008080
008080008080008080808080FFFFFF008080008080808080FFFFFF008080FFFF
FF808080008080008080808080FFFFFF00808000808000808000808000808000
80800000FF000080000080000080000080808080000080000080000080000080
000080808080008080008080008080008080008080808080FFFFFF0080800080
80008080808080FFFFFF808080008080008080008080008080808080FFFFFF00
80800080800080800080800080800080800000FF000080000080000080000080
0000800000800000800000808080800080800080800080800080800080800080
80008080808080FFFFFF00808000808000808080808000808000808000808000
8080FFFFFF808080008080008080008080008080008080008080008080008080
0000FF0000800000800000800000800000800000808080800080800080800080
80008080008080008080008080008080008080808080FFFFFF00808000808000
8080008080008080008080FFFFFF808080008080008080008080008080008080
0080800080800080800080800080800000800000800000800000800000808080
8000808000808000808000808000808000808000808000808000808000808000
8080808080FFFFFF008080008080008080008080008080808080008080008080
0080800080800080800080800080800080800080800080800080800000FF0000
8000008000008000008080808000808000808000808000808000808000808000
8080008080008080008080008080008080808080FFFFFF008080008080008080
8080800080800080800080800080800080800080800080800080800080800080
800080800000FF00008000008000008000008000008080808000808000808000
8080008080008080008080008080008080008080008080008080008080808080
008080008080008080008080808080FFFFFF0080800080800080800080800080
800080800080800080800080800000FF00008000008000008080808000008000
0080000080808080008080008080008080008080008080008080008080008080
008080008080808080008080008080008080008080008080808080FFFFFF0080
800080800080800080800080800080800080800080800000FF00008000008000
00808080800080800000FF000080000080000080808080008080008080008080
008080008080008080008080008080808080008080008080008080808080FFFF
FF008080008080808080FFFFFF00808000808000808000808000808000808000
80800000FF0000800000808080800080800080800080800000FF000080000080
000080808080008080008080008080008080008080008080808080FFFFFF0080
80008080808080008080808080FFFFFF008080008080808080FFFFFF00808000
80800080800080800080800080800080800000FF000080008080008080008080
0080800080800000FF0000800000800000800080800080800080800080800080
80008080808080FFFFFFFFFFFF808080008080008080008080808080FFFFFF00
8080008080808080FFFFFF008080008080008080008080008080008080008080
0080800080800080800080800080800080800080800000FF0000800000FF0080
8000808000808000808000808000808000808080808080808000808000808000
8080008080008080808080FFFFFFFFFFFFFFFFFF808080008080008080008080
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000808000808000808000808000808000808000808000808000
8080008080008080008080008080008080008080008080808080808080808080
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000808000808000808000808000808000808000808000808000
8080008080008080008080008080008080008080008080008080008080008080
008080008080008080008080008080008080}
NumGlyphs = 2
ParentShowHint = False
ShowHint = True
OnClick = SpeedButton8Click
end
object Bevel1: TBevel
Left = 127
Top = 185
Width = 62
Height = 18
end
object Bevel2: TBevel
Left = 127
Top = 220
Width = 62
Height = 17
end
object Bevel4: TBevel
Left = 127
Top = 94
Width = 62
Height = 30
end
object SpeedButton9: TSpeedButton
Left = 127
Top = 72
Width = 62
Height = 20
Hint = 'Show help'
Caption = '&Help'
Glyph.Data = {
CE070000424DCE07000000000000360000002800000024000000120000000100
1800000000009807000000000000000000000000000000000000008080008080
0080800080800080800080800080800080808080008080000080800080800080
8000808000808000808000808000808000808000808000808000808000808000
8080008080FFFFFFFFFFFF008080008080008080008080008080008080008080
0080800080800080800080800080800080800080800080800080808080008000
0080000080800000808000808000808000808000808000808000808000808000
8080008080008080008080008080008080808080808080FFFFFF008080008080
0080800080800080800080800080800080800080800080800080800080800080
80008080008080FFFF0080800080800080000000808000808000808000808000
8080008080008080008080008080008080008080008080008080808080FFFFFF
008080808080FFFFFF0080800080800080800080800080800080800080800080
80008080008080008080008080008080008080008080FFFF0080800080800000
8080008080008080008080008080008080008080008080008080008080008080
008080008080808080FFFFFFFFFFFF808080FFFFFF0080800080800080800080
8000808000808000808000808000808000808000808000808000808000808000
8080008080008080008080008080008080008080008080008080008080008080
0080800080800080800080800080800080800080808080808080800080800080
8000808000808000808000808000808000808000808000808000808000808000
8080008080008080008080008080800000800000808000008080008080008080
0080800080800080800080800080800080800080800080800080800080800080
80008080FFFFFFFFFFFF00808000808000808000808000808000808000808000
8080008080008080008080008080008080008080008080808000808000808000
8000000080800080800080800080800080800080800080800080800080800080
80008080008080008080008080808080808080808080FFFFFF00808000808000
8080008080008080008080008080008080008080008080008080008080008080
008080FFFF008080008080008000000080800080800080800080800080800080
80008080008080008080008080008080008080008080808080FFFFFF00808080
8080FFFFFF008080008080008080008080008080008080008080008080008080
008080008080008080008080008080FFFF008080008080008080008000000080
8000808000808000808000808000808000808000808000808000808000808000
8080808080FFFFFF008080808080FFFFFF008080008080008080008080008080
008080008080008080008080008080008080008080008080008080008080FFFF
0080800080800080800080000000808000808000808000808000808000808000
8080008080008080008080008080808080FFFFFF008080008080808080FFFFFF
0080800080800080800080800080800080800080800080800080800080800080
80008080008080008080008080FFFF0080800080800080800080000000808000
8080008080008080008080008080008080008080008080008080008080808080
FFFFFF008080008080808080FFFFFF0080800080800080800080800080800080
80008080008080008080008080800000800000008080008080008080FFFF0080
8000808000808000800000008080008080008080008080008080008080008080
008080FFFFFF008080008080808080FFFFFF008080008080808080FFFFFF0080
8000808000808000808000808000808000808000808080800080800080800080
0000008080008080008080FFFF00808000808000800000008080008080008080
008080008080008080008080808080808080FFFFFF008080008080808080FFFF
FF008080008080808080FFFFFF00808000808000808000808000808000808000
8080FFFF00808000808000808000800000800000800000808000808000808000
800000008080008080008080008080008080008080808080FFFFFF0080808080
80FFFFFFFFFFFFFFFFFF808080008080008080808080FFFFFF00808000808000
8080008080008080008080008080008080FFFF00808000808000808000808000
8080008080008080008080008080000080800080800080800080800080800080
80808080FFFFFF00808000808080808080808080808000808000808000808080
8080FFFFFF008080008080008080008080008080008080008080008080008080
FFFF00FFFF008080008080008080008080008080008080000080800080800080
80008080008080008080008080008080808080FFFFFFFFFFFF00808000808000
8080008080008080008080808080008080008080008080008080008080008080
008080008080008080008080008080008080FFFF00FFFF00FFFF00FFFF00FFFF
0000808000808000808000808000808000808000808000808000808000808080
8080808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080008080008080008080
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000808000808000808000808000808000808000808000808000
8080008080008080008080008080008080808080808080808080808080808080
008080008080008080008080008080008080}
NumGlyphs = 2
ParentShowHint = False
ShowHint = True
OnClick = SpeedButton9Click
end
object Timer1: TTimer
Enabled = False
Interval = 100
OnTimer = Timer1Timer
Left = 4
Top = 4
end
end


----
fire engine   

    

[关闭][返回]