unit UCtlView;
// eine VIEW des Labyrinths aus der Vogelperspektive, dient
// auch als CONTROLER, z.B. zum Erstellen des Labyrinths
interface // per Mausklick...
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, UModel;
const ZW=10; XYOFF=20;
type
TCtlView =
class(TForm)
ZeigenBtn: TButton;
procedure ZeigenBtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private { Private-Deklarationen }
public { Public-Deklarationen }
function Zl(y: integer): integer;
//ZeilenNummer zur Bildschirmposition
function Sp(x: integer): integer;
//SpaltenNr. zur Bildschirmposition
function xWert(s: SpBereich): integer;
// Bildschirmpos. der Spalte
function yWert(z: ZlBereich): integer;
// Bildschirmpos. der Zeile
procedure ZeichneLab;
end;
var CtlView: TCtlView;
implementation
{$R *.dfm}
function TCtlView.Zl(y: integer): integer;
begin Zl:= (y-XYOFF)
div ZW
end;
function TCtlView.Sp(x: integer): integer;
begin Sp:= (x-XYOFF)
div ZW
end;
function TCtlView.xWert(s: SpBereich): integer;
begin xWert:= s*ZW+XYOFF
end;
function TCtlView.yWert(z: ZlBereich): integer;
begin yWert:= z*ZW+XYOFF
end;
procedure TCtlView.ZeichneLab;
var z: ZlBereich; s: SpBereich;
begin
for z:=0
to zMax
do for s:=0
to sMax
do
begin
if lab.zelle[s,z]=nil
then CtlView.Canvas.Brush.Color:= ClGray
else CtlView.Canvas.Brush.Color:= ClBtnFace;
CtlView.Canvas.Rectangle(xWert(s),yWert(z),xWert(s)+ZW,yWert(z)+ZW);
end;
end;
procedure TCtlView.ZeigenBtnClick(Sender: TObject);
begin
ZeichneLab;
end;
procedure TCtlView.FormCreate(Sender: TObject);
begin
lab:= TLabyrinth.neuesLabyrinth;
end;
procedure TCtlView.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var s: SpBereich;
z: ZlBereich;
begin
if (Sp(X)<=SMAX)
and (Sp(X)>=0)
and (Zl(Y)<=ZMAX)
and (Zl(Y)>=0)
then
begin s:=Sp(X); z:=Zl(Y);
lab.zelle[s,z]:= TZelle.neueZelle;
end;
ZeichneLab;
end;
end.