type
TTileRecord = record
private
function getX: Integer;
function getY: Integer;
function getZ: Integer;
function getIsRemoved: Boolean;
function getLetter: String;
procedure setLetter(const Value: String);
public
LetterCode : Integer;
TileType : TTileTypeEnum;
Pos3Dn : TPos3Dn;
RemovedStep: Integer;
procedure Init;
procedure Assign(aTileRecord: TTileRecord);
property IsRemoved : Boolean read getIsRemoved;
property X: Integer read getX;
property Y: Integer read getY;
property Z: Integer read getZ;
Property Letter: String read getLetter write setLetter;
end;
type
TTileList = class
private
function getCount: Integer;
public
Items: array of TTileRecord;
constructor Create();
destructor Destroy; override;
procedure Assign(aTileList: TTileList);
procedure Clear();
procedure AddItem(aTileRecord: TTileRecord);
procedure DeleteItem(aIndex: Integer);
procedure InsertItem(aIndex: Integer; aTileRecord: TTileRecord);
property Count: Integer read getCount;
end;
implementation
{ TTileReord }
procedure TTileRecord.Assign(aTileRecord: TTileRecord);
begin
Self.LetterCode := aTileRecord.LetterCode;
Self.TileType := aTileRecord.TileType;
Self.Pos3Dn := aTileRecord.Pos3Dn;
Self.RemovedStep := aTileRecord.RemovedStep;
end;
procedure TTileRecord.Init;
begin
Self.LetterCode := 0;
Self.TileType := ttNormal;
Self.Pos3Dn.X := 0;
Self.Pos3Dn.Y := 0;
Self.Pos3Dn.Z := 0;
Self.RemovedStep := VALUE_OF_UNREMOVED;
end;
function TTileRecord.getIsRemoved: Boolean;
begin
if Self.RemovedStep = VALUE_OF_UNREMOVED then
Result := False
else
Result := True
end;
function TTileRecord.getLetter: String;
begin
end;
function TTileRecord.getX: Integer;
begin
Result := Pos3Dn.X;
end;
function TTileRecord.getY: Integer;
begin
Result := Pos3Dn.Y;
end;
function TTileRecord.getZ: Integer;
begin
Result := Pos3Dn.Z;
end;
procedure TTileRecord.setLetter(const Value: String);
begin
end;
{ TTileList }
function TTileList.AddTile(aPos3D: TPos3D; aKindSerial: Integer): Integer;
var
tmpTileRecord: TTileRecord;
begin
tmpTileRecord := TTileRecord.Create;
tmpTileRecord.Pos3D := aPos3D;
tmpTileRecord.KindSerial := aKindSerial;
Self.Add(tmpTileRecord);
Grid3D[aPos3D.X, aPos3D.Y, aPos3D.Z] := Self.Count - 1;
Result := Self.Count - 1;
end;
procedure TTileList.AddItem(aTileRecord: TTileRecord);
begin
SetLength(Self.Items, Length(Self.Items) + 1);
Self.Items[High(Items)].Assign(aTileRecord);
end;
procedure TTileList.Assign(aTileList: TTileList);
var
i: Integer;
tmpTileRecord: TTileRecord;
begin
Self.Clear();
SetLength(Self.Items, Length(aTileList.Items));
for i := Low(aTileList.Items) to High(aTileList.Items) do
begin
Self.Items[i].Assign(aTileList.Items[i]);
end;
end;
constructor TTileList.Create;
begin
Self.Clear();
end;
procedure TTileList.DeleteItem(aIndex: Integer);
var
i: Integer;
begin
if aIndex > High(Self.Items) then Exit;
for i:= aIndex to High(Self.Items) - 1 do
Self.Items[i].Assign(Self.Items[i+1]);
SetLength(Self.Items, Length(Self.Items) - 1);
end;
procedure TTileList.InsertItem(aIndex: Integer; aTileRecord: TTileRecord);
var
i: Integer;
begin
if aIndex > High(Self.Items) then Exit;
SetLength(Self.Items, Length(Self.Items) + 1);
for i:= High(Self.Items) downto aIndex + 1 do
Self.Items[i].Assign(Self.Items[i-1]);
Self.Items[aIndex].Assign(aTileRecord);
end;
destructor TTileList.Destroy;
begin
Self.Clear();
inherited;
end;
function TTileList.getCount: Integer;
begin
Result := Length(Items);
end;
procedure TTileList.Clear;
begin
SetLength(Items, 0);
end;
7日目 動的配列を使ったリストに delete insert を実装した
コメントをどうぞ