lib/komaba/mini_star/sprite.rb に定義されています。
描画の基本となるクラスです。新しく描画したいものを作る場合、 このクラスを継承した新しいクラスを作り、しかるべき実装をします。
描画の処理内容を作るには、 display メソッドをオーバーライドします。
描画を行うにはグローバルな redisplay_all_objects メソッドを呼びます。 現在存在する全 Sprite オブジェクトの display メソッドが呼ばれ、 画面に描画されます。 描画の手段はこれだけしかありません。 「特定のオブジェクトだけ再描画」はできません。 古い画面をどう残すかの処理が煩雑になるのを避けるためです。
lib/komaba/mini_star/person.rb に定義されています。 Sprite クラスを継承します。
人を描画します。 x, y 座標は足下を表します。
display メソッドで座標を計算しながら人を描画します。 すべて基本的な描画命令のみで構成されています。
内部ではインスタンス変数 (@foo) を極力参照していません。 代わりにメソッド (self.foo) を使っています。 Person クラスを継承したクラスで、メソッドをオーバーライドすることで 自由に挙動を変えられるようにするためです。
examples/splite_test.rb に定義されています。 Person クラスを継承します。
examples/splite_test.rb に定義されています。 Person クラスを継承します。
身長制限を設けるために、 height= メソッドをオーバーライドしています。
examples/splite_test.rb に定義されています。 Person クラスを継承します。
Person の display メソッドを super で呼び出し、 さらに台形を描画してスカートを追加しています。
examples/alien.rb に定義されています。 Person クラスを継承します。
Person クラスと同じ挙動をしますが、内部で保持する座標は 極座標形式になっています。
Sprite クラスを継承し、実装を追加したクラスを作ることで描画を制御します。
継承するときの既存のメソッドのオーバーライドに対応します。 たとえば Person クラスを継承した Woman というクラスで、 display メソッドをオーバーライドすることで描画に追加ができます。
見かけ (外から呼び出せるメソッド) や挙動は同じだが、 内部構造が違うクラスを用意します。 たとえば Person クラスと Alien クラスです。
(Star Ruby などのインストールは install.html をご参照願います。)
現在のところ、 ECC 環境以外の環境でテストする場合、 komaba/array と komaba/mini_star を require する必要があります。
Windows, Linux の場合は以下のように起動してください。
irb -rkomaba/array -rkomaba/mini_star
Mac OS X の場合は以下のように起動してください。
isrb -rkomaba/array -rkomaba/mini_star
テスト方法として、スクリプトを実行して目視で確認する以外ありません。 ライブラリがビジュアライズを活用したものであるからです。 また、以下のテストはまだ全機能を網羅しておりません。 追加次第改訂版をお送りします。
二次元配列を可視化します。白黒の 4x2 の長方形が表示されます。
フィボナッチ数列のコールスタックが表示されます
三次元配列を可視化します。色の配列が表示されます。
順列組み合わせを可視化します。パスカルの三角形が表示されます。
ライフゲームが表示されます。
show 関数に不正な配列を渡した時のエラー表示のテストです。
巨大な二次元配列を可視化します。巨大な白黒の長方形が表示されます。
show_object のテストです。 10x10 の二次元配列の内部状態が表示されます。
show_object のテストです。複雑な配列の内部状態が表示されます。
sierpinski の三角形が表示されます。
Sprite クラスのテストです (テスト方法は後述)。
竹内関数のコールスタックが表示されます。
ソート関数のテストと同時に Person クラスのテストになります。
配布プログラムのソート関数関係のものが動作すれば OK です。
irb (isrb) 上で以下を実行してください。
irb> load("sprite_test.rb")
irb> w = Woman.new # 人 (スカートつき) が表示される
irb> w.x = 100 # X 座標が変更される
irb> w.y = 200 # Y 座標が変更される
irb> w.height = 50 # 身長が変更される
irb> w.hide() # 人が消える
irb> c = Child.new # 子供が表示される
irb> c.height = 200
irb> c.height = 100 # (身長制限のために) 高さが変わらないことを確認する
irb> c.hide() # 人が消える
irb> a = Alien.new # エイリアンが表示される
irb> a.move(200, 200) # エイリアンが移動する
irb> show_classes() # クラス図が表示される
irb> a.move(200, 300) # 現在実行されるメソッドが赤く光る
irb> hide_classes() # クラス図が消える
Person クラス (lib/komaba/mini_star/person.rb) は学生にも見せるものなので、 その点からの突っ込みがあらば助かります。