2Dゲーム基本プログラム

「DirectXによるゲームプログラミング」を一通りやると、とりあえず2Dゲームが作れるかな っていう気になります。で、実際にシューティングを作ってみたのですが、
「なんじゃこの巨大なソースファイルは!」
っていう物になってしまいました。
関数化を心がけながら作ったものの、所詮1本のソースなのでどうやっても巨大になってしまい、 誰も触れないんじゃないかというものになってしまいました。

そこで、参考書のプログラムやMSSDKのサンプルプログラムなどを参考(ごちゃ混ぜ?)に、 ソースファイルの分割をして2Dゲームのサンプルというか、基本のプログラムを作って みました。
このプログラムを元にして、いろんなプログラムが作れるのではないでしょうか?

プログラム構成

GameSamp.lzh」をダウンロードし、解凍すると 次のファイルが作成されます。

ファイルの種類 ファイル名 説明
BITMAPファイル backImage.bmp 背景画像(640×480)
Chara.bmp キャラクタ画像
Menu.bmp スタート画面メニュー画像
String.bmp 文字列画像(キャラクタコード順に並べたもの)
ソースファイル ddutil.cpp MSSDKのDirectDrawサンプルについているラッパー関数
diutil.cpp DirectInputのラッパー関数(自作)
Game.cpp ゲーム画面のプログラム
mydraw.cpp DirectDraw関係の共通プログラム
Openning.cpp スタート(オープニング)画面のプログラム
WinMain.cpp 基本プログラム
ヘッダファイル DDSp.h define文など
ddutil.h ddutil.cppのヘッダファイル
diutil.h diutil.cppのヘッダファイル
Game.h Game.cppのヘッダファイル
mydraw.h mydraw.cppのヘッダファイル
Openning.h Openning.cppのヘッダファイル
WinMain.h WinMain.cppのヘッダファイル

プロジェクト作成方法

上記のファイルを任意のフォルダに格納し、プロジェクトを作成します。作成方法は 次のとおりです。

  1. プロジェクトの新規作成でWin32Appricationを選択し、作成。
  2. 作成したプロジェクトのフォルダに上記すべてのファイルをコピー。
  3. ビットマップファイルを元にリソースファイルを作成する。
    1. 「挿入」→「リソース」を選択し、リソース一覧から「Bitmap」を選択して 「インポート」ボタンをクリック
    2. ファイルの種類を「全てのファイル」にし、4つのBitmapファイルを選択して 「OK」ボタンをクリック
    4つのBitmapを持つリソースファイルが作成されるので、名前を付けて保存する。
  4. ソースファイル、リソースファイルをプロジェクトに追加する。
    1. 「プロジェクト」→「プロジェクトへ追加」→「ファイル」を選択
    2. ファイルの種類が「C++ ファイル」になっていることを確認し、ウィンドウに 出ている全てのファイルを選択して「OK」ボタンをクリック
    成功すると、ワークスペースの内容が次のようになる(はず)。
  5. 「Resource View」でBitmapの中を見ると、4つのBitmapファイルはそれぞれIDB_BITMAP1、 IDB_BITMAP2といった名前になっているので、わかりやすい名前に変える。
    1. 変えたいビットマップを右クリックし、「プロパティ」を選択
    2. IDを任意の名前に変える
    プログラム中で指定している名前は次のとおり
    画像の種類 ファイル名 付ける名前
    背景画像 backImage.bmp "BACKIMAGE"
    キャラクタ画像 Chara.bmp "CHARACTER"
    メニュー画像 Menu.bmp "MENU"
    文字列画像 string.bmp "STRINGS"
    ””を付けることを忘れないよう気を付ける事!
  6. DirectDraw、DirectInputを使えるようにプロジェクトの設定を行う。
    1. 「プロジェクト」→「設定」を選択
    2. 「リンク」タブをクリックし、「オブジェクト/ライブラリ モジュール」に 以下のライブラリを追加
      • ddraw.lib
      • dinput.lib
      • dxguid.lib
    3. 追加したら「OK」ボタンをクリック

以上の設定を行い、ビルドすればexeファイルが出来上がる・・・はずなんですが、 どうでしょう。成功すればこんなんが出来ると 思うのですが・・・

プログラム実行&操作方法説明

エラーもなくビルドできたら実行してみましょう。「SampleGame」というオープニング画面 が出ると思います。
音関係は何も組み込んでないのでとても寂しいですが、サンプルということで許してください。
ちなみにDirectSoundにもラッパー関数が用意されていて、簡単に組み込めます。

ゲームパッドの十字ボタンまたはキーボードのカーソルキーで、画面上のカーソルが上下に 移動します。「START」を選んでゲームパッドのAボタンまたはキーボードのAボタンを 押すとゲームが開始します。「END」ならプログラムが終了します。なお「CONTINUE」 を選んでも何も反応しません。m(__)m

ゲーム画面では、自機と変な穴(?)があります。自機はゲームパッドの十字ボタンまたは キーボードのカーソルキーで移動できます(それしか出来ない)。
自機と穴にはあたり判定があって、当たるとスタート画面に戻ります。
あたり判定は画像の大きさをそのまま使っているので見た目と当たり判定の大きさは ずいぶん違いますが、気にしないで下さい。

プログラムの中身について

オープニング画面はOpenning.cppを、ゲーム画面はGame.cppをいじればどのようにも 改造できるって言うのが判るのではないでしょうか?
面クリア型のゲームならGame.cppを面数分作ったりといったことも出来そうです。 このプログラムがいいか悪いかはわかりませんが、とりあえず開発効率が上がりました。 それにこうやって分割しておけば、複数の人と一緒に作るときも便利です。
ちなみに画像ファイルは256色じゃないと使えません。自分で用意するときは気をつけましょう。

私のように情報処理技術者試験2種レベルのC言語しか知らない&数学を知らないといった 人にはゲーム開発はそうとう難しいです。でも、このプログラムを使えば基本的なところ だけは抑えてあるので、拡張していけば少しずつでもゲームっぽいものが作れるように なるんじゃないかな?
プログラムの中身自体は「DirectXによるゲームプログラミング」のプログラムとMSSDKの パクリで、少しでも判りやすいようにコメントを多く付けてあります。
とりあえず何でもいいから作ってみたいという人はこのソースを全てプリントアウトして、 参考書と照らし合わせてどこで何をやっているかを解析してみてはいかがでしょうか?