Lesson 5 意思決定する人型ピクトグラム

posted in: 開発者ブログ | 0

意思決定する人型ピクトグラム

条件式を書いてみよう

条件式とは、式の中でも条件を表す式のことを言います。例えば「もし変数の値KAKUDOが50より大きかったら実行する」というような表現を命令で表します。そのためには、IF命令を使います。

IF命令の様式と処理は以下の通りです.END命令とセットで用います.

命令の様式 処理
IF exp1 もし 条件式exp1が真ならば対応するENDまでの命令を実行する.
END 条件文,または繰返し,または定義の終了.

 

比較演算子

IF命令の引数には比較演算子を使った式を記述します。比較演算子には以下のものがあります。

比較演算子の様式 評価
A > B
A が B より大きい
A >= B A が B より大きいか等しい
A < B
A が B より小さい
A <= B A が B より小さいか等しい
A == B
A が B が等しい
A != B A と B が等しくない

 

例として,以下のコードを実行すると左手を挙げた後、1/2 の確率で手を振ります。

RW LUA -140 1 // 左手を挙げる
IF [RAND(1, 6) >= 4] // もし 1~6 までの乱数が 4 以上なら
// 左手を振る
RW LLA -60 0.3
RW LLA 60 0.3
END

 

条件式を書いてみよう (続き)

IF命令は,複数の条件を列挙したり,条件を満たさないときの処理を同時に記述できます.新たに
ELSEIF命令,ELSE命令を紹介します.

命令の様式 処理
IF exp1 もし 条件式exp1が真ならば対応するENDまでの命令を実行する.
ELSEIF exp2
もし対応する先述のIFまたはELSEIFの条件が全て満たされなくて,かつ条件式 exp2が真ならば対応するELSEIFまたはELSEまたはENDの直前までの命令を実行する.
ELSE
もし対応する先述のIFまたはELSEIFの条件が全て満たされない場合,対応するENDまでの命令を実行する.
END 条件文,または繰返し,または定義の終了.

 

例として,人型ピクトグラムが16 拍子の踊りをするプログラムを示します。何拍目かによって動きの変わります。

SET :HAKU 0
REPEAT 16
IF [:HAKU % 8 == 3] // HAKU を 8 で割った余りが 3 なら
RW LUL 90 0.2 // 左脚を上げ下げする
RW LUL -90 0.2
ELSEIF [:HAKU % 2 == 0] // その他の場合で HAKU が偶数なら
RW RUA 90 0.2 // 右腕を上げ下げする
RW RUA -90 0.2
ELSE // その他の場合は
RW LUA 90 0.2 // 左腕を上げ下げする
RW LUA -90 0.2
END
SET :HAKU [:HAKU+1]
END

プログラムの最後の行で HAKU が 1 増えます。 REPEAT 命令で、もう一度 一番上の行から実行されます。そのときには HAKU が変わっています。 ですから 実行される箇所が変わります。

算術式を書いてみよう

式とは、値、変数、演算子の組み合わせのことを言います。値と変数はこれまでに出てきました。例えば、

SET :DX 1

は変数 DX に値 1 を格納するという意味でした。演算子とは演算を表す記号のことをいいます。 例えば下にあるような+-*/% などです。特に計算のために用いる演算子なので算術演算子と呼ばれています。

算術演算子の様式 評価
A + B
A と Bをたす
A – B A から B をひく
A * B
A と B をかける
A / B A を B で割る
A % B
A をBで割ったあまり

 

繰り返しますが、式とは、値、変数、演算子の組み合わせです。 式の例を示します。

:DY + 0.05

 

引数に式を使うとき

[ ] という記号が出てきました。先に関数のところで使いましたが、[ から ] までの間が一つの引数であるという意味です。 引数の区切りは空白でしたが、式を書くと式の中に空白が入ることがあり、どこからどこまでが一つの引数かわからなくなるからです。よってピクトグラミングでは、式を表現するのに [ ] で囲っています。

命令の引数には式を記述することができます DX + 0.05DY に代入するというのは、

 

SET :DY [:DY + 0.05]

 

左上腕に対して KAKUDO の2倍の角度を(KAISU+1)の2倍の秒かけて回転するというのは、

 

R LUA [:KAKUDO * 2] [ (:KAISU + 1) * 2]

 

と書けます。

これまでに学んだ、変数、繰返しを使い, 条件式と関数を引数に使うことで,人型ピクトグラムが左右にジャンプを繰り返すプログラムを示してみます。

 

SC 0.3
SET :DX 1
SET :DY 0
REPEAT 1000
MW :DX :DY 0.02
SET :DY [:DY + 0.05]
IF [Y() > 200]
SET :DY [-1 * :DY]
END
IF [ABS(X()) > 300]
SET :DX [-1 * :DX]
END
END

 

挑戦状

5回目の挑戦状です。挑戦状は、あなたがやりたいと思うところからやってください。チャレンジ1から順に取り組む必要はありません。また、全てのチャレンジに取り組む必要もありません。あなたがやりたいチャレンジに取り組んでください。

 

チャレンジ1 腕を上げ下げさせよう

次の (a) から (c) の条件を満たすプログラムを作成してみよう。
(a) 5 分の 4 の確率で 1 秒かけて左腕を 120 度時計回りに回転する。
(b) 7 分の 3 の確率で 1 秒かけて右腕を 120 度反時計回りに回転する。
(c) (a) の動作と (b) の動作は同時に行われる。 左腕を上げる行為と、右腕を上げる行為はそれぞれ別々に判断される。

 

チャレンジ2 ダンサー

30 拍からなるダンスをします。1 拍は 0.6 秒とします。最初は 1 拍目、最後は 30 拍目です。
(1) 3 の倍数でもあり、5 の倍数であるとき、つまり 15 の倍数の時は、最初の 0.3 秒で左腕を -120 度、 右腕を 120 度それぞれ同時に回転し、その後 0.3 秒で左腕を 120 度、右腕を -120 度それぞれ同時に 回転します。
(2) 15 の倍数ではなく、3 の倍数の拍目の時は、最初の 0.3 秒で左腕を -120 度回転し、 その後 0.3 秒で左腕を 120 度回転します。
(3) 15 の倍数ではなく、5 の倍数の拍目の時は、最初の 0.3 秒で右腕を 120 度回転し、 その後 0.3 秒で右腕を 120 度回転します。
(4) 3 の倍数でもなく、かつ 5 の倍数でもないときは、最初の 0.3 秒で左足を -10 度回転し、 その後 0.3 秒で左足を 10 度回転します。

チャレンジ3 ダンサー

条件分岐(IF)を使ったオリジナル作品を作ってみよう。

 

本テキストの著作権は青山学院大学 社会情報学部 伊藤一成に帰属します。
© 青山学院大学 社会情報学部 伊藤一成研究室 All rights reserved.

Comments are closed.