目次

gamelibとは何か

2012年度のアドバンストプログラミングに向けて、
担当の森が開発した簡易的なゲームライブラリとアプリケーションのプログラムです。
ライブラリとアプリケーションを分ける事で、
統一されたシステムをベースにした柔軟なゲーム開発が可能になります(はず…)。
ゲームシステム(ヒットポイント管理、ゲームクリア・オーバー条件、ステージマップ管理、敵キャラ行動プログラム)等は
ライブラリに任せ、具体的なステージ構成はアプリケーション側にプログラムしましょう。
難易度の異なる複数のステージを作ったりする際には、ライブラリで構築した関数や構造体を使い、
使用する関数やパラメータ等を変更する事で実現します。
ライブラリに任せる部分とアプリケーションに任せる部分を切り分けてプログラムする設計が重要です。
最初は提供されているライブラリやアプリケーションのプログラムを修正する事で課題を達成し、
次にライブラリを本格的に変更して独自のゲームシステムを構築しましょう。

Open Dynamics Engine (ODE)について

ODEはこのゲームライブラリがベースにしている
オープンソースの物理シミュレーションライブラリです。
正確な物理シミュレーションより速度を重視した設計でゲーム用途に向いています。
今回はスクリプトファイルを実行する事で、自動的にインストールされます。

ODEは物理シミュレーションを行う部分と表示を行う部分に分かれています。
表示プログラムは自分でOpenGL等を用いて作成することも可能ですが、
ODEには予めdrawstuffという簡易的な表示ライブラリが付属しています。
内部でOpenGLを用いてますが、特に意識する事はありません。

開発方法

大規模なプログラム開発では、デバッグの容易さやコンパイル時間の短縮のために、
プログラムの要素毎にファイルを作成し、それぞれ分割コンパイルを行い、最後に結合します。
また、頻繁に使用する関数等は共有ライブラリとしてまとめ、
複数のアプリケーションプログラムから呼び出して使用します。
さらに、コンパイルする際に一々コマンドを入力するのは面倒なので、
makeによってコンパイルを自動化します。

以下では、大規模なプログラム開発で常識的に行われている以上の3点について解説します。

分割コンパイル

一つのアプリケーションプログラムを開発するために
複数のファイルでプログラムソースを管理し、それぞれを別々にコンパイルして、
最後に結合します。

以下の.cファイルがあるとします。

main.c
func.c

以上のファイルの中にはただ一つmain関数があるものとします。

まず、ぞれぞれを"-c"オプションをつけてコンパイルします。

$ gcc -c main.c
$ gcc -c func.c
$ ls
main.o func.o

"gcc -c"により.oファイルが生成されました。 最後に以下のように実行ファイルを生成します。

$ gcc -o test_func main.o func.o

ただし、"-o"オプションは実行ファイルの名前を指定しています。

共有ライブラリ開発

ライブラリを用意する事、はアプリケーションプログラムで頻繁に使用する関数等を予め開発して、
アプリケーション開発時に何度も同じプログラムを開発する手間を省いたり、
予め十分に構造を設計しておく事でバグの発生を防ぐ狙いがあります。
試しに普段使用しているコンピュータで使われている共有ライブラリを以下のコマンドで見てみましょう。

$ ls /usr/lib
$ ls /usr/local/lib

アプリケーションプログラム開発時には、そのライブラリの思想を十分汲み取る事で、
効率の良いプログラム開発ができ、アプリケーションプログラムのアイディア実現に集中する事ができます。

MacOS Xの場合、共有ライブラリのファイルは"lib"で始まり.dylibで終わる事になっており
今回はlibfunc.dylibを作成するものとします。
まず、以下の.cファイルがあるとします。

func1.c
func2.c

以上のファイルの中にはmain関数があってはいけません。

まず、ぞれぞれを"-c"オプションをつけてコンパイルします。

$ gcc -c func1.c
$ gcc -c func2.c
$ ls
main.o func.o

"gcc -c"により.oファイルが生成されました。 最後に以下のように共有ファイルを作成します。

$ gcc -dynamiclib -o libfunc.dylib func1.o func2.o
$ ls
func1.c func1.o func2.c func2.o libfunc.dylib

ただし、"-o"オプションは共有ファイルの名前を指定している。

linuxの場合、共有ライブラリのファイルは"lib"で始まり.soで終わる事になっており
今回はlibfunc.soを作成するものとします。
まず、以下の.cファイルがあるとします。

func1.c
func2.c

以上のファイルの中にはmain関数があってはいけません。

まず、ぞれぞれを"-c"オプションをつけてコンパイルします。

$ gcc -c func1.c
$ gcc -c func2.c
$ ls
main.o func.o

"gcc -c"により.oファイルが生成されました。 最後に以下のように共有ファイルを作成します。

$ gcc -shared -o libfunc.so func1.o func2.o
$ ls
func1.c func1.o func2.c func2.o libfunc.so

ただし、"-o"オプションは共有ファイルの名前を指定している。

共有ライブラリの使用方法

makeによるコンパイルの自動化

gamelibのディレクトリ構造

application

具体的なゲームアプリケーションはここに作成します。
shooting_gameディレクトリにサンプルとなる以下の基本ファイルが保存されています。

main.c
shooting_game.c
shooting_game.h
Makefile
exec.sh

include

gamelibのヘッダファイルのディレクトリです。 以下のファイルが含まれています。

gamelib.h
game_map.h
self_agent.h
enemy_agent.h
interaction.h

Open Dynamics Engine(ODE)のヘッダファイルのディレクトリです。

ODEに付属しているODEを簡易に実行し、表示する環境のヘッダファイルのディレクトリです。


src

ソースファイルのディレクトリです。

プログラム説明

アプリーケーションソースコード

makeを行う際の情報を書き込む。

ライブラリソースコード

参考になる情報


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