#contents
** 実習の目標
システムとは物事が複雑に組み合わさって一つの形を持ったものと考えられます。コンピュータシステムもその一例ですが、ほかにも物理の多粒子系、宇宙、生態組織、高分子、高層建築などがあります。
このような複雑なシステムを構築するための最も重要な要素をごぞんじですか?以下の三つです。
+ 基本的な部品があること
+ 部品を組み合わせてより複雑な機能を実現できること
+ 部品の組み合わせたものを抽象化する機構があって、それによって複雑な部品を提供できること
コンピュータの万能性は複雑なシステム構築をシミュレートするのに最適です。もちろん、短い期間のなかで学べることは限られています。そこで、本コースでは子供向けの[[一風変ったプログラミングシステム:http://scratch.mit.edu/%5D%5D((猫でもできる?))を使って、小さな部品の組み合わせを抽象化することでより複雑な振舞いを実現できることを実践します。この実習を通して学ぶシステムの捉え方は理学全般に求められる基本的な考え方のひとつです。
** 初回:お掃除ロボット
初回の実習では、三回の実習を通して使用する [[Scratch:http://scratch.mit.edu/%5D%5D と呼ばれるプログラミング言語について学びます。まず初回ですから、簡単なプログラミングを始めましょう。最初の課題は”お掃除ロボット”です。
まず講義の冒頭で「[[お掃除ロボットの Roomba:http://www.irobot-jp.com/index.html%5D%5D」を使ったデモをします。実際に Roomba を使って実習室を掃除する様子を観察します。
次に Scratch を起動して、このお掃除ロボットよりも上手に部屋の掃除ができるような Roomba のソフトウェアを作成することを目標としましょう。部屋のなかを隈なく、効率的に掃除することが目標です。
:ご参考|
— [[Roombaの掃除の様子:http://www.irobot-jp.com/movie/swf/room.html%5D%5D
** Scratch の起動
Scratch でプログラムを作成するための開発環境は、Finder のサイドバーを使って ”Applications > Scratch 1.4” に見つかる以下のアイコンのフォルダに含まれています。
このなかにはいっているネコのアイコン (Scratch.app) をダブルクリックして起動して下さい。
*** はじめての Scratch
まずは、[[Scratchの概要:>CCCL2010:scratch/ScratchGettingStartedv14.pdf]]にしたがって、Scratchでどのようにプログラムを作成していくのかについて学びましょう。
– [[概要>CCCL2010:scratch/ScratchGettingStartedv14.pdf]]
– [[マニュアル>http://info.scratch.mit.edu/Support/Reference_Guide_1.4%5D%5D
– [[サンプル:http://info.scratch.mit.edu/Support/Scratch_Cards%5D%5D
*** いよいよ仮想 Roomba の作成
ネコは掃除が苦手だから、やりたくないと駄々をこねています。仕方がないので、以下の手順で Roomba のスプライトを作成することとしましょう。
+ [[Roombaのアイコン>CCCL2010:scratch/Roomba.gif]]をデスクトップにダウンロードして下さい。((リンクを右クリックし、「リンク先のファイルを別名でダウンロード…」を使い、保存場所として”デスクトップ”フォルダを指定します。))Roomba.gif という名前の画像ファイルがデスクトップに見えるはずです。
+ 次に Scratch のウィンドウを出し、右下の方に見える”新しいスプライト”の右にある三つの★印の真ん中(新しいスプライトをファイルから選ぶ)をクリックして、さきほど保存した ”Roomba.gif” を読み込みます。ウィンドウの右上に Roomba の画像が見えるはずです。
~ http://kwakita.sakura.ne.jp/img/snap/c19193557a21b964a2ceb5328ac325d8.png
+ Roomba スプライトの名前は、この時点では単に”スプライト”になっています。それでは寂しいので ”Roomba” に変えてやりましょう。
~ http://kwakita.sakura.ne.jp/img/snap/646fa1d465d37669fb0e6268abb280a4.png
+ Roomba を動かすスクリプトを作りましょう。
+ Roomba が壁にぶつかったら反射するようなスクリプトを作りましょう。
+ ペン機能を使って、Roomba の軌跡が見えるようにしましょう。ペンの太さと色を適宜設定しましょう。
~ ペン機能を使って描いたものは”消す”スクリプトを使って消すことができます。
*** プロジェクト
いくつかのプロジェクトが考えられます。プロジェクトの案を思いつくままに書いたので、必ずしも難易度順になっているわけでもありません。この他にも自分でプロジェクトを考えて、面白いことにチャレンジしてみて下さい。
+ 掃除する前が真っ白で、そこに色が塗られるというのはちょっとおかしいですね。最初は地面が灰色で、掃除をするにつれてきれいな色になるように変更しましょう。
+ 掃除のやり残しがないように丁寧に掃除する工夫をしたいですね。どうすれば端や隅を掃除したり、やり残した場所をなくせるでしょう?
~ 隅を掃除するための専用の小型の Roomba を使うのもよい考えかもしれませんね。そのときは二台の Roomba が衝突しないように工夫したいですね。
+ ロッテンマイヤー先生((アルプスの少女ハイジに登場する人物))がやってきました。彼女はとても厳しくて、特に掃除については完全主義者です。今日も彼女は部屋の様子をチェックして、どれだけ上手に掃除できたか点数をつけています。ロッテンマイヤー先生のスプライトを作ってみましょう。ロッテンマイヤー先生は部屋の形を知っていると仮定して構いません。
+ 部屋に茶色の箱があってもあなたの Roomba は箱をよけながら掃除できますか?
+ あなたのスクリプトは部屋の形や大きさが変ってもちゃんと動きますか?ちゃんと動かないと製品として売れませんよ。部屋の形を新しいスプライトとして描き、Roomba がその内側をきちんと掃除できるように工夫してみましょう。
+ エコを目指すために一回の掃除にかかる移動距離を短くしたいですね。掃除が終った時点で移動距離を表示する工夫をしてみましょう。でも、そもそもどうやって掃除が終ったかどうか判断するの?
+ Roomba はバッテリーで動作しています。ある一定の距離を移動すると電池がなくなって動けなくなります。このことをシミュレートできるようにスクリプトを改良してみましょう。
++ 充電ステーションを表すスプライトを追加しましょう。掃除をしているRoomba がバッテリーが少なくなると、掃除を中断して充電ステーションを探し始めるようにしてみましょう。
++ しばらく充電ステーションで休むと Roomba は再び元気になります。掃除を再開できるようにしましょう。
+ ややっ!ネコが現れました。ネコは普段は寝ているのですが、ときどき移動しては足跡を残します。Roomba は足跡を掃除するのに大忙しです。でも、掃除に熱中するあまりネコに怪我をさせないで下さいね。