Pressingを起動すると,仮想環境“Hakoniwa”とインタプリタ“Kotosaka”の入力欄が表れる.Kotosakaにスクリプトを入力すると,各文字を打鍵した強さの情報が保持され,スクリプトの実行時にHakoniwaで打鍵力に応じた出力が得られる.例えば,new Ball()と強く打つと大きく,弱く打つと小さいボールが現れる.我々は,fig:overviewに示す通り打鍵力の検出にMicrosoft社の研究用プロトタイプPressure-sensitive keyboard[3]を用いたが,ノートPCの内蔵加速度センサを用いる手法[1]でも同様のデモ環境を構築できるだろう.
Hakoniwaは2D物理シミュレータBox2D[4]のJava版実装を内蔵している.また,KotosakaはJavaScriptに影響を受けた簡易手続き型言語を解釈する.実装の詳細については公式サイトを参照されたい.
BallとBoxは物体を表し,インスタンス化するとそれぞれ円と矩形がHakoniwaに現れる.そのときの打鍵が強ければ大きな物体が,弱ければ小さな物体が現れる.これらのクラスは次のようなメソッドとフィールドを持つ.
プリセットクラスのBrushは物体の軌跡を描くブラシを表す.ブラシは色と太さという2つの属性を持つ.インスタンス化の引数で色が,打鍵の強さで太さが決まる.
ブラシのmix(brush)メソッドを用いると,既存の二つのブラシを混ぜて新しいブラシを作れる.すなわち,二つのブラシの中間の色と太さを持つブラシのインスタンスが返される.メソッドの主体と引数のどちらに近いブラシが生成されるかは,それぞれの名前をどれだけ強く打鍵したかによる.
プリセットクラスのStack,Queue,BinaryTreeはデータ構造を表す.インスタンス化するだけでは何も表示されないが,複数の物体を格納すると,物体同士を結ぶ半透明のバネとして描画される.
データ構造のインスタンスは,データ構造に固有の,要素を出し入れするメソッド(push(e), pop(), insert(e), removeなど)を持っている.要素がデータ構造に挿入されるときは引力が,取り出されるときは斥力が,要素と構造の間に働く.メソッド名を打つときの打鍵が引力または斥力の大きさを決める.すなわち,Queueでpop()と強く打つと高速に,弱く打つと低速に,要素がデータ構造から打ち出される.
Pressingは,キーボード操作に加え,マウスカーソルで直感的にHakoniwaとインタラクションすることができる.例えば,物体をドラッグしたり,クリックして選択したのちKotosakaでselected()と打ってその選択結果を利用することができる.