ブロックを積む(7)
「はじめてのVectorScript」と題して連載を始めるわけですが、本連載は「Vectorworksは持っているけどVectorScriptって何?」、「プログラミングって難しいんでしょ?」「アイデアはあるんだけど...」という人が「それ、VectorScriptでやれば簡単だよね」と言えるくらいになるのが目標です。
VectorworksはMacintosh版とWindows版とのマルチプラットホーム環境でありながらも、VectorScriptはOSを意識することのなくプログラミングが可能で、どちらでプログラミングしてもソースコードの変更なしでMacintosh、Windowsどちらでも実行が可能です。そしてVectorworksを持っていればいますぐにでも始められます。
ゲーム機の場合、DQ7(ソフト)で遊びたいという理由で3DS(ハード)を選ぶと思います。「このソフト(あなたが書いたスクリプト)を使いたいためにVectorworksを選びました」と言わせるようなプログラムを目指してがんばりましょう。自分のアイデアをプログラム化しブログで公開なんてことも夢ではありません。
第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 );