« 楽しんでスクリプト | トップページ | お祭り »

2010年5月 7日 (金)

続・楽しんでスクリプト

前回の続きです。

ちょっと余談になりますが、僕が幽霊探知スクリプトを作ったのはMELが最初ではなく、実ははるか昔、まだアップルのMacに標準で「ハイパーカード」というマルチメディアオーサリングツールがバンドルされていた頃で、そのハイパーカードを使って作ったのが最初です。旅行先に幽霊探知スクリプトを入れたノート型Macを持って行き、旅館でサーチしてみるといった具合です。

前回このMELスクリプトの使い方を書いていませんでしたね。Mayaを立ち上げて、スクリプトエディタを開いて幽霊探知MELスクリプトをコピペします。そしてテンキーのEnterキーを押せば実行されます。実行結果として次のような文が出力されます。

偶数: 490, 奇数: 510, 差=2%

これは、1000個発生した整数のうち、490個が偶数で奇数が510個、発生率の差が1000のうちの20で、つまり2%という意味です。偶数・奇数が何個出るかは実行のたびに違うので、みなさんがやった場合はこれと異なる数値になっていると思います。実はこのスクリプトは探査制度を低・中・高の3段階で変更することができ、デフォルトは低になっています。一応探査制度があがるほど、信用度があがるということにしています。探査制度が低いと、奇数・偶数の発生率の差が幽霊がいなくとも結構出ます。上記の結果では2%の差ですが、わりと5%くらいの差は出ます。探査制度を高にすると、通常0.001%~0.2%くらいの差に収まります。なので低の場合は10%、高の場合は0.5%以上の差が出ると、かなりヤバイと言えるでしょう。

ではスクリプトの説明です。

行頭に「//」がある行はコメント、注釈とみなされます。つまりスクリプトを実行する際には無視されます。適度にコメントを入れておくことで、誰が見てもわかりやすいスクリプトになります。「//」が行頭ではなく行の途中にある場合は、その行の「//」から後ろは実行時に無視されます。

<例>

int $even = 0; // 変数$evenを初期化

↑この例では「// 変数$evenを初期化」はスクリプト実行時に無視される。

最初に探査制度を指定します。0を指定すると低、1を指定すると中、2を指定すると高になります。これら0、1、2の数値は整数型の変数$modeに格納されます。「int」はそれに続く変数が整数型であることを意味します。

int $mode = 0;

次にこのスクリプトで使われる変数を宣言、もしくは宣言と同時に値を代入しています。スクリプト内で使う変数は、特殊な場合を除き、あらかじめ使うことをこのように明示的に書かなければなりません。

int $n, $v;
float $mod, $h;
int $even = 0;
int $odd = 0;

変数を宣言する理由は、その変数が消費するメモリをあらかじめ確保するためです。変数には「整数型」「浮動小数点型」「文字列型」などいくつかの型があり、それぞれ格納できる値が決まっています。ここでは整数型の変数として$n、$vを、浮動小数点型の$mod、$hを宣言しています。また整数型変数の$even、$oddに0を代入しています。この2つの変数になぜここで0を代入しているかは、ここで値を代入しないで単に宣言するだけに書き換えて、このスクリプトを何度も実行してみるとわかります。

ここまで書いて時間がなくなりました。ブログで延々とスクリプトのことを書くと興味のない人はつまらないでしょうから、この続きはホームページにスクリプトのページを新たに作って、そこに書いていくことにします。

 

|

« 楽しんでスクリプト | トップページ | お祭り »

CGのこと」カテゴリの記事