⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 king.pas

📁 用于开发税务票据管理的软件
💻 PAS
字号:
unit King;

interface

uses
  SysUtils, WinTypes, Classes, Graphics, Piece;

type
//  TKingPtr = ^TKing;
  TKing = class(TPiece)
  private
    { Private declarations }
  protected
    { Protected declarations }
    procedure ChangeColour(NewVal: TColour); override;
    function GetStartingLocation(NumberOfItems: Byte): TPoint; override;
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;

    function IsInCheck(Where: TPoint): Boolean;
    function ValidMove(Where: TPoint): Boolean; override;
  published
    { Published declarations }
  end;

implementation

constructor TKing.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  if FileExists(FStartDir + 'Pictures\KingW.bmp') then
  begin
    Picture.LoadFromFile(FStartDir + 'Pictures\KingW.bmp');
    Picture.Graphic.Transparent := True;
  end;

  Hint := 'King';
  FPrefix := 'K';
  FValue := 10;
end;

function TKing.GetStartingLocation(NumberOfItems: byte): TPoint;
begin
  Result.X := 5;
  if Colour = cWhite then Result.Y := 1 else Result.Y := 8;
end;

function TKing.ValidMove(Where: TPoint): Boolean;
begin
  Result := False;

  { Check the following conditions:

    (1)  The x & y are in the range 1 - 8
    (2)  The king is not moving more than one square in x or y direction
    (3)  The new square is not the current square }

  if (Where.X in [1..8]) and (Where.Y in [1..8]) then
  begin
     { 1 }
     if (abs(Where.X - FX) <= 1) and (abs(Where.Y - FY) <= 1) and       { 2 }
         not ((Where.X = FX) and (Where.Y = FY)) then                    { 3 }
            Result := true
     else
       { Check for castling moves }
       if (NumberMoves = 0) and ((Where.X = 3) or (Where.X = 7)) then
         Result := ((Colour = cBlack) and (Where.Y = 8)) or
                   ((Colour = cWhite) and (Where.Y = 1));
  end;
end;

function TKing.IsInCheck(Where: TPoint): Boolean;
begin
     { I will have to figure out how to implement a check function --
       or should this be checked (hoho!) for in the main code?? The problem
       is that the king as it stands won't actually have knowledge of the
       other pieces.  Hmm.  Almost certainly will be in board code instead. 
       Ignore this code }
     result := false;
end;

procedure TKing.ChangeColour(NewVal: TColour);
var
  FileName: String;
begin
  inherited ChangeColour(NewVal);
  FileName := FStartDir + 'Pictures\King';
  if FPlayer = cBlack then
    FileName := FileName + 'B.bmp'
  else
    FileName := FileName + 'W.bmp';
    
  if FileExists(FileName) then
  begin
    Picture.LoadFromFile(FileName);
    Picture.Graphic.Transparent := True;
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -