[[Advanced Programing 2012]]

*目次 [#k12fe86d]
#contents

*第5回以降の趣旨 [#sdeef366]
企業や研究でのプログラム開発では、開発の効率化やバグ等を減らすため
~
同じような処理は関数等にまとめて、ライブラリ化する事が良く行われます。
~
そこで今回はゲーム開発を題材にライブラリ開発の意義や方法について学びます。

ライブラリを開発するのにも別のライブラリを使用することは良く行われます.
~
今回の課題では、3次元物理シミュレータとしてOpen Dynamics Engineを使用して、
~
ライブラリの使用と開発の両方を経験する事によって、使いやすいライブラリや
~
開発やメンテナンスしやすいライブラリはどのようなものかを実際に作る事で考えてもらいます.

*最終目標 [#re33e102]
楽しいゲームを開発しやすくするゲームライブラリの開発

*Open Dynamics Engine とゲームのサンプルプログラム [#x417a3a3]
+ODE付属のデモプログラムを動かしてみよう.
+サンプルプログラムを動かしてみよう.
+サンプルプログラムの構造を理解しよう.
+サンプルプログラムを改造してみよう.

**サンプルプログラムのダウンロード [#g735e5ac]
+ダウンロードしたら適当な場所で解凍しましょう.

**ODE付属のデモプログラムを動かしてみよう [#p30ec5be]
 $ cd /ode-0.11.1/ode/demo/
 $ ./demo_crash

**サンプルプログラムを動かしてみよう [#h368fcc8]
 $ cd bin
 $ ./exec.sh ./shooting_game

-サンプルプログラムのボタン配置(後の改造で変更可)
 d: 前進
 s: 後進
 f: 右平行移動
 a: 左平行移動
 e: 右旋回
 w: 左旋回
 g: ジャンプ
 v: 視点切り替え(一人称視点と背後霊(?)視点.ゲームによってはどちらかに固定した方がよいかも)
 u: 敵キャラ 消滅/生成 (最終的なゲームでは無意味なので削除すべきだが、動作確認のため実装)
 h: 強制終了

**サンプルプログラムの構造を理解しよう [#l7537f9f]
-全てのファイルをエディタで見てみよう.

 application/shooting_game_c-lang
ディレクトリ内にはゲームアプリケーションのソースコードが入っています.
~
ゲームアプリケーションはライブラリを使用して具体的なゲームを構成します.

 src/gamelib
にはライブラリのソースコードが入っています.

アプリケーションとライブラリのディレクトリ内にあるファイルを全てエディタで開いて、
~
中身を確認してください.

 main.c
に、drawstuffによるシミュレーション管理のための構造体や関数が書かれており、
~
 shooting_game.c
に、実際のゲームのロジックが書かれている。

**サンプルを改造してみよう [#n6a5ded3]
 shoogint_game.c
には
 start()
という関数があり、ゲーム環境の初期化を行っている。
~
そこにマップを構成するための関数が書かれているので、
~
関数を修正してマップを変更してみよう。
~
最初のマップは3x3だが、ライブラリのソースを変更するともっと大きなマップにする事は可能です。
~
何を変更すれば良いか、ソースコードを読んで調べてみよう。

基本的な処理を行う関数を作成し、必要に応じて引数や組み合わせを変更して、
~
様々なアプリケーションを作成する事を可能にするのがライブラリ開発の醍醐味です。
~
マップの変更はその1つなので、まず始めに挑戦してみてください。


*課題 [#ia580668]
**5月30日までの課題 [#hc80dada]
ライブラリを書き換えゲームシステムを完成させる
-Enemy Agentが動くようにする.
-球が当たるとEnemy AgentのHit Pointが減少
-Hit Pointが0になると敵エージェントが消滅
-Self Agentが敵の身体に接触するとSelf AgentのHit Pointが減少
-Self AgentのHit Pointが0になると「Game Over」を表示してゲーム終了
-ボスエージェントを設定して、ボスのHit Pointが0になると「Game Clear」を表示してゲーム終了
-バグ報告←これが一番評価が高い

**6月13日までの発展的課題 [#zae81b5b]
最終目標へ近づく!:「楽しいゲームを作るためのゲームライブラリの開発」
-同じゲームライブラリを使用して複数のステージを作成する.
--ディレクトリを改めて作成して、その下で開発しても良い.
--マップが異なっている.敵の動きが違う.
--難易度が変わる
--同一プログラム中でステージ変化をするにはどうしたら良いか考える.
-新たなマップ要素を追加する~
--例)坂道
--例)ジャンプでしか移動できない段差等…
-複数のEnemy Agentを作成~
--例)動きや形を変更する.
--例)Self Agentのコードを参考にして、弾を撃てる様にする.等…
-Enemy Agentの動きを知能化する~
--例)Self Agentに近寄る.
--Hit Point等の状況によって動きを変える、等…
-物理シミュレーションを活かしたゲームシステムを作成する
--商業ゲーム開発に携わった中西先生は~
「Hit Pointシステムに頼らないゲームシステムは楽しい」~
とおっしゃっています.~
Hit Pointシステムがなく、物理シミュレーションを活かした楽しいゲームは作れるでしょうか?~
考えてみてください.

**注意事項 [#mef4a474]
今回の課題は、今年度が初めてになります。
~
サンプルコードにバグがある可能性や、課題が分かりづらい等の問題点があると思います。
~
何か気がついた事があれば担当の森やTAに連絡をお願いします。

課題の達成方法等にあまり細かいルールは設定しません。
~
ライブラリを全面的に書き換えて、C++にしてもらっても構いません。
~
サンプルより良いゲームライブラリにしてくれれば、1つ1つの課題をクリアするよりも良い評価にします。
~
その代わりしっかり動く様にして来てください

**提出方法 [#k4ba1727]
-下記の提出物を第7回(5/30)の講義開始時に回収する.
-提出物一式を入れるフォルダの名前は学生番号とする.
-提出物
--ソースコード
--コンパイルに使用するMakefile
--その他,コンパイル・実行に必要なファイル

**評価方法 [#kc98448d]
-仕様を満たしているか.
--担当の森とTAで実際に動いているかを提出者の環境で確認する.
-ソースコードの可読性の高さ.
--機能ごとに関数を分け,分かりやすい関数名をつけているか(機能ごとにソースを分けて分割コンパイルをする).
--分かりやすい変数名をつけているか.
--分かりやすいコメントを記述しているか.
-機能に対応した分かりやすい関数を設計しているか.
-無駄な処理を行っていないか.
-工夫に応じて加点する.

*参考になる情報 [#j1dcb858]
-公式ホームページ http://www.ode.org/

-demura.net: ロボットの開発と教育 http://demura.net/ode
~
金沢工業大学の出村先生のページ
~
非常に分かりやすい解説

-簡単!実践!ロボットシミュレーション - Open Dynamics Engineによるロボットプログラミング
~
http://www.amazon.co.jp/dp/4627846916
~
出村先生が執筆されたODEの解説本

-『Open Dynamics Engine(ODE)』のオリジナルマニュアル
~
http://www.koj-m.sakura.ne.jp/ode/
~
大阪大学の松下先生のページ

-この授業の担当の中西先生のページや論文等
~
中西先生が手がけたゲーム作品
~
http://smg.ams.eng.osaka-u.ac.jp/~nakanishi/hn_designs_j.html
~
中西 英之. ビデオゲームデザインのためのモデル. 情報処理学会研究報告 モデル化と問題解決, 98-MPS-18-9, 1998.
~
http://smg.ams.eng.osaka-u.ac.jp/~nakanishi/hnp_1998_mps.pdf
~
中西 英之, Katherine Isbister. ビデオゲームに浸透するエージェント技術. 情報処理, Vol. 48, No. 3, pp. 250-256, 2007.
~
http://smg.ams.eng.osaka-u.ac.jp/~nakanishi/hnp_2007_ipsjmag.pdf
~
中西 英之. 20世紀ゲーム少年. ログイン, エンターブレイン, Vol. 21, No. 12, p. 157, 2002.
~
http://smg.ams.eng.osaka-u.ac.jp/~nakanishi/hni_login20century.jpg


*質問がある場合 [#h308a67f]
-浅田研 森までメールをください.~
なお,件名は「AP2012:課題3」としてください.~
hiroki_AT_ams.eng.osaka-u.ac.jp (_AT_は@に変えてください)


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS