unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TDirection = class private lastkey : byte; bNorth : boolean; bSouth : boolean; bEast : boolean; bWeast : boolean; function GetEast : boolean; function GetNorth : boolean; function GetSouth : boolean; function GetWeast : boolean; procedure SetEast (const Value: boolean); procedure SetNorth (const Value: boolean); procedure SetSouth (const Value: boolean); procedure SetWeast (const Value: boolean); function GetNE: boolean; function GetNW: boolean; function GetSE: boolean; function GetSW: boolean; procedure SetNE(const Value: boolean=TRUE); procedure SetNW(const Value: boolean=TRUE); procedure SetSE(const Value: boolean=TRUE); procedure SetSW(const Value: boolean=TRUE); public function SimultanDir: byte; function isBlocked: boolean; property North : boolean read GetNorth write SetNorth; property South : boolean read GetSouth write SetSouth; property East : boolean read GetEast write SetEast; property Weast : boolean read GetWeast write SetWeast; property NE : boolean read GetNE write SetNE; property NW : boolean read GetNW write SetNW; property SE : boolean read GetSE write SetSE; property SW : boolean read GetSW write SetSW; end; implementation { TGame } function TDirection.GetNE: boolean; begin if bNorth=TRUE and bEast=TRUE then Result:=TRUE else Result:=FALSE; end; function TDirection.GetNW: boolean; begin if bNorth=TRUE and bWeast=TRUE then Result:=TRUE else Result:=FALSE; end; function TDirection.GetSE: boolean; begin if bSouth=TRUE and bEast=TRUE then Result:=TRUE else Result:=FALSE; end; function TDirection.GetSW: boolean; begin if bSouth=TRUE and bEast=TRUE then Result:=TRUE else Result:=FALSE; end; function TDirection.SimultanDir: byte; begin Result:=0; if bNorth = TRUE then Inc(Result); if bSouth = TRUE then Inc(Result); if bEast = TRUE then Inc(Result); if bWeast = TRUE then Inc(Result); end; function TDirection.isBlocked: boolean; begin Result:=FALSE; if SimultanDir>2 then Result:=TRUE else if ( bEast=TRUE and bWeast=TRUE ) then Result:=TRUE else if ( bNorth=TRUE and bSouth=TRUE ) then Result:=TRUE end; function TDirection.GetEast: boolean; begin Result:=bEast; end; function TDirection.GetNorth: boolean; begin Result:=bNorth; end; function TDirection.GetSouth: boolean; begin Result:=bSouth; end; function TDirection.GetWeast: boolean; begin Result:=bWeast; end; procedure TDirection.SetEast(const Value: boolean); begin bEast:=Value; end; procedure TDirection.SetNorth(const Value: boolean); begin bNorth:=Value; end; procedure TDirection.SetSouth(const Value: boolean); begin bSouth:=Value; end; procedure TDirection.SetWeast(const Value: boolean); begin bWeast:=Value; end; procedure TDirection.SetNE(const Value: boolean=TRUE); begin if ( Value=TRUE ) then begin SetEast(TRUE); SetNorth(TRUE); end end; procedure TDirection.SetNW(const Value: boolean=TRUE); begin if ( Value=TRUE ) then begin SetWeast(TRUE); SetNorth(TRUE); end end; procedure TDirection.SetSE(const Value: boolean=TRUE); begin end; procedure TDirection.SetSW(const Value: boolean=TRUE); begin end; end.