((color red 平成24年度まで講義担当だった鈴木先生が完成させたプロジェクト))です. 今年もモジュール化説明のために利用させていただいています. ((include プログラム::ball::プロジェクト説明)) !!! ものと操作の洗い出し !! 泡のようなはかないボール * (無敵ボールと出会って)消える * 時間とともに動く * 壁にぶつかると跳ね返る * 目覚める !! 無敵ボール * 生まれる * 時間とともに動く * 壁にぶつかると跳ね返る * 衝突すると,泡ボールを消す !! 見守るペンギン達 * 行進は続く * クリックされると泡ボールを生む * キーボード入力で無敵ボールをよろめかせる !! 壁 * ボールがぶつかる !!! モジュール分けと階層化 <<{ball_layers.png} !!! ライブラリ モノと操作を実現するために, 直接 GTK, GDKを使ってプログラムするのでは, 抽象度が低く,考えにくく,間違えやすいので, アニメーションとイベントを提供する層を作成する. * ボールたちはスプライト * ペンギンは時間で変化する背景画像 * 背景画像でのマウスとキーボードイベント !!! アニメーション 一定時間毎に,背景描画,スプライト描画を行う !! アニメーション領域データ構造 * 描画領域 * 背景画像 * 中にいるスプライト達 * イベント * タイムアウト関数 6< * ライブラリを変更することなく, * ライブラリを使う側で関数を用意できるように >9 !! アニメーション領域API * アニメーション領域の作成 * 背景画像を設定する * アニメーション領域の消去 !!! スプライト 一定時間毎に背景の上を動く !! スプライトのデータ構造 * のっているアニメーション領域 * 画像,大きさ,位置,向き,速さ * タイムアウト関数 !! スプライトAPI * 新しく生まれる * 動く * 消去 !!! マイイベント アニメーション領域で起こるマウスとキーボードイベントを取得し, ユーザ指定プログラムを呼び出す仕組みを提供する. !! マイイベントのデータ構造 * マウス移動イベントと処理関数へのポインタ * マウスボタンイベントと処理関数へのポインタ * キーボードイベントと処理関数へのポインタ !! マイイベントのAPI * 新しいマイイベントを作る * アニメーション領域にマイイベントを設定する