2011年07月27日

C#とDXライブラリでゲーム制作 4回目

ゲームとしてのメイン処理

一般的にゲームプログラムの場合は「ゲームループ」と言われるループ構造によって処理されることが多いです。無限ループの中で「入力」「更新」「描画」をくり返し実施します。

「入力」というのは、キーボード・マウス・パッド(ゲーム機のコントローラのようなもの)からの入力を受け付ける部分です。

「更新」というのは、入力したデータを元にキャラクターを移動させたり、あるいはコマンドを選択したりするものと、入力が何も無くても勝手に行うもの(アニメーションや、敵キャラクターの移動など)があります。

「描画」というのは、キャラクターやテキストなどを画面に出力する部分です。

例えばシューティングゲームでは、プレイヤーからの「入力」により「プレイヤーキャラクターを移動」させたり「弾を発射」したり「爆弾(ボム)を爆発(発動)」させたりしますが、「入力」がなくても「敵キャラクターは移動」するし「弾を発射」したりします。

プログラムのイメージとしては次のようになります。

Main()
{
    while (true)    // 無限ループ
    {
        入力処理();
        更新処理();
        描画処理();
    }
}

実際にはこの他に、イニシャル処理や終了処理、ゲームを止めるための仕組み、などが必要です。

また、Windowsアプリケーションでは定期的にWindowsメッセージを処理する必要があるため、ループ内にその仕組みを入れる必要があります。これは、DXライブラリを使う場合は「DX.ProcessMessage()」を呼び出すだけです。この関数はウィンドウが閉じられると「-1」を返すため、「ゲームを止めるための仕組み」としても使えます。

Main()
{
    初期化処理();
    if(初期化に失敗)
    {
        終了;
    }
    while (true)    // 無限ループ
    {
        入力処理();
        更新処理();
        描画処理();

        DX.ProcessMessage(); // Windowsメッセージの処理
        if(戻り値が-1)
        {
            break; // ループを抜ける
        }
    }
    終了処理();
}

良かったらクリックしてください
にほんブログ村 IT技術ブログ プログラム・プログラマーへ  人気ブログランキングへ

posted by among at 21:00 | Comment(0) | TrackBack(0) | ゲーム制作

2011年07月24日

C#とDXライブラリでゲーム制作 3回目

テストプログラムの作成

とりあえず簡単なゲームを作ってみることにします。ゲーム制作の解説として多いのはコマンド入力式のアドベンチャーゲームや、シューティングゲームですが、私はもっと簡単なもので良いと思います。ここでは、『○×ゲーム』(三目並べ)を題材にします。

アプリケーションのエントリーポイント

ゲーム本体の前に、Windowsアプリケーションとして動作するための基本的な部分を記述します。いわゆるMain関数にあたるところです。ここでは、Windowsアプリケーションとしての初期化処理と終了処理、ゲームの本体部分の呼び出しを行います。もちろんDXライブラリの初期化処理・終了処理も行います。

関数のイメージとしては、このような感じになります。

Main()
{
	初期化処理();
	if(初期化に失敗)
	{
		終了;
	}
	ゲームの本体部分();
	終了処理();
}

実際のソースコードは次のようになります。

    class SystemMain
    {
        /// <summary>
        /// アプリケーションのエントリーポイント(ここからプログラムが始まる)
        /// </summary>
        [STAThread]
        static void Main()
        {
            // ウィンドウモードに切り替え
            DX.ChangeWindowMode(DX.TRUE);

            // ウィンドウタイトルの変更
            DX.SetMainWindowText("○×ゲーム");

#if !DEBUG
            // ログ出力を行わない
            DX.SetOutApplicationLogValidFlag(DX.FALSE);
#endif
            
            // ウィンドウのサイズ指定
            DX.SetGraphMode(800, 600, 32);

            // DXライブラリの初期化
            if (DX.DxLib_Init() == -1)
            {
                // 初期化に失敗した場合は終了
                return;
            }

            // ゲームのメイン部分を生成
            GameMain gm = new GameMain();

            // ゲームのメイン部分を実行
            gm.Main();

            // DXライブラリの終了処理
            DX.DxLib_End();

            return;
        }
    }

DXライブラリの関数を使い、「ウィンドウモードへの切り替え」「ウィンドウタイトルの変更」を行います。DXライブラリは初期状態だとログを出力するので、デバッグビルド以外のときは「ログ出力を行わない」ようにします。また、「ウィンドウのサイズ指定」も行っておきます。

「DXライブラリの初期化」に失敗すると戻り値に「-1」が返されるので、その場合は「終了」させます。このときエラー表示などを行った方が親切ですが、テストプログラムなので省略します。

ゲームのメイン部分は「GameMain」というクラスの「Main」に記述することにします。「GameMain」のインスタンスを生成し、「Main」を実行します。

最後に「DXライブラリの終了処理」を実行してアプリケーションは終わります。

良かったらクリックしてください
にほんブログ村 IT技術ブログ プログラム・プログラマーへ  人気ブログランキングへ

posted by among at 20:00 | Comment(0) | TrackBack(0) | ゲーム制作

2011年07月23日

C#とDXライブラリでゲーム制作 2回目

DXライブラリの使い方

「Visual C++ 2010 Express Editionを使用した場合のDXライブラリの使い方」と同じような手順で、C#での使い方を説明します。

プロジェクトの作成

Visual C# 2010 Express Editionでソフトを作るにはまず『プロジェクト』を作成する必要があるので以下にその方法を示します。

  1. Visual C# 2010 Express Edition のメニューの『ファイル』→『新しいプロジェクト』を選びます。
  2. 『インストールされたテンプレート』項目から『空のプロジェクト』を選びます。
  3. 作成するプロジェクトの名前を『名前』に入力します。ここでは仮に『Project1』とします。
  4. 『OK』を押します。

これでプロジェクトの作成は完了です。

プロジェクトへ新規プログラムファイルを作成・追加

『プロジェクト』の作成が済んだので、次にソフトウェアの本体であるプログラムを記述するためプログラムファイルを新規に一つ作成してプロジェクトに追加します。

  1. Visual C# 2010 Express Editionのメニューから『プロジェクト』→『新しい項目の追加』を選びます。
  2. ウィンドウ左側の『インストールされたテンプレート』から『Visual C#アイテム』を選び、右側の項目からは『コードファイル』を選び、下の『名前』欄にファイル名を入力し(ここでは仮に『CodeFile1.cs』とします)、『追加』ボタンを押します。

これでプログラムファイルの新規追加は完了です。

DXライブラリを使用するためのプロジェクトの設定

最初のプログラムファイルを追加した後はDXライブラリを使用するプログラムのコンパイルに必要なプロジェクトの設定を行います。

『DxLibDotNet.dll』を使う方法と、『DxDLL.cs』を使う方法がありますが、ここでは『DxDLL.cs』を使います。

  1. Visual C# 2010 Express Editionのメニューから『プロジェクト』→『既存項目の追加』を選びます。
  2. 展開したライブラリの中に含まれる『DxDLL.cs』を選び、『追加』ボタンを押します。
プログラムを組む

DXライブラリを使ったプログラムを組んでみます。

  1. ソースコードの先頭に次の一文を追加しておきます。この一文が無いとDXライブラリの関数は使えません。
    Using DxLibDLL;
  2. DXライブラリの関数は『DX.』を先頭に付けた名前で使用することが出来ます。例えば『DX.DxLib_Init』『DX.DrawPixel』などになります。
  3. 例として、下記のようなプログラムを組みました。先ほど追加した『CodeFile1.cs』に記述します。
using DxLibDLL;
using System;

namespace Test
{
    class TestApplication
    {
        /// <summary>
        /// アプリケーションのエントリーポイント(ここからプログラムが始まる)
        /// </summary>
        [STAThread]
        static void Main()
        {
            // ウィンドウモードに切り替え
            DX.ChangeWindowMode(DX.TRUE);

            // ウィンドウのサイズ指定
            DX.SetGraphMode(800, 600, 32);

            // DXライブラリの初期化
            if (DX.DxLib_Init() == -1)
            {
                // 初期化に失敗した場合は終了
                return;
            }

            // 適当に描画処理
            {
                DX.DrawBox(100, 100, 200, 150, DX.GetColor(255, 0, 255), DX.TRUE);
                DX.DrawString(100, 200, "サンプル描画", DX.GetColor(255, 255, 64));
            }

            // キー入力待ち
            DX.WaitKey();

            // DXライブラリの使用終了
            DX.DxLib_End();

            return;
        }
    }
}
プロジェクトのビルド、実行
  1. Visual C# 2010 Express Editionのメニューから『デバッグ』→『ソリューションのビルド』を実行します。入力にミスがなければ、ビルドが完了します。
  2. プロジェクトのディレクトリの『bin\Debug』および『bin\Release』に、DXライブラリの『DxLib.dll』をコピーします。実行ファイルと同じディレクトリに、このDLLファイルがないと動きません。
  3. メニューから『デバッグ』→『デバッグ開始』を選択します。エラーがなければ実行されます。紫色の四角形と、黄色い文字が表示されます。
  4. 作成された実行ファイルは『bin\Debug』および『bin\Release』に置かれます。これらを直接実行することももちろん可能です。

あとは、C++からDXライブラリを使うのと同じような感じで使えると思います。

追記

今の状態だと、ウィンドウが2つ表示されてしまいます。これは『CodeFile』の標準がコンソールアプリケーションになっているためです。メニューの『プロジェクト』→『(入力したプロジェクト名)のプロパティ』を選択し、『アプリケーション』タブの中の『出力の種類』というところが『コンソールアプリケーション』になっているので、『Windowsアプリケーション』に変更してください。これでウィンドウは1つだけ表示されるようになるはずです。

良かったらクリックしてください
にほんブログ村 IT技術ブログ プログラム・プログラマーへ  人気ブログランキングへ

posted by among at 21:00 | Comment(1) | TrackBack(0) | ゲーム制作