14:29:35)追加された行はこの色です。削除された行はこの色です。[#s556f7a3]2012年度のアドバンストプログラミングに向けて、この授業のために開発された簡易的なゲームライブラリとアプリケーションのプログラムです。~担当の森が開発した簡易的なゲームライブラリとアプリケーションのプログラムです。ライブラリとアプリケーションを分けることで、~ライブラリとアプリケーションを分ける事で、~統一されたシステムをベースにした柔軟なゲーム開発が可能になります(はず...)。~ゲームシステム(ヒットポイント管理、ゲームクリア・オーバー条件、ステージマップ管理、敵キャラ行動プログラム)等は~ライブラリに任せ、具体的なステージ構成はアプリケーション側にプログラムしましょう。~難易度の異なる複数のステージを作ったりする際には、ライブラリで構築した関数や構造体を使い、~使用する関数やパラメータ等を変更する事で実現します。~ライブラリに任せる部分とアプリケーションに任せる部分を切り分けてプログラムする設計が重要です。~最初は提供されているライブラリやアプリケーションのプログラムを修正する事で課題を達成し、~次にライブラリを本格的に変更して独自のゲームシステムを構築しましょう。[#tdb9b966]ODEはこのゲームライブラリがベースにしている~オープンソースの物理シミュレーションライブラリです。~正確な物理シミュレーションより速度を重視した設計でゲーム用途に向いています。~今回はスクリプトファイルを実行する事で、自動的にインストールされます。ODEは物理シミュレーションを行う部分と表示を行う部分に分かれています。~表示プログラムは自分でOpenGL等を用いて作成することも可能ですが、~ODEには予めdrawstuffという簡易的な表示ライブラリが付属しています。~内部でOpenGLを用いてますが、特に意識する事はありません。スクリプトによりODEの解凍、コンパイル、インストールと今回の課題のサンプルプログラムのコンパイルとインストールが行われます。LinuxとUbutuにて動作確認しています。OSXや最新のlinuxで行いたい場合は以下のファイルをダウンロードしてインストールして下さい。スクリプトによりODEの解凍、コンパイル、インストールと今回の課題のサンプルプログラムのコンパイルとインストールが行われます。ODEの最新版を使っています。Linuxの場合と同じコマンドを実行しますが、~ODEをコンパイルするためには予めMacPortsやyum,apt-get等を用いて、~freeglut等のOpenGL関係のライブラリをインストールしておく必要があります。[#sa09ce3d]大規模なプログラム開発では、デバッグの容易さやコンパイル時間の短縮のために、~プログラムの要素毎にファイルを作成し、それぞれ分割コンパイルを行い、最後に結合します。~また、頻繁に使用する関数等は共有ライブラリとしてまとめ、~複数のアプリケーションプログラムから呼び出して使用します。~さらに、コンパイルする際に一々コマンドを入力するのは面倒なので、~makeによってコンパイルを自動化します。以下では、大規模なプログラム開発で常識的に行われている以上の3点について解説します。(例ではコンパイルのためにgccを使っていますが、~gamelibではodeを使用する関係でC++のコンパイラが必要なため、g++を用いてコンパイルしています。[#uc776c7f]一つのアプリケーションプログラムを開発するために~複数のファイルでプログラムソースを管理し、それぞれを別々にコンパイルして、~最後に結合します。以下の.cファイルがあるとします。func.c以上のファイルの中にはただ一つmain関数があるものとします。"-c"オプションをつけてコンパイルします。-c"により.oファイルが生成されました。最後に以下のように実行ファイルを生成します。func.oただし、"-o"オプションは実行ファイルの名前を指定しています。[#se80496f]ライブラリを用意する事、はアプリケーションプログラムで頻繁に使用する関数等を予め開発して、~アプリケーション開発時に何度も同じプログラムを開発する手間を省いたり、~予め十分に構造を設計しておく事でバグの発生を防ぐ狙いがあります。~試しに普段使用しているコンピュータで使われている共有ライブラリを以下のコマンドで見てみましょう。/usr/local/libアプリケーションプログラム開発時には、そのライブラリの思想を十分汲み取る事で、~効率の良いプログラム開発ができ、アプリケーションプログラムのアイディア実現に集中する事ができます。Xの場合、共有ライブラリのファイルは"lib"で始まり.dylibで終わる事になっており~今回はlibfunc.dylibを作成するものとします。~まず、以下の.cファイルがあるとします。func2.c以上のファイルの中にはmain関数があってはいけません。"-c"オプションをつけてコンパイルします。-c"により.oファイルが生成されました。最後に以下のように共有ファイルを作成します。libfunc.dylibただし、"-o"オプションは共有ファイルの名前を指定している。linuxの例linuxの場合、共有ライブラリのファイルは"lib"で始まり.soで終わる事になっており~今回はlibfunc.soを作成するものとします。~まず、以下の.cファイルがあるとします。func2.c以上のファイルの中にはmain関数があってはいけません。"-c"オプションをつけてコンパイルします。-c"により.oファイルが生成されました。最後に以下のように共有ファイルを作成します。libfunc.soただし、"-o"オプションは共有ファイルの名前を指定しています。[#l5ca86a5]共有ライブラリを使用するためにはコンパイラにオプションを渡す必要があります。リンクするライブラリを指定するオプション。X)のようになっているが、??の部分のみ記述します。-実行する際の注意点(linuxの場合)ライブラリはldconfigで指定された場所か、~環境変数LD_LIBRARY_PATHで指定された場所を探すため、~適切に設定する必要があります。本ライブラリでは"/usr/local/lib"等、通常システム用のディレクトリにインストールされるライブラリが~ユーザ領域にインストールされる設計になっています。Xの場合はDYLD_LIBRARY_PATH)を実行環境に合わせて設定し直す必要があります。そのため以下のような記述をexec.shに自動的に書き込むようにスクリプトを作っていますので、~exec.shを通して完成したプログラウを実行する事ができます。[#e02faab1]具体的なゲームアプリケーションはここに作成します。~shooting_gameディレクトリにサンプルとなる以下の基本ファイルが保存されています。include/gamelib/gamelibのヘッダファイルのディレクトリです。以下のファイルが含まれています。Engine(ODE)のヘッダファイルのディレクトリです。include/drawstuff/ODEに付属しているODEを簡易に実行し、表示する環境のヘッダファイルのディレクトリです。[#zf884f51]ソースファイルのディレクトリです。src/ode-0.11.1/ODEのソースコードの圧縮ファイルを解凍すると現れるディレクトリです。~物理シミュレーション、衝突判定、表示や操作のためのライブラリ等がおさめられています。~MAKEスクリプトを実行する事で自動的にコンパイルとインストールが行われます。src/gamelib/本ライブラリの本体のソースコードが保存されています。~以下のファイルが存在します。Makefilemakeを行う際の情報を書き込む。drawstuffのバージョンを登録する。//物理シミュレーション開始時に実行される関数(start)を登録する。&simLoop;//各ステップ毎に実行される関数(simLoop)を登録する。&command;//キーボードのキーが押された時に実行される関数(command)を登録する。&stop;//シミュレーション終了時に実行される関数(stop)を登録する。"./textures/";//テクスチャの画像ファイルを保存しているディレクトリの場所(./textures)を登録する。画面サイズを小さくすると処理が軽くなりますので、~演習室PCでは遅くなる場合に試してみて下さい。application/shooting_game/shooting_game.hODEを簡易に実行するdrawstuffに登録するコールバック関数を定義します。~定義された関数はmain関数の中で登録している。gamelibの初期化。/*セルフエージェントを初期化。構造体のデータはself_agent.hで定義されている。/*セルフエージェントを初期化。構造体のデータはself_agent.hで定義されている。gamelib全体のアップデート。/*自機のアップデート。/*自機のアップデート。