2010年3月27日土曜日

[Scala] 遊んでみた ~ Kojo Learning Environment ~

Kojo というプログラミング/コンピュータアート学習環境をさわってみた。Logoに影響を受けており、機能的にはいわゆるタートルグラフィックスがメイン。コード補完つきスクリプトエディタとインタプリタ、オブジェクトインスペクタも付属していて汎用的なプログラミング学習ツールになっている。学習用の言語はScalaのサブセット(というよりDSL?)で、Kojo自体がScalaで書かれているとのこと。一応子供向けプログラミング学習環境なのだけれど、大人でも十分楽しめる。

こちらの紹介記事から知りました。
Scala言語を学ぶやさしいツール「Kojo」が無償公開 - Publickey

ダウンロードは Kojo Download から。実行には JRE 6 以上が必要(推奨は JRE 6 Update 17)。

インストールして起動したところ。NetBeansのような、オーソドックスなIDEといった趣き。
Turtle Canvas には本当に亀がいるw



スクリプトエディタに描画スクリプト(Kojo Command)を書くと、亀が命令されたとおり動いて絵を書く。まあ亀は必要ない(非表示も可)のだけどかわいいので重要ファクターw

とりあえず、Script Editor で Hello World したところ。Output Pane に出力される。



Script Editor はコード補完機能あり。

サンプルスクリプトがたくさん用意されていて、メニューからロードすることができる。これは便利。サンプルを実行したり修正していくうちにDSLの書き方がわかってくる。



一番ベーシックな Square スクリプト。正方形を描く。

clear
repeat(4) {
forward(100)
right
}

実行すると、亀が走る(歩く?)。



描画完了。



円を描く Circle スクリプト。

clear
setAnimationDelay(10)
setPenThickness(2)
setPenColor(green)
setFillColor(orange)
repeat(360) {
forward(1)
turn(1)
}


実行中。。。



描画完了。



Scalaのサブセットということで、Scalaの構文やライブラリが使える(対応構文・ライブラリの一覧はちょっと探せなかったが)。
for文を使ったスクリプト。


clear
invisible
for(i <- 0 until 5) {
val t = newTurtle(i * 100 - 300 ,0)
repeat(4) {
t.forward(50)
t.right
}
}


実行。




サンプルが充実しているので一部紹介。

亀がひたすら絵を描く。シュールw



完成図。



こんな綺麗なフラクタル画像も描ける。
私は詳しくないのだけれど、グラフィック系の知識がある人なら色々楽しめるのだと思う。



開発中の Canvas API("Early Preview"となっている)を使ったアニメーション。サインカーブのとてもわかりやすい説明(アニメーションなので、スクリーンショットだと伝わらないけれど・・・)。



チュートリアル(PDF)がこちらからダウンロードできる。

APIリファレンスがどうにも探せなかったのだけれど、サンプルやチュートリアルから拾えた範囲のAPI( Kojo Commands )を以下にリストアップ。
  • forward(numberOfSteps) // 進行方向に進む。
  • back(numberOfSteps) // 進行方向と逆に進む。
  • right() // 90°右回転
  • right(degree) // 指定された角度だけ右回転
  • left() // 90°左回転
  • left(degree) // 指定された角度だけ左回転
  • turn(degree) // 指定された角度だけ回転。反時計回り、負の値を与えると時計回り。
  • clear() // キャンバスをクリア
  • jumpTo(x, y) // 指定された座標にジャンプ
  • home() // ホーム位置(座標 (0,0) に戻る)
  • newTurtle(x, y) // 指定された座標に新しいタートルを生成
  • invisible() // タートル画像を非表示
  • penUp() // 進みながらラインを引かない
  • penDown() // 進みながらラインを引く
  • setPenColor(color) // ペンの色を指定。red, blueなどの定数があらかじめ用意されている。
  • setFillColor(color) // 塗りつぶしの色を指定
  • setPenThickness(number) // ラインの太さを指定


Kojo Command は基本的にタートルグラフィックスなので、「進む」「向きを変える」のみで描画する。もっと高度な Canvas API (?) を開発中(サインカーブサンプルは Canvas を使用している)とのこと。


サンプルを動かすばかりでは面白くないので自分で描いてみた。。。


clear
def circle(l: Double) {
repeat(360) {
forward(l)
turn(-1)
}
}
def arc(l: Double, d: Double) {
repeat(180) {
forward(l)
turn(d)
}
}

setPenColor(black)
setFillColor(blue)
repeat(3) {
arc(0.5, -1)
turn(180)
}
arc(1.5, 1)

jumpTo(85,95)
setFillColor(red)
circle(0.1)

penUp
forward(70)
penDown
setFillColor(white)
forward(95)
arc(0.3,-1)


実行。へたっぴw




直観的なコマンドがあり、REPLですぐ確認できるので、算数・数学が好きな子だと熱中するのかもしれない。周囲に子供がいなくて反応を試せないのが残念。

と、現実逃避な半日。。。楽しいけど。><

0 件のコメント:

コメントを投稿