www.pudn.com > 200589952618.rar > LBEND.PAS


unit lbend; 
 
interface 
type 
  Tlbend = class 
  public 
    FStatus: Byte; 
    FX, FY: Integer; 
  public 
    constructor Create; 
    procedure Rotate; 
    procedure Move(DX: Integer); 
    function Drop: Boolean; 
    procedure Draw; 
    function IsOver: Boolean; 
  end; 
implementation 
uses 
  Main; 
 
constructor Tlbend.Create; 
begin 
  FX := 4; 
  FY := 0; 
  FStatus := 0; 
  if not IsOver then 
    Draw; 
end; 
 
function TLBend.IsOver: Boolean; 
begin 
  if (BG[FX, FY] <> 0) or (BG[FX + 1, FY] <> 0) or 
    (BG[FX + 1, FY + 1] <> 0) or (BG[FX + 2, FY + 1] <> 0) then 
    Result := True 
  else 
    Result := False; 
end; 
 
function Tlbend.Drop: Boolean; 
begin 
  if (FStatus = 0) then 
  begin 
    if FY >= 18 then 
    begin 
      Result := False; 
    end 
    else if (BG[FX, FY + 1] = 0) and (BG[FX + 1, FY + 2] = 0) and (BG[FX + 2, FY + 2] = 0) then 
    begin 
      FY := FY + 1; 
      Draw; 
      Result := True; 
    end 
    else 
      Result := False; 
    if not Result then 
    begin 
      BG[FX, FY] := 6; 
      BG[FX + 1, FY] := 6; 
      BG[FX + 1, FY + 1] := 6; 
      BG[FX + 2, FY + 1] := 6; 
    end; 
  end 
  else 
  begin 
    if FY >= 17 then 
    begin 
      Result := False; 
    end 
    else if (BG[FX, FY + 3] = 0) and (BG[FX + 1, FY + 2] = 0) then 
    begin 
      FY := FY + 1; 
      Draw; 
      Result := True; 
    end 
    else 
      Result := False; 
    if not Result then 
    begin 
      BG[FX + 1, FY] := 6; 
      BG[FX, FY + 1] := 6; 
      BG[FX + 1, FY + 1] := 6; 
      BG[FX, FY + 2] := 6; 
    end; 
  end; 
end; 
 
procedure Tlbend.Move(DX: Integer); 
begin 
  if (FStatus = 0) then 
  begin 
    if (FX + DX >= 0) and (FX + DX <= 7) then 
    begin 
      if (BG[FX + DX, FY] = 0) and 
        (BG[FX + DX + 1, FY] = 0) and 
        (BG[FX + DX + 1, FY + 1] = 0) and 
        (BG[FX + DX + 2, FY + 1] = 0) then 
        FX := FX + DX; 
    end; 
  end 
  else 
  begin 
    if (FX + DX >= 0) and (FX + DX <= 8) then 
    begin 
      if (BG[FX + DX + 1, FY] = 0) and 
        (BG[FX + DX, FY + 1] = 0) and 
        (BG[FX + DX + 1, FY + 1] = 0) and 
        (BG[FX + DX, FY + 2] = 0) then 
        FX := FX + DX; 
    end; 
  end; 
  Draw; 
end; 
 
procedure Tlbend.Draw; 
begin 
  FillChar(FG, 200, #0); 
  if (FStatus = 0) then 
  begin 
    FG[Fx, 0 + Fy] := 6; 
    FG[Fx + 1, Fy] := 6; 
    FG[Fx + 1, 1 + Fy] := 6; 
    FG[Fx + 2, 1 + Fy] := 6; 
  end 
  else 
  begin 
    FG[Fx + 1, Fy] := 6; 
    FG[Fx + 1, Fy + 1] := 6; 
    FG[Fx, Fy + 1] := 6; 
    FG[Fx, Fy + 2] := 6; 
  end; 
end; 
 
procedure Tlbend.Rotate; 
begin 
  case FStatus of 
    0: if (FY < 19) then 
      begin 
        if (BG[FX, FY + 1] = 0) and (BG[FX, FY + 2] = 0) then 
        begin 
          FStatus := 1; 
        end; 
      end; 
    1: if (FX < 8) then 
      begin 
        if (BG[FX, FY] = 0) and (BG[FX + 2, FY + 1] = 0) then 
        begin 
          FStatus := 0; 
        end; 
      end; 
  end; 
  Draw; 
end; 
 
end.