ソフトウェア設計及び演習2016

プログラム::ball::モジュール化

モジュール分けと階層化

ball_layers.png

ライブラリ

モノと操作を実現するために, 直接 GTK, GDKを使ってプログラムするのでは, 抽象度が低く,考えにくく,間違えやすいので, アニメーションとイベントを提供する層を作成する.

  • ボールたちはスプライト
  • ペンギンは時間で変化する背景画像
  • 背景画像でのマウスとキーボードイベント

(参考) ball::アニメーションのライブラリ化

アニメーション

一定時間毎に,背景描画,スプライト描画を行う

アニメーション領域データ構造

  • 描画領域
  • 背景画像
  • 中にいるスプライト達
  • イベント
  • タイムアウト関数
  • ライブラリを変更することなく,
  • ライブラリを使う側で関数を用意できるように

アニメーション領域API

  • アニメーション領域の作成
  • 背景画像を設定する
  • アニメーション領域の消去

スプライト

一定時間毎に背景の上を動く

スプライトのデータ構造

  • のっているアニメーション領域
  • 画像,大きさ,位置,向き,速さ
  • タイムアウト関数

スプライトAPI

  • 新しく生まれる
  • 動く
  • 消去

マイイベント

アニメーション領域で起こるマウスとキーボードイベントを取得し, ユーザ指定プログラムを呼び出す仕組みを提供する.

マイイベントのデータ構造

  • マウス移動イベントと処理関数へのポインタ
  • マウスボタンイベントと処理関数へのポインタ
  • キーボードイベントと処理関数へのポインタ

マイイベントのAPI

  • 新しいマイイベントを作る
  • アニメーション領域にマイイベントを設定する


モジュール

はかないボール, ball/

生成,動き,消える

無敵ボール, mighty/

マイティの生成,動き

背景, bg/

背景を動かす

ゲーム, ball_and_mighty/

ゲームの生成

  • 背景の生成
    • イベントの生成
  • ボールとマイティの生成
  • イベントループ

ヘッダファイル

ball/ball.h 泡のようなはかないボール

データ構造
 typedef mySprite *ball;

としているが本当は,

 typedef struct {
    mySprite sprite;
    ball独自の情報
 } *ball 
ballのAPI
  • (無敵ボールと出会って)消える
  void ball_remove(ball self)
  • 時間とともに動く
  void ball_move(ball self)
  • 中で壁にぶつかると跳ね返る
  • 一定時間間隔で呼ばれる
  • 目覚める
  ball ball_new(void)

mighty/mighty.h 無敵ボール

mightyのデータ構造
 typedef (mySprite + alpha) *mighty;
mightyのAPI
  • 生まれる
  mighty mighty_new(area)
  • 時間とともに動く
 void mighty_mov(mighty self)
  • 壁にぶつかると跳ね返る

bg/bg.h 見守るペンギン達

データ構造
 typedef myAnimeArea *bg;
bgのAPI
  • 生まれる
  bg_new(area)
  bg_set(bg_pixmap)
  • 行進は続く
 複数の背景をtimeoutで描く
  • クリックされる(と泡ボールを生む)
  背景のイベント構造体


最終更新日:2015/03/05 10:01:23