はじめてのVectorScript(3)
「はじめてのVectorScript」と題して連載を始めるわけですが、本連載は「Vectorworksは持っているけどVectorScriptって何?」、「プログラミングって難しいんでしょ?」「アイデアはあるんだけど...」という人が「それ、VectorScriptでやれば簡単だよね」と言えるくらいになるのが目標です。
VectorworksはMacintosh版とWindows版とのマルチプラットホーム環境でありながらも、VectorScriptはOSを意識することのなくプログラミングが可能で、どちらでプログラミングしてもソースコードの変更なしでMacintosh、Windowsどちらでも実行が可能です。そしてVectorworksを持っていればいますぐにでも始められます。
ゲーム機の場合、DQ7(ソフト)で遊びたいという理由で3DS(ハード)を選ぶと思います。「このソフト(あなたが書いたスクリプト)を使いたいためにVectorworksを選びました」と言わせるようなプログラムを目指してがんばりましょう。自分のアイデアをプログラム化しブログで公開なんてことも夢ではありません。
第3章 選択構造と反復構造
プログラムを書く上で重要な3大構造のお話はしましたが、ここでは実際にコードを書いてみましょう。
まずは選択構造です。PASCALにはIF文とCASE文の2つが用意されています。
比較した結果が真の場合に何かアクションさせたいときには、
PROCEDURE sample09; VAR aa : INTEGER; BEGIN aa := 0; IF aa = 0 THEN BEGIN Message( 'aa はゼロです。' ); END; END; Run( sample09 );
IFとTHENの間に比較式を書きます。この場合、aaと0はイコールか?ということになります。
次のBEGINからENDの間に書かれているプロセスをaaと0がイコールのときのみ実行されます。
比較に使われる演算子は
「 = 」イコール
「 <> 」等しくない
「 < 」小さい
「 <= 」小さいかイコール
「 > 」大きい
「 >= 」大きいかイコール
があります。
比較した結果、真の場合と偽の場合それぞれに何かアクションさせたい時には、
PROCEDURE sample10; VAR aa : INTEGER; BEGIN aa := 0; IF aa = 0 THEN BEGIN Message( 'aa はゼロです。' ); END ELSE BEGIN Message( 'aa はゼロではないです。' ); END; END; Run( sample10 );
先ほどのプログラムにELSE文が加わっています。このときELSEの前行のENDの後に;をしてはいけません。
ELSEに続くBEGINとENDの間に書かれているプロセスを、この場合、aaと0はイコールではない場合実行されます。
PROCEDURE sample11; VAR aa, bb : INTEGER; BEGIN aa := 0; bb := 0; IF aa = 0 THEN BEGIN Message( 'aa はゼロです。' ); END ELSE IF bb = 0 THEN BEGIN Message( 'bb はゼロです。' ); END ELSE BEGIN Message( 'aa、bbはゼロではないです。' ); END; END; Run( sample11 );
先ほどのプログラムにELSE IF文が加わっています。
ELSE IFとTHENの間に比較式を書きます。この場合、bbと0はイコールか?ということになります。
続くBEGINとENDの間に書かれているプロセスを、この場合、bbと0がイコールのときのみ実行されます。
そして続くELSEはaaとbbがともに0とイコールの時以外にのみ実行されます。
ELSE IFは比較式を追加していけますので、IF文とELSE文の間にいくつでも書けます。ですが、比較はあくまでも上から順ですので気をつけてください。
IF xxx THEN
BEGIN
END
ELSE IF yyy THEN
BEGIN
END
ELSE IF zzz THEN
BEGIN
END
ELSE
BEGIN
END;
また、比較式には数字だけではなく、文字列の比較も可能です。
PROCEDURE sample11; VAR aa : STRING BEGIN aa := 'yes'; IF aa = 'yes' THEN BEGIN Message( 'aa はイエスです。' ); END; END; Run( sample11 );
同じ選択構造でも、Case文は一つの比較式に対して、多数の比較対象を処理する場合に使われます。
PROCEDURE sample12 VAR aa : INTEGER; BEGIN aa := 0; CASE aa OF 0: BEGIN Message( 'aaはゼロです' ); END; 1..10: BEGIN Message( 'aaは1から10です' ); END; OTHERWISE BEGIN Message( 'aaは0から10以外です' ); END; END; END; Run( sample12 );
CASE と OFの間に比較したい変数をいれます。
単独で数字を書いて:(コロン)を入れた行が比較対象となります。
数字..数字:とした場合は数字から数字までの間が比較対象となります。
OTHERWISEはすべての比較対象に含まれなかったその他の場合に流れてきます。
また、比較式をCHARにすることで、文字の比較もできます。
PROCEDURE sample13 VAR aa : CHAR; BEGIN aa := '7'; CASE aa OF '0'..'9': BEGIN Message('数字'); END; 'A'..'Z': BEGIN Message('大文字'); END; 'a'..'z': BEGIN Message('小文字'); END; OTHERWISE BEGIN Message('対処外'); END; END; END; Run( sample13 );
次に、反復構造です。PASCALにはFOR文とWHILE文、REPEAT文の3つが用意されています。
予め繰り返す回数が決まっている場合にはFOR文を使います。
PROCEDURE sample14; VAR ii : INTEGER; BEGIN FOR ii := 1 TO 10 DO BEGIN Message( ii ); END; END; Run( sample14 );
FORとTOの間に初期値を書きます。この場合、iiは1から始めるということを意味します。
TOの場合は初期値を入れた変数が繰り返すたびに1づつインクリメント(足す)されていきます。
TOとDOの間に終了値を書きます。この場合、iiが10になったら終わりを意味します。
このFOR文の場合、iiが1から始まり1づつ足され10になるまで繰り返します。すなわちBEGINとENDの間を10回繰り返すことになります。
TOがDOWNTOとなった場合は初期値を入れた変数が繰り返すたびに1づつデクリメント(引く)されていきます。
PROCEDURE sample15; VAR ii : INTEGER; BEGIN FOR ii := 10 DOWNTO 1 DO BEGIN Message( ii ); END; END; Run( sample15 );
条件を満たすまで繰り返すのがWHILE文とREPEAT文です。2つの違いは条件判定を前でするか後でするかの違いです。
PROCEDURE sample16; VAR ii : INTEGER; BEGIN ii := 1; WHILE ii <= 10 DO BEGIN Message( ii ); ii := ii + 2; END; END; Run( sample16 );
WHILEとDOの間に比較式を書きます。この場合、iiが10以下の場合BEGINとENDの間のプロセスを繰り返すを意味します。
PROCEDURE sample17; VAR ii : INTEGER; BEGIN ii := 1; REPEAT Message( ii ); ii := ii + 1; UNTIL( ii > 10 ); END; Run( sample17 );
REPEATとUNTILの間にプロセスを書きます。
UNTILの後ろに終了の条件を書きます。この場合、iiが10より大きくなったら終了を意味します。
VectorScriptに関するお問い合わせ
VectorScriptに関するお問合せは、以下からお問い合せください。