ドリトルの記事全体はカテゴリ「ドリトル」をご覧下さい。
さて前回のタイトルに冗談のように「かめた!千鳥足」と書きましたが、このように新しい命令を作って実行させることはできないのでしょうか。
実はできます。
オブジェクト:新命令の名前=「 」。
という記述で、このオブジェクトに新しい命令を追加することができます。さっそくかめたに「千鳥足」を追加してみましょう。前回の内容をすべて「 」に入れればいいのですね。
例1)
かめた=タートル!作る。
かめた:千鳥足=「
かめた!(乱数(360))左回り。
時計=タイマー!作る。
時計!「かめた!(乱数(60)−30)左回り 5 歩く」 実行。
」。
これを実行すると、真ん中にかめたが登場して終わります。どうしてでしょう?

それは、最初にタートルからかめたを作り(真ん中に表示)、命令を定義しただけ終わっているからです。定義した命令を実行しなければなりません。
例2)
かめた=タートル!作る。
かめた:千鳥足=「
かめた!(乱数(360))左回り。
時計=タイマー!作る。
時計!「かめた!(乱数(60)−30)左回り 5 歩く」 実行。
」。
かめた!千鳥足。
これで前回最後のものと全く同じ動作をするプログラムになりました。
さて、このシリーズのその2では、タートルオブジェクトが亀なのは、「標準の図形が亀の絵になっているだけ」ということを書きました。
この絵は変更することができます。その命令が「変身する」です。何に変身するのか画像ファイルを指定する必要があります。
ドリトルの実行ファイルと同じディレクトリに置いたGIFファイルや PNGファイルを指定するか、内部に標準でもっている画像を利用することができます。内部に持っている画像の一覧はドリトル公式サイトの「ダウンロード」ページにあります。
http://dolittle.eplang.jp/index.php?%A5%C0%A5%A6%A5%F3%A5%ED%A1%BC%A5%C9
試しに魚(fish.png)に変身させてみましょう。これはもう一つドリトルを起動するか、前のを一度保存しておいてから新しく入力してください。
例3)
かめた=タートル!作る。
かめた!"fish.png" 変身する。
実行画面は以下の通り

亀の絵が魚の絵に変わりました。
さて、また少し別な話。
(その2)の回では複数のオブジェクト「かめた」と「かめこ」をコピーして作ることができることを書きました。この時は共にプロトタイプオブジェクトの「タートル」から「作る」でコピーしましたが、作ったオブジェクトからコピーすることもできます。子供から孫を作るわけですね。
こんな実験をしましょう。先ほどの新しいドリトル編集画面で入力します。
例4)
かめた=タートル!作る。
かめこ=かめた!作る 90 左回り "ayumiRed.png" 変身する (赤) 線の色。
かめお=かめこ!作る 90 左回り "ayumiYellow.png" 変身する。
かめた!100 歩く。
かめこ!100 歩く。
かめお!100 歩く。
実行画面は次のとおり。

「かめた」から「かめこ」をコピーして90度回転、赤色に変身。軌跡を赤に変えます。
さらに、「かめこ」から「かめお」をコピーして90度回転、黄色に変身。
それぞれ100ドットずつ進みます。
90度回転した「かめこ」から作った「かめお」をさらに90度回転させました。「かめた」からすると180度回転したのです。しかし「かめお」の線の色は変えていないので赤のままです。
少し余談です。
ところで、(赤)の両側の括弧はいるのでしょうか。乱数のところでも書きましたが、この「赤」は色オブジェクトというものですが、命令ではありません。タートルオブジェクトの命令「線の色」のパラメータなので、命令じゃないことをはっきりさせるために( )が必要なのです。
閑話休題。
さて、何が言いたかったのかというと、「作る」でコピーしたときに、コピー元の属性などはすべて引き継がれる、ということなんです。難しい言い方でこれを「継承」といいます。
それならば、「千鳥足」を定義した「かめた」をコピーして「かめこ」を作ったら、「かめこ」も千鳥足で歩くのでしょうか。
やってみましょう。元のドリトル画面の方に戻ってプログラムを次のように修正します。
例5)
かめた=タートル!作る。
かめた:千鳥足=「
かめた!(乱数(360))左回り。
時計=タイマー!作る。
時計!「かめた!(乱数(60)−30)左回り 5 歩く」 実行。
」。
かめこ=かめた!作る "ayumiRed.png" 変身する (赤) 線の色。
かめた!千鳥足。
かめこ!千鳥足。
実行画面は次のとおり。

……あれ?一匹動いていませんね。
色からいって「かめこ」の方のようです。なぜでしょう。
プログラムをよく見ると「千鳥足」を定義している「 」の中では「かめた」に対して左回りとか歩くと命令しています。「かめこ」に対しても新しい命令「千鳥足」もコピーされましたが、中身は相変わらず「かめた」に指示するものだったのです。
どうりで「かめた」が速くなったように見えていましたが、両方の「歩く」を実行して倍のスピードになっていたのです。
それでは「 」の中を「かめこ」に全部変えればいいのでしょうか。それでは今度は「かめこ」が倍速の千鳥足になるだけですね。
「かめた」のときは「かめた」、「かめこ」のときは「かめこ」の動作のように指定できないのでしょうか。
問題は「 」の中で「かめた」や「かめこ」と固有名詞(つまり固有のオブジェクト)を記述していることです。
指示代名詞のような記述は無いのでしょうか。あります。「自分」という指定方法を使います。この特別な名前「自分」は「 」のブロックを実行しているオブジェクト自身を指します。「千鳥足」を定義する「 」の中の「かめた」をすべて「自分」に置き換えればいいのです。
例6)
かめた=タートル!作る。
かめた:千鳥足=「
自分!(乱数(360))左回り。
時計=タイマー!作る。
時計!「自分!(乱数(60)−30)左回り 5 歩く」 実行。
」。
かめこ=かめた!作る。
かめこ!"ayumiRed.png" 変身する (赤) 線の色。
かめお=かめた!作る。
かめお!"ayumiYellow.png" 変身する (黄) 線の色。
かめた!千鳥足。
かめこ!千鳥足。
かめお!千鳥足。
実行画面。

おっと勢い余って3匹登場させてしまいましたが、三者三様の千鳥足を演じてくれますね。見ていて楽しい気分になってきます。
長くなりましたが、今日はこの辺で。