Sakktábla

 

Készítsünk programot, mely egy sakktáblát jelenít meg. Ügyeljünk arra, hogy a tábla szabályos legyen (az a1 mezőnek sötétnek kell lenni). Vegyük figyelembe azt is, hogy a táblán később figurákat kell elhelyezni, azaz a sötét ne fekete és a világos mező ne fehér legyen. A fehér és fekete maradjon meg a figurák színének. Ha a formot átméretezzük, áthelyezzük, akkor rajzolja újra a táblát, ne legyen a sakktábla töredezett.

 

         A program futási képe:

 

 

         A program listája:

 

unit USakkTabla;

interface

uses
  Windows, MessagesSysUtilsVariantsClasses,

  GraphicsControlsFormsDialogsStdCtrls;

type
  TfmSakkTabla = class(TForm)
    btKilepesTButton;
    procedure FormPaint(SenderTObject);
    procedure btKilepesClick(SenderTObject);
    procedure FormCanResize(SenderTObjectvar NewWidth,
      NewHeight: Integer; var ResizeBoolean);
  private
    Private declarations }
  public
    Public declarations }
  end;

var
  fmSakkTablaTfmSakkTabla;

implementation

{$R *.dfm}

procedure TfmSakkTabla.btKilepesClick(SenderTObject);
begin
  Close;
end;

procedure TfmSakkTabla.FormPaint(SenderTObject);
Var I, J: Word;
    Xk,Yk: Integer;
Const D=60;
begin
  Xk:= ClientWidth Div 2;
  Yk:= ClientHeight Div 2;
  With Canvas Do
  Begin
    Brush.Color:= clBtnFace;
    Pen.Color:= clBtnFace;
    Rectangle(0,0,2*Xk,2*Yk);
    Brush.Color:= clWhite;
    Pen.Color:= clWhite;
    Rectangle(Xk-9*(D Div 2),Yk-9*(D Div 2),
              Xk+9*(D Div 2),Yk+9*(D Div 2));
    Pen.Color:= RGB(144,144,0);
    Rectangle(Xk-4*D,Yk-4*D, Xk+4*D,Yk+4*D);
    For I:= 1 To 8 Do For J:= 1 To 8 Do
    Begin
      If Odd(I+J) Then
      Begin
        Brush.Color:= RGB(144,144,0);
        Pen.Color:= RGB(144,144,0);
      End
      Else
      Begin
        Brush.Color:= RGB(224,224,224);
        Pen.Color:= RGB(224,224,224);
      End;
      Rectangle(Xk-(5-I)*D,Yk-(5-J)*D,
                Xk-(4-I)*D,Yk-(4-J)*D);
    End;
    Brush.Color:= clWhite;
    Pen.Color:= clBlack;
    For I:= 1 To 8 Do
    Begin
      Font.Size:= 12;
      TextOut(Xk+I*D-73*D Div 16,Yk+65*D Div 16, Chr(96+I));
      TextOut(Xk+33*D Div 8,Yk-I*D+71*D Div 16, IntToStr(I));
    End;
  End;
end;

procedure TfmSakkTabla.FormCanResize(SenderTObjectvar NewWidth,
  NewHeight: Integer; var ResizeBoolean);
begin
  FormPaint(Sender);
end;

end.