ブロックを積む(4)
「はじめてのVectorScript」と題して連載を始めるわけですが、本連載は「Vectorworksは持っているけどVectorScriptって何?」、「プログラミングって難しいんでしょ?」「アイデアはあるんだけど...」という人が「それ、VectorScriptでやれば簡単だよね」と言えるくらいになるのが目標です。
VectorworksはMacintosh版とWindows版とのマルチプラットホーム環境でありながらも、VectorScriptはOSを意識することのなくプログラミングが可能で、どちらでプログラミングしてもソースコードの変更なしでMacintosh、Windowsどちらでも実行が可能です。そしてVectorworksを持っていればいますぐにでも始められます。
ゲーム機の場合、DQ7(ソフト)で遊びたいという理由で3DS(ハード)を選ぶと思います。「このソフト(あなたが書いたスクリプト)を使いたいためにVectorworksを選びました」と言わせるようなプログラムを目指してがんばりましょう。自分のアイデアをプログラム化しブログで公開なんてことも夢ではありません。
第4章 1次元的に並べる
ブロック塀なので1個では成り立ちません、並べましょう。
BeginXtrd( 0, 10 ); Rect( 10, 20, 60, 50 ); EndXtrd; BeginXtrd( 0, 10 ); Rect( 60, 20, 110, 50 ); EndXtrd; BeginXtrd( 0, 10 ); Rect( 110, 20, 160, 50 ); EndXtrd; BeginXtrd( 0, 10 ); Rect( 160, 20, 210, 50 ); EndXtrd; BeginXtrd( 0, 10 ); Rect( 210, 20, 260, 50 ); EndXtrd;
こんな書き方でもVectorScriptは動きます。ですが、仮に100個描くことになったらツライですよね。
あとから四角の大きさを変えることになったら悲劇ですよね。
そこで同じことを繰り返すなら、FOR文を使います。
FOR ii := 1 TO 10 DO BEGIN {処理} END;
iiという変数がカウンターとなって、10回繰り返すプログラムとなります。
初期値を1として、1づつカウントアップしていき、10になるまでBEGINとENDの間を実行します。
変数の宣言は、VARというところで宣言します。プログラムの先頭で定義します。
iiは整数(INTEGER)として用意されます。
PROCEDURE sample; VAR ii : INTEGER; BEGIN FOR ii := 1 TO 10 DO BEGIN {処理} END; END; Run( sample );
横道にそれますが、VectorScriptで四則演算するには
Message( 1+2+3+4+5 );
のように書くだけで答えが得られます。
では1から100までだったらどうでしょう。
Message( 1+2+3 // 98+99+100 );
ありえません。FOR文を使いましょう。
PROCEDURE sample; VAR ii, total : INTEGER; BEGIN total := 0; FOR ii := 1 TO 100 DO BEGIN total := total + ii; END; Message( total ); END; Run( sample );
では、本題に戻って、四角形の座標のズレを計算にいれ、
x方向には+50、y方向には0ずつ座標を変化させましょう。
PROCEDURE sample; VAR ii : INTEGER; BEGIN FOR ii := 0 TO 9 DO BEGIN BeginXtrd( 0, 10 ); Rect( 10+ii*50, 20, 60+ii*50, 50 ); EndXtrd; END; END; Run( sample );
次はy方向に描かせましょう。
x方向には0、y方向には+30ずつ座標を変化させましょう。
PROCEDURE sample; VAR ii : INTEGER; BEGIN FOR ii := 0 TO 9 DO BEGIN BeginXtrd( 0, 10 ); Rect( 10, 20+ii*30, 60, 50+ii*30 ); EndXtrd; END; END; Run( sample );
z方向に描かせるにはどうしたらよいでしょう?
BeginXtrd のz座標を10ずつ変化させましょう。
PROCEDURE sample; VAR ii : INTEGER; BEGIN FOR ii := 0 TO 9 DO BEGIN BeginXtrd( 0+ii*10, 10+ii*10 ); Rect( 10, 20, 60, 50 ); EndXtrd; END; END; Run( sample );
また、四角形の個数、大きさの変更も容易です。
PROCEDURE sample; VAR ii : INTEGER; BEGIN FOR ii := 0 TO 14 DO BEGIN BeginXtrd( 0, 10 ); Rect( 10+ii*25, 20, 35+ii*25, 50 ); EndXtrd; END; END; Run( sample );
また、大きさの違う柱状体を交互に並べたりも可能です。
PROCEDURE sample; VAR ii : INTEGER; BEGIN FOR ii := 0 TO 9 DO BEGIN BeginXtrd( 0, 10 ); Rect( 10+ii*85, 20, 60+ii*85, 50 ); EndXtrd; BeginXtrd( 0, 10 ); Rect( 60+ii*85, 20, 85+ii*85, 50 ); EndXtrd; END; END; Run( sample );