Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#17

Re: Dame Spiel programmieren

  Alt 1. Mär 2007, 13:54
Also hier das Kochrezept:
man nehme ein TDrawGrid mit:
ColCount = 9
RowCount = 9
DefaultColWidth = 34
DefaultRowHeight = 34
Dann eine TImagelist auf das Formular mit Height und Width auf 32 setzen.
Dann diverse schwarze und weisse Spielfigueren in die Imageliste einfügen.
PS: falls jemand alle Schachfiguren in Schwarz und Weiss als 32*32 Bitmap hat, dann her damit.

Sodann diesen Code einbasteln:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    DrawGrid1: TDrawGrid;
    ImageList1: TImageList;
    Button1: TButton;
    procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

type
   TChessField = array[1..8, 1..8] of Smallint;
var
   chessField : TChessField;

implementation

{$R *.DFM}


procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
   figur : Smallint;
   bkcolor : TColor;
begin
   if ACol = 0 then
   begin
      // Beschriftung vertikal
      if ARow <> 0 then
         DrawGrid1.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, IntToStr(ARow));
   end
   else if ARow = 0 then
   begin
      // Beschriftung horizontal
      DrawGrid1.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, chr(Ord('A')+ACol-1));
   end
   else
   begin
      // "eigentliches" Schachbrett

      // Hintergrund Farbe ermitteln
      if Odd(ACol+ARow) then
         bkcolor := clLime
      else
         bkcolor := clWhite;

      // Hintergrund zeichnen
      DrawGrid1.Canvas.brush.Color := bkcolor;
      DrawGrid1.Canvas.FillRect(rect);

      // Spielfigur zeichen
      figur := chessField[ACol, ARow];
      ImageList1.Draw(DrawGrid1.Canvas, Rect.Left, Rect.Top, figur);
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   chessField[4,3] := 1;
   chessField[3,4] := 2;
   chessField[5,4] := 3;
   DrawGrid1.Invalidate;
end;

end.
Andreas
  Mit Zitat antworten Zitat