!制御構文
まだまだ魔法陣言語の弱いところです。
!繰り返し
!!単純な繰り返し
>> mce3
loop(10)
circle($0/10)
<<
>>
loop(10)
circle($0/10)
<<
この例では10回円を繰り返します。loopの支配下では$0という変数が現在のループ回数を表します。
また、$1がループの総数を表します。
!!多重繰り返し
>> mce3
loop(10)
loop(10)
shift($0/10-0.5,$2/10-0.5)
circle(0.1)
<<
>>
loop(10)
loop(10)
shift($0/10-0.5,$2/10-0.5)
circle(0.1)
<<
loopを入れ子にすることもできます。この場合ループ回数を取るためには直上のループの回数は$0、さらに一つ外側のループの回数は$2となります。($1は直上のループ総数、$3はさらに一つ外側のループ総数)
この例のように、グリッド状にオブジェクトを並べるのに役立ちます。
!条件分岐
この辺りの仕様は気に入ってないです。直したい。
!!if
>> mce3
loop(20)
shift(0,$0/$1-0.5)
circle(0.8)
if($0%3)
lw(3)
circle(1)
<<
>>
loop(20)
shift(0,$0/$1-0.5)
circle(0.8)
if($0%3)
lw(3)
circle(1)
<<
ifは引数を評価して、0であれば配下の図形を配置、それ以外は何も配置しません。
elseが無いあたり使い道が微妙です。
!!choice
複数の値の中から一つを取るための関数です。
>> mce3
lw(3)
loop(10)
ss(choice($0,"red","blue"))
circle(2*$0/$1)
<<
>>
lw(3)
loop(10)
ss(choice($0,"red","blue"))
circle(2*$0/$1)
<<
ifよりこっちのほうがつかいでがありそうです、第一引数の数字に対応する値を返します。
この場合ループ回数を表す$0と連動し"red"と"blue"が交互に出てきます。
第`第1引数%引数の数+2`引数 が返り値になると書けばわかる人はわかるのかな
第一引数+1番目の引数が返り値になります。もし引数の数よりも大きな値が来た場合はループします。
!サブルーチン
いよいよもって気に入ってないですがサブルーチンが使えます
!!def
>> mce3
def("hoge")
circle(1)
shift(-0.2,-0.2)
rect(0.2)
shift(0.2,-0.2)
rect(0.2)
shift(0,0.2)
rect(0.3)
hoge()
scale(0.5)
shift(-1,1)
hoge()
shift(1,1)
hoge()
<<
>>
def("hoge")
circle(1)
shift(-0.2,-0.2)
rect(0.2)
shift(0.2,-0.2)
rect(0.2)
shift(0,0.2)
rect(0.3)
hoge() //真ん中のでかいやつ
scale(0.5)
shift(-1,1)
hoge() //左下の小さめのやつ
shift(1,1)
hoge() //右下の小さめのやつ
<<
こんなふうに使い回したい図形をdefの支配下に置くことで、サブルーチンとして登録することができます。
!!引数
>> mce3
def("hoge")
shift($1,$2)
scale($0)
circle(1)
shift(-0.2,-0.2)
rect(0.2)
shift(0.2,-0.2)
rect(0.2)
shift(0,0.2)
rect(0.3)
hoge(1,0,0)
hoge(0.5,0.5,0.5)
hoge(0.5,-0.5,0.5)
<<
>>
def("hoge") //大きさ、x,y
shift($1,$2)
scale($0)
circle(1)
shift(-0.2,-0.2)
rect(0.2)
shift(0.2,-0.2)
rect(0.2)
shift(0,0.2)
rect(0.3)
hoge(1,0,0)
hoge(0.5,0.5,0.5)
hoge(0.5,-0.5,0.5)
<<
引数もとれます。第一引数第二引数、に対応し $0,$1,... と続きます。
5643382
wiki
1371359118