3 車を動かしてみよう

このプロジェクトから,いよいよオブジェクトを操作する命令の組み立てが始まります.この作業のことをプログラミングと呼びます.

プログラミング環境として,子供たちのために設計された Etoys システムを使います. Etoysを使うと,マウスを使って「ビューアー」から「命令タイル」を取り出し,それらを組み合わせることによってプログラムを作ることできます.

まずは,車をまっすぐ走らせる,曲がりながら走らせるなどの練習をしてみましょう.このプロジェクトを通して,「命令」, 「繰り返し」,「順次実行」というプログラムの基本概念の習得を目指しましょう.

プログラミングに関するキーワード

Squeakに関するキーワード

3.1 ビューアーと命令の実行

M先生
では,次のプロジェクトに進もう.早速復習だけど,project2という名前のプロジェクトを作ってくれる?
Sくん
おっと,project1の中に作ってしまってはだめですよね.いったんproject1から出て,新しいプロジェクトを作って...できました.

M先生
そうしたら,project1で作った車をproject2へコピーできる?
Sくん
ん,できない...
M先生
できないよね.プロジェクトをまたいでのオブジェクトのコピーや移動は, フラップをうまく使うとできる.「 私の部品 」というフラップがあるでしょ. project1に入り,「私の部品」フラップを開いておいて,車をコピーし,フラップへ入れてごらん.
Tさん
フラップは,どこのプロジェクトでも共通なんですね.

M先生
その通り.車がフラップに入ったら,project2へ移り,フラップから車を取り出せるでしょ.
Sくん
はい.できました.
M先生
車をコピーしたのでオブジェクトの名前が「車1」になっているね.「1」を消して「車」にしておこう.
Sくん
わかりました.
M先生
それでは車を走らせてみよう.オブジェクトに命令を出すときには,「 水色(目玉)ハロ 」を使う.
Sくん
ハロを出して,目玉をクリックですね.

Tさん
右側に何か出てきましたね.

M先生
それを「 ビューアー 」と言うんだ. この中に様々な命令をするための部品が入っているのが見えるでしょ?これを「 命令タイル 」という.
Sくん
命令をするものなのに,なぜ「ビューアー」というんですか?
Tさん
ビューアーなのだから,何かを見るためのものだと思いました.
M先生
そうだね.ビューアーは命令をするためだけでなく,オブジェクトの状態を見るためにも利用するんだ. そうした使い方については,もっと先で紹介するよ.
Sくん
なるほど.
M先生
早速命令タイルを使ってみよう.「車を5ドット進める」という命令タイルがあるだろう.
Sくん
はい.

M先生
タイルの右側にある「 実行ボタン 」を押すと,この命令を1回実行できる.やってごらん.
Sくん
わぁ,車が前に進みました.

Tさん
この5という数値は変更できそうですね.
M先生
マウスで矢印をクリックしてもいいし,キーボードから数値を入力しても変更できるよ.
Sくん
先生,数値を入力したのですが,車の動きに変化がありませんね.

M先生
キーボードで入力した数値が赤いうちは編集中の状態だから,タイルの変更が確定されていないんだ. エンターキーを押せば確定するはずだよ.
Sくん
了解です.
No. 2-1 やってみよう!

進める命令タイルのドット数を変更して,車がどんな動きをするか観察してみましょう.

数値の横に付いている矢印をマウスでクリックすると1ドットずつ数値が変更できます. 矢印を上下方向にドラッグしてみるとどうなるかも試してみましょう.



3.2 スクリプトの作成と繰り返し

M先生
次は「 スクリプト 」の作成と命令の繰り返しに挑戦してみよう.
Sくん
はい.
M先生
まずは「 空スクリプト 」というタイルをビューアーの外にドラッグ&ドロップしてみて.

Sくん
スクリプト1という名前のオブジェクトができました.

M先生
ビューアーの「スクリプト」カテゴリの中に「スクリプト1」というのが新しく出来ているはずだよ.

Sくん
本当だ.
Tさん
このスクリプトとは何ですか?
M先生
スクリプトは命令を複数組み合わせて実行できるようにするものだよ.つまり,用意されている命令を自分で組み合わせて, 新しい命令を作って実行できるんだ.
Sくん
すごそうだけど,よく分からないなー.
M先生
やってみれば分かるよ.「車を5ドット進める」というタイルをマウスでドラッグして, スクリプト1の中に入れてみてくれる?
Sくん
できました.

M先生
じゃあ,スクリプト1に付いている実行ボタンを押してみよう.
Sくん
前に進みました.ビューアーの実行ボタンを押したときと同じ動作をしますね.
M先生
じゃあ, 繰り返し 実行してみよう.時計のマークをクリックしてみてくれる?
Sくん
はい.

Sくん
おっ!前進するようになりました.
Tさん
「車を5ドット進める」という命令を何回も繰り返して実行するから,前に進み続けるんですね.
M先生
そのとおり.繰り返して実行するのを止めるためには,時計をもう一度クリックするんだ.
No. 2-2 やってみよう!

車をバックさせる方法を考えてみましょう.全部で何通りあるでしょうか?


ヒント

車の進む「方向」を調節する方法の解説が 節[方向と重心] にあります.



Tさん
先生,はじめから用意されている命令は,今ビューアーで見えているものだけなんですか?
M先生
「基本」と書いてあるラベルをクリックしてごらん.他の「 カテゴリ 」が選択できるはずだ.

Sくん
いろんな種類のタイルがありますね.これは覚えられそうにないなー.

M先生
分からない命令があったら,試しに使ってみて研究するのが一番だよ.
No. 2-3 やってみよう!

車が移動した軌跡を描画するようにしてみましょう.描画した軌跡を消すことにも挑戦してみましょう.


ヒント

「ペン」カテゴリの命令を使って軌跡を描画する方法の解説が 節[軌跡の描画] にあります.



3.3 命令の組み合わせ

M先生
次は,複数の命令を 組み合わせ たスクリプトを作ってみよう. 「車を5度 回す 」という命令を「車を5ドット進める」というタイルの下に追加してみて.
Sくん
おっ.車が円を描くようになりました.

M先生
スクリプトを使うと複数の命令を組み合わて,複雑な命令を作ることができるんだ.
Tさん
すごーい.
M先生
では,なぜ円を描くようになったか分かるかい?
Sくん
えーっと....
M先生
じゃあ,これは宿題にしようか.
Sくん
教えてくださいよー.
No. 2-4 やってみよう!

直径が倍の大きさの円を描いてみましょう.



No. 2-5 考えてみよう!

Sくんは,以下の2つのスクリプトを実行し,描画された円を重ねてよく観察してみると,微妙に形が違うことを発見しました. 何故そうなるのか,理由を考えてみましょう.



No. 2-6 考えてみよう!

「車を5ドット進める」と「車を5度回す」という命令を組み合わせると,なぜ円が描けるのでしょうか. 理由を説明してみましょう.



3.4 命令の実行順序

M先生
次は正方形を描いてみようか.できるかい?
Sくん
円を描くスクリプトとは別に新しいスクリプトを用意した方がよさそうですね.えっと,空スクリプトをビューアーの外にドラッグ&ドロップして.よしっ,スクリプト2ができたぞ.
Tさん
一辺を描いて,90度曲がるのを繰り返せばいいから...こうですね.

Sくん
そうか,別に4回だけ繰り返さなくてもいいんだ.
M先生
そうだね.この場合,100ドット進んだ後に,90度曲がるという動作を繰り返すことになるんだ. 命令は上から順番に1つずつ実行されるということがポイントだよ.ちなみにこれを「 順次実行 」という.
No. 2-7 考えてみよう!

例題で作った正方形を描くプログラムを以下のように変更してみました. プログラムを実行せずに,描画される正方形にどんな違いがあるか予想し,その理由も説明してみましょう.



M先生
ところで,円を描くスクリプトの名前は何になってる?
Sくん
作ったままなので,スクリプト1ですね.
M先生
自分で作ったスクリプトには名前をつけることができるんだ.名前のところをクリックすれば入力できるよ.
Sくん
じゃあ,「円を描く」に変更します.

Tさん
スクリプトについている○ボタンはなんですか?
M先生
それをクリックすると,スクリプトをたたむことができるよ.
Tさん
たたんだスクリプトを再度表示させたいときはどうするんですか?
M先生
「スクリプト」カテゴリを選択して,表示さたいスクリプトをビューアーの外にドラッグ&ドロップすればいいんだ.
Sくん
スクリプトに分かりやすい名前をつけておくと,ビューアーで探しやすいですね. スクリプト1のままにしておいたら,たたんでしまうと中身が分からなくなってしまうや.

Tさん
スクリプト2も「正方形を描く」という名前に変更すれば完璧ですね.

練習問題

3.1

色々な図形を描いてみましょう.

  1. 正三角形
  2. 正五角形
  3. 星形

3.2

指示された個数の命令タイル(「進める」と「回す」だけ)を使って,色々な図形を描いてみましょう.

  1. 長方形(命令タイル4個以内)
  2. 階段(命令タイル4個以内)
  3. ギザギザ(命令タイル4個以内)
  4. 十字(命令タイル6個以内)
  5. こんぺいとう(命令タイル4個以内)
  6. 平行四辺形(命令タイル4個以内)
  7. アスタリスク(命令タイル3個以内)
  8. 定規(命令タイル5個以内)
  9. 四角形の帯(命令タイル8個以内)
  10. 紹介したような問題を自分で作ってみましょう.みんなが挑戦したくなるような面白い図形だとよいですね.

3.3

次に示すスクリプトを繰り返し実行するとどんな図形が描けるか考えてみましょう.

どんな図形が描けるか分かったら,無駄な命令を省いて,タイル数を減らしてみましょう.

3.4

以下の2つのスクリプトを作って,車を動かしてみてください.各スクリプトによって車の動きが違う理由を説明してみましょう.


ヒント

2つのスクリプトでは刻み値が違うことがポイントです.刻み値に関する解説は 節[刻み値] にあります.

3.5

以下の2つのスクリプトを繰り返して実行すると,車の動きに違いがあるでしょうか.プログラムを実行する前に予想をして,その理由を説明してみましょう.

3.6

以下のスクリプトを繰り返して実行すると,車はどのような動きをするでしょうか.プログラムを実行する前に予想をして,その理由を説明してみましょう.

3.7

本物と同じように時を刻むアナログ時計を作りましょう.


ヒント

針の回転軸を変更するためには,重心を調整する必要があります. 重心の変更方法は 節[方向と重心] に解説されています.

刻み値を変更すると針が回転する速度を調整することができます.刻み値については, 節[刻み値] を参考にしてください. 本物の時計と同じように針を動かすためには秒針,長針,短針が1秒間に何度動くかを計算する必要があります.