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
色々な図形を描いてみましょう.
- 正三角形
- 正五角形
- 星形
3.2
指示された個数の命令タイル(「進める」と「回す」だけ)を使って,色々な図形を描いてみましょう.
- 長方形(命令タイル4個以内)
- 階段(命令タイル4個以内)
- ギザギザ(命令タイル4個以内)
- 十字(命令タイル6個以内)
- こんぺいとう(命令タイル4個以内)
- 平行四辺形(命令タイル4個以内)
- アスタリスク(命令タイル3個以内)
- 定規(命令タイル5個以内)
- 四角形の帯(命令タイル8個以内)
- 紹介したような問題を自分で作ってみましょう.みんなが挑戦したくなるような面白い図形だとよいですね.
3.3
次に示すスクリプトを繰り返し実行するとどんな図形が描けるか考えてみましょう.
どんな図形が描けるか分かったら,無駄な命令を省いて,タイル数を減らしてみましょう.
3.4
以下の2つのスクリプトを作って,車を動かしてみてください.各スクリプトによって車の動きが違う理由を説明してみましょう.
ヒント
2つのスクリプトでは刻み値が違うことがポイントです.刻み値に関する解説は
節[刻み値]
にあります.
3.5
以下の2つのスクリプトを繰り返して実行すると,車の動きに違いがあるでしょうか.プログラムを実行する前に予想をして,その理由を説明してみましょう.
3.6
以下のスクリプトを繰り返して実行すると,車はどのような動きをするでしょうか.プログラムを実行する前に予想をして,その理由を説明してみましょう.
3.7
本物と同じように時を刻むアナログ時計を作りましょう.
ヒント
針の回転軸を変更するためには,重心を調整する必要があります.
重心の変更方法は
節[方向と重心]
に解説されています.
刻み値を変更すると針が回転する速度を調整することができます.刻み値については,
節[刻み値]
を参考にしてください.
本物の時計と同じように針を動かすためには秒針,長針,短針が1秒間に何度動くかを計算する必要があります.