Advanced Programing 2012?
企業や研究でのプログラム開発では、開発の効率化やバグ等を減らすため
同じような処理は関数等にまとめて、ライブラリ化する事が良く行われます。
そこで今回はゲーム開発を題材にライブラリ開発の意義や方法について学びます。
ライブラリを開発するのにも別のライブラリを使用することは良く行われます.
今回の課題では、3次元物理シミュレータとしてOpen Dynamics Engineを使用して、
ライブラリの使用と開発の両方を経験する事によって、使いやすいライブラリや
開発やメンテナンスしやすいライブラリはどのようなものかを実際に作る事で考えてもらいます。
楽しいゲームを開発しやすくするゲームライブラリの開発
適当なディレクトリに移動して,以下のコマンドを実行します.
$ 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/AP2016/ap2014_gamelib_linux_20140507.zip
演習室のVine Linuxにて動作確認しています。
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/AP2016/ap2015_gamelib_mac_20150328.zip
$ chmod 777 ./start.sh
でやってみる。
インストールしたライブラリ等の解説は次のページに詳しく書いてあります。
gamelibの解説?
以下のディレクトリには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
$ 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: ジャンプ v: 視点切り替え(一人称視点と背後霊(?)視点.ゲームによってはどちらかに固定した方がよいかも) u: 敵キャラ 消滅/生成 (最終的なゲームでは無意味なので削除すべきだが、動作確認のため実装) h: 強制終了
application/shooting_game
ディレクトリ内にはゲームアプリケーションのソースコードが入っています。
ゲームアプリケーションはライブラリを使用して具体的なゲームを構成します。
src/gamelib
にはライブラリのソースコードが入っています。
アプリケーションとライブラリのディレクトリ内にあるファイルを全てエディタで開いて、
中身を確認してください。
main.c
に、drawstuffによるシミュレーション管理のための構造体や関数が書かれており。
shooting_game.c
に、実際のゲームのロジックが書かれています。
shoogint_game.c
には
start()
という関数があり、ゲーム環境の初期化を行っています。
そこにマップを構成するための関数が書かれているので、
関数を修正してマップを変更してみましょう。
最初のマップは3x3ですが、ライブラリのソースを変更するともっと大きなマップにする事は可能です。
何を変更すれば良いか、ソースコードを読んで調べてみよう。
基本的な処理を行う関数を作成し、必要に応じて引数や組み合わせを変更して、
様々なアプリケーションを作成する事を可能にするのがライブラリ開発の醍醐味です。
マップの変更はその1つなので、まず始めに挑戦してみてください。
shooting_game.c
の
start()
では、敵エージェントの配置についても初期化しています。
関数を追加して、敵エージェントの数を増やしてみましょう。
なお、
simLoop(int pause)
と
stop()
も敵エージェントについてのコードの追加が必要になります。
コンパイルには
$ ./start.sh
をすればよいのですが、改めてODEをインストールする必要はないので、
start.sh
中の
tar zxvf ode-${ODE_VERSION}.tar.gz
から、
cp drawstuff/src/.libs/libdrawstuff.* ../../lib/
までを#でコメントアウトしてください。 それと、その下の
cd ../gamelib/
を
cd gamelib/
に書き換えてください。
ライブラリを書き換えゲームシステムを完成させる。
下記項目を全て行う。
自由度の高い課題は自分なりのアイディアを実現して良いですが、
思いつかなければ(例)の一つを実現して下さい。
最終目標へ近づく!:「楽しいゲームを作るためのゲームライブラリの開発」
工夫して、自分なりのゲームシステムを持つライブラリとアプリケーションを作成して下さい。
提出時に全員の前で、作成したゲームを見せながらプレゼンしてもらいます。
独創的なシステムやキャラがあるほど評価を高くします。
サンプルコードにバグがある可能性や、課題が分かりづらい等の問題点がある可能性もあります。
何か気がついた事があれば担当教員やTAに連絡をお願いします。
課題の達成方法等にあまり細かいルールは設定しません。
ライブラリを全面的に書き換えて、C++にしてもらっても構いません。
サンプルより良いゲームライブラリにしてくれれば、1つ1つの課題をクリアするよりも良い評価にします。
その代わりしっかり動く様にして来てください。