Subversion Repositories jumper

Compare Revisions

Regard whitespace Rev 26 → Rev 25

/trunk/LevelFunctions.pas
3,7 → 3,7
interface
 
uses
SysUtils, Dialogs, Functions, Classes;
SysUtils, Dialogs, Functions, ExtCtrls, Classes, Math;
 
type
TFieldType = (ftUndefined, ftFullSpace, ftEmpty, ftRed, ftYellow, ftGreen);
20,16 → 20,16
gsLastStoneInGoalGreen, gsLastStoneOutsideGoal);
 
TCoord = record
X: integer; // fields. not pixels
Y: integer; // fields. not pixels
X: integer;
Y: integer;
end;
 
TField = record
Indent: integer; // half steps
Indent: integer;
FieldType: TFieldType;
Goal: Boolean;
Data: TObject; // can be used to hold VCL references. Is not cloned when calling CloneMatrix!
function FieldState: TFieldState;
Panel: TPanel;
Stone: TImage;
end;
 
TPlayGroundMatrix = record
42,6 → 42,8
function MatrixWorth: integer;
procedure ClearMatrix(FreeVCL: boolean);
function CloneMatrix: TPlayGroundMatrix;
class function FieldState(t: TFieldType): TFieldState; overload; static;
function FieldState(f: TField): TFieldState; overload;
function FieldState(x, y: integer): TFieldState; overload;
function FieldState(c: TCoord): TFieldState; overload;
function CanJump(SourceX, SourceY, DestX, DestY: integer; DiagonalOK: boolean): boolean; overload;
206,7 → 208,8
begin
for y := Low(Fields[x]) to High(Fields[x]) do
begin
if Assigned(Fields[x,y].Data) then Fields[x,y].Data.Free;
if Assigned(Fields[x,y].Stone) then Fields[x,y].Stone.Free;
if Assigned(Fields[x,y].Panel) then Fields[x,y].Panel.Free;
end;
end;
end;
225,7 → 228,8
begin
result.Fields[x,y].FieldType := Fields[x,y].FieldType;
result.Fields[x,y].Goal := Fields[x,y].Goal;
result.Fields[x,y].Data := Fields[x,y].Data;
result.Fields[x,y].Panel := Fields[x,y].Panel;
result.Fields[x,y].Stone := Fields[x,y].Stone;
end;
end;
end;
245,6 → 249,23
result := CoordToIndex(coord.X, coord.Y);
end;
 
class function TPlayGroundMatrix.FieldState(t: TFieldType): TFieldState;
begin
result := fsUndefined;
case t of
ftFullSpace: result := fsLocked;
ftEmpty: result := fsAvailable;
ftGreen: result := fsOccupied;
ftYellow: result := fsOccupied;
ftRed: result := fsOccupied;
end;
end;
 
function TPlayGroundMatrix.FieldState(f: TField): TFieldState;
begin
result := FieldState(f.FieldType);
end;
 
function TPlayGroundMatrix.FieldState(x, y: integer): TFieldState;
begin
result := fsUndefined;
251,7 → 272,7
if (x < Low(Fields)) or (x > High(Fields)) then exit;
if (y < Low(Fields[x])) or (y > High(Fields[x])) then exit;
 
result := Fields[x,y].FieldState;
result := FieldState(Fields[x,y]);
end;
 
function TPlayGroundMatrix.CanJump(SourceX, SourceY, DestX, DestY: integer; DiagonalOK: boolean): boolean;
523,18 → 544,4
Es ist außerdem eher ein logischer Fehler, kein Fehler in der Levelstruktur! }
end;
 
{ TField }
 
function TField.FieldState: TFieldState;
begin
result := fsUndefined;
case FieldType of
ftFullSpace: result := fsLocked;
ftEmpty: result := fsAvailable;
ftGreen: result := fsOccupied;
ftYellow: result := fsOccupied;
ftRed: result := fsOccupied;
end;
end;
 
end.