3
interface //#################################################################### ■
5
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
7
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
9
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
11
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TArray2D<_TItem_>
13
TArray2D<_TItem_> = class
19
function XYtoI( const X_,Y_:Integer ) :Integer; inline;
25
_Item :array of _TItem_;
27
procedure SetCountX( const CountX_:Integer );
28
procedure SetCountY( const CountY_:Integer );
29
procedure SetMarginX( const MarginX_:Integer );
30
procedure SetMarginY( const MarginY_:Integer );
31
function GetItem( const X_,Y_:Integer ) :_TItem_;
32
procedure SetItem( const X_,Y_:Integer; const Item_:_TItem_ );
34
constructor Create; overload;
35
constructor Create( const CountX_,CountY_:Integer ); overload;
36
constructor Create( const CountX_,CountY_,Margin_:Integer ); overload;
37
constructor Create( const CountX_,CountY_,MarginX_,MarginY_:Integer ); overload;
38
procedure AfterConstruction; override;
39
destructor Destroy; override;
41
property CountX :Integer read _CountX write SetCountX ;
42
property CountY :Integer read _CountY write SetCountY ;
43
property MarginX :Integer read _MarginX write SetMarginX;
44
property MarginY :Integer read _MarginY write SetMarginY;
45
property Item[ const X_,Y_:Integer ] :_TItem_ read GetItem write SetItem ; default;
47
class procedure Swap( var Array0_,Array1_:TArray2D<_TItem_> ); static;
48
procedure MakeEdgeLoop;
51
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TBricArray2D<_TItem_>
53
TBricArray2D<_TItem_> = class( TArray2D<_TItem_> )
57
function GetGridX :Integer;
58
procedure SetGridX( const GridX_:Integer );
59
function GetGridY :Integer;
60
procedure SetGridY( const GridY_:Integer );
63
property Bric[ const X_,Y_:Integer ] :_TItem_ read GetItem write SetItem ; default;
64
property BricX :Integer read _CountX write SetCountX;
65
property BricY :Integer read _CountY write SetCountY;
66
property GridX :Integer read GetGridX write SetGridX ;
67
property GridY :Integer read GetGridY write SetGridY ;
70
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGridArray2D<_TItem_>
72
TGridArray2D<_TItem_> = class( TArray2D<_TItem_> )
76
function GetBricX :Integer;
77
procedure SetBricX( const BricX_:Integer );
78
function GetBricY :Integer;
79
procedure SetBricY( const BricY_:Integer );
81
constructor Create; overload;
82
constructor Create( const BricX_,BricY_:Integer ); overload;
83
constructor Create( const BricX_,BricY_,MarginX_,MarginY_:Integer ); overload;
84
destructor Destroy; override;
86
property Grid[ const X_,Y_:Integer ] :_TItem_ read GetItem write SetItem ; default;
87
property GridX :Integer read _CountX write SetCountX;
88
property GridY :Integer read _CountY write SetCountY;
89
property BricX :Integer read GetBricX write SetBricX ;
90
property BricY :Integer read GetBricY write SetBricY ;
93
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
95
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
97
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
99
implementation //############################################################### ■
101
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
103
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
105
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TArray2D<_TItem_>
107
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
109
/////////////////////////////////////////////////////////////////////// メソッド
111
procedure TArray2D<_TItem_>.MakeArray;
113
_AllX := _MarginX + _CountX + _MarginX;
114
_AllY := _MarginY + _CountY + _MarginY;
116
SetLength( _Item, _AllX * _AllY );
119
function TArray2D<_TItem_>.XYtoI( const X_,Y_:Integer ) :Integer;
121
Result := ( _MarginX + X_ ) + _AllX * ( _MarginY + Y_ );
124
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
126
/////////////////////////////////////////////////////////////////////// アクセス
128
procedure TArray2D<_TItem_>.SetCountX( const CountX_:Integer );
130
_CountX := CountX_; MakeArray;
133
procedure TArray2D<_TItem_>.SetCountY( const CountY_:Integer );
135
_CountY := CountY_; MakeArray;
138
procedure TArray2D<_TItem_>.SetMarginX( const MarginX_:Integer );
140
_MarginX := MarginX_; MakeArray;
143
procedure TArray2D<_TItem_>.SetMarginY( const MarginY_:Integer );
145
_MarginY := MarginY_; MakeArray;
148
function TArray2D<_TItem_>.GetItem( const X_,Y_:Integer ) :_TItem_;
150
Result := _Item[ XYtoI( X_, Y_ ) ];
153
procedure TArray2D<_TItem_>.SetItem( const X_,Y_:Integer; const Item_:_TItem_ );
155
_Item[ XYtoI( X_, Y_ ) ] := Item_;
158
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
160
constructor TArray2D<_TItem_>.Create;
165
constructor TArray2D<_TItem_>.Create( const CountX_,CountY_:Integer );
167
Create( CountX_, CountY_, 0 );
170
constructor TArray2D<_TItem_>.Create( const CountX_,CountY_,Margin_:Integer );
172
Create( CountX_, CountY_, Margin_, Margin_ );
175
constructor TArray2D<_TItem_>.Create( const CountX_,CountY_,MarginX_,MarginY_:Integer );
181
_MarginX := MarginX_;
182
_MarginY := MarginY_;
185
procedure TArray2D<_TItem_>.AfterConstruction;
190
destructor TArray2D<_TItem_>.Destroy;
196
/////////////////////////////////////////////////////////////////////// メソッド
198
class procedure TArray2D<_TItem_>.Swap( var Array0_,Array1_:TArray2D<_TItem_> );
200
A :TArray2D<_TItem_>;
202
A := Array0_; Array0_ := Array1_; Array1_ := A;
205
procedure TArray2D<_TItem_>.MakeEdgeLoop;
207
EX, EY, MX, MY :Integer;
209
for EY := -_MarginY to -1 do
213
for EX := -_MarginX to -1 do Item[ EX, EY ] := Item[ EX + _CountX, MY ];
214
for EX := 0 to _CountX -1 do Item[ EX, EY ] := Item[ EX , MY ];
215
for EX := _CountX to _CountX+_MarginX-1 do Item[ EX, EY ] := Item[ EX - _CountX, MY ];
218
for EY := 0 to _CountY-1 do
220
for EX := -_MarginX to -1 do Item[ EX, EY ] := Item[ EX + _CountX, EY ];
222
for EX := _CountX to _CountX+_MarginX-1 do Item[ EX, EY ] := Item[ EX - _CountX, EY ];
225
for EY := _CountY to _CountY+_MarginY-1 do
229
for EX := -_MarginX to -1 do Item[ EX, EY ] := Item[ EX + _CountX, MY ];
230
for EX := 0 to _CountX -1 do Item[ EX, EY ] := Item[ EX , MY ];
231
for EX := _CountX to _CountX+_MarginX-1 do Item[ EX, EY ] := Item[ EX - _CountX, MY ];
235
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TBricArray2D<_TItem_>
237
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
239
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
241
/////////////////////////////////////////////////////////////////////// アクセス
243
function TBricArray2D<_TItem_>.GetGridX :Integer;
248
procedure TBricArray2D<_TItem_>.SetGridX( const GridX_:Integer );
253
function TBricArray2D<_TItem_>.GetGridY :Integer;
258
procedure TBricArray2D<_TItem_>.SetGridY( const GridY_:Integer );
263
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
265
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGridArray2D<_TItem_>
267
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
269
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
271
/////////////////////////////////////////////////////////////////////// アクセス
273
function TGridArray2D<_TItem_>.GetBricX :Integer;
275
Result := _CountX - 1;
278
procedure TGridArray2D<_TItem_>.SetBricX( const BricX_:Integer );
280
_CountX := BricX_ + 1; MakeArray;
283
function TGridArray2D<_TItem_>.GetBricY :Integer;
285
Result := _CountY - 1;
288
procedure TGridArray2D<_TItem_>.SetBricY( const BricY_:Integer );
290
_CountY := BricY_ + 1; MakeArray;
293
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
295
constructor TGridArray2D<_TItem_>.Create;
300
constructor TGridArray2D<_TItem_>.Create( const BricX_,BricY_:Integer );
302
Create( BricX_, BricY_, 0, 0 );
305
constructor TGridArray2D<_TItem_>.Create( const BricX_,BricY_,MarginX_,MarginY_:Integer );
309
_CountX := BricX_ + 1;
310
_CountY := BricY_ + 1;
313
destructor TGridArray2D<_TItem_>.Destroy;
319
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
321
//############################################################################## □
323
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
325
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 最終化
327
end. //######################################################################### ■