研究開発

ブロックを積む(7)

第7章 2次元的に並べる

FOR文を使ってx方向に1次元的に並べた図形群をさらにFOR文の入れ子にすることによって2次元的に図形が展開できます。

x方向に10回(個)描いたものをy方向に10回繰り返す。このとき柱状体のY幅分をシフトしてあげないと同じとこに10個描いてしまいます(爆)x方向に繰り返すときにシフトしたように繰り返しカウンターjjを使ってずらしていけばいいわけです。

PROCEDURE sample;
VAR
ii, jj : INTEGER;
BEGIN
FOR jj := 0 TO 9 DO
BEGIN
FOR ii := 0 TO 9 DO
BEGIN
BeginXtrd( 0, 30 );
Rect( 10+ii*50, 20+jj*30, 60+ii*50, 50+jj*30 );
EndXtrd;
END;
END;
END;
Run( sample );

さらに、y方向でなくz方向に繰り返してあげればお目当てのブロック積みのようになります。

PROCEDURE sample;
VAR
ii, jj : INTEGER;
BEGIN
FOR jj := 0 TO 9 DO
BEGIN
FOR ii := 0 TO 9 DO
BEGIN
BeginXtrd( 0+jj*30, 30+jj*30 );
Rect( 10+ii*50, 20, 60+ii*50, 50 );
EndXtrd;
END;
END;
END;
Run( sample );

余談ですが、3次元的に展開するとどうなるでしょう?
さらにカウンターを増やして、入れ子にすることでx,y,z方向に繰り返し描くことができます。

PROCEDURE sample;
VAR
ii, jj, kk : INTEGER;
BEGIN
FOR kk := 0 TO 9 DO
BEGIN
FOR jj := 0 TO 9 DO
BEGIN
FOR ii := 0 TO 9 DO
BEGIN
BeginXtrd( 0+kk*30, 30+kk*30 );
Rect( 10+ii*50, 20+jj*30, 60+ii*50, 50+jj*30 );
EndXtrd;
END;
END;
END;
END;
Run( sample );