*目次 [#k12fe86d]
#contents

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

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

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

*サンプルコードのインストール [#k53b4fc1]
** 演習室(linux)でのインストール [#rb065e69]
適当なディレクトリに移動して,以下のコマンドを実行します.
 $ wget www.er.ams.eng.osaka-u.ac.jp/kawai/AP2016/ap2014_gamelib_linux_20140507.zip
 $ unzip ap2014_gamelib_linux_20140507.zip
 $ cd ap2013_gamelib_linux_20140507
 $ ./start.sh
./start.sh スクリプトによりODEの解凍、コンパイル、インストールと
今回の課題のサンプルプログラムのコンパイルとインストールが行われます。
~
サンプルプログラム(演習室 VineLinux 用)へのリンク http://www.er.ams.eng.osaka-u.ac.jp/kawai/AP2017/ap2014_gamelib_linux_20140507.zip
~
演習室のVine Linuxにて動作確認しています。

** Mac OSXでのインストール [#v4951e8d]
Mac OSXや最新のlinuxで行いたい場合は以下のファイルをダウンロードしてインストールして下さい。
 $ wget www.er.ams.eng.osaka-u.ac.jp/kawai/AP2016/ap2015_gamelib_mac_20150328.zip
 $ unzip ap2015_gamelib_mac_20150328.zip
 $ cd ap2015_gamelib_mac_20150328
 $ ./start.sh
./start.sh スクリプトによりODEの解凍、コンパイル、インストールと
今回の課題のサンプルプログラムのコンパイルとインストールが行われます。
ODEの最新版を使っています。
Linuxの場合と同じコマンドを実行しますが、
~
ODEをコンパイルするためには予めMacPortsやHomeBrew等を用いて、
~
freeglut等のOpenGL関係のライブラリをインストールしておく必要があります。
(最新のODEは演習室の環境でコンパイルできず、古いODEはOSXで動作しません)
~
サンプルプログラム(演習室 MacOS X 用)へのリンク  http://www.er.ams.eng.osaka-u.ac.jp/kawai/AP2017/ap2015_gamelib_mac_20150328.zip

**権限がないと怒られるときは [#t26f0e0f]
 $ chmod 777 ./start.sh
でやってみる。

*Open Dynamics Engine とゲームのサンプルプログラム [#x417a3a3]
インストールしたライブラリ等の解説は次のページに詳しく書いてあります。
~
[[gamelibの解説]]


**ODE付属のデモプログラムを動かしてみよう [#p30ec5be]
以下のディレクトリにはODEが解凍されています
 src/ode-0.11.1 # または src/ode-0.13(最新ODEバージョン)

 $ cd src/ode-0.11.1/ode/demo/ # または、src/ode-0.13/ode/demo/
 $ ./demo_crash

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

 $ cd application/shooting_game
 $ ./exec.sh ./shooting_game

サンプルプログラムでは、敵(enemy_agent)がランダムに動いており、
~
弾を撃って当てるとhit_pointが減少し、0になると消滅します。
~
全ての敵が消滅するとGame Clearが表示され、ゲームが終了されます。
~
自機(self_agent)と敵の本体が接触すると、
~
自機のhitpointが減少し、0になるとGame Overが表示され、ゲームが終了されます。


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

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

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

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

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

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


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

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

**コンパイル [#ae837949]
コンパイルには
 $ ./start.sh
をすればよいのですが、改めてODEをインストールする必要はないので、
 start.sh
中の
 tar zxvf ode-${ODE_VERSION}.tar.gz
から、
 cp drawstuff/src/.libs/libdrawstuff.* ../../lib/
までを#でコメントアウトしてください。
それと、その下の
 cd ../gamelib/

 cd gamelib/
に書き換えてください。

*課題3 [#ia580668]
**新たなマップ要素を追加しよう [#hc80dada]
マップに関するライブラリを書き換え、ゲームシステムを更新し、をれを反映したアプリケーションを作ってください。
~
自分なりのアイディアを実現して良いですが、思いつかなければ(例)の一つを実現してください。

-例)坂道
-例)ジャンプでしか移動できない段差
-例)移動しずらいデコボコがある
-例)入るとHit Pointが減少する毒沼

**注意事項 [#mef4a474]
-サンプルコードにバグがある可能性や、課題が分かりづらい等の問題点がある可能性もあります。何か気がついた事があれば担当教員やTAに連絡をお願いします。
-適宜コメントを入れたり、関数化したりして、他人にもわかりやすいプログラムになるように心がけてください。全くコメントのないものは減点します。
-他人のプログラムを写したことが判明した場合は、両者とも0点になります。
-課題内容に対応していないプログラムには点をつけられません。

**提出方法 [#k4ba1727]
-第7回(5/31)の講義中に課題プログラムのコンパイルと実行が正しくできるかを確認します。
-下記の提出物を第7回講義日(5/31)24:00までにCLEで提出してください。
-提出物一式を入れるフォルダの名前は学生番号(ログインIDではない!)にし、zipファイルに圧縮してください。
-提出物
--ソースコード
--コンパイルに使用する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
~


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


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