2011年08月11日

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

テトリスを作る

○×ゲームだとちょっとゲームとして物足りないので、テトリスを作ってみることにします。

テトリスは(ゲーム性にこだわらなければ)非常に簡単なプログラムなので、プログラムの入門用サンプルとして使われることが多いので、その辺りの説明は端折っていきます。適当なキーワードで検索すれば見つかると思います。

大雑把な改造内容

システムメイン

これはそのまま流用します。

ゲームメイン

こちらはテトリス用に大幅に改造することになります。

背景クラス

○×ゲームでは黒板のような背景と#の形の線を引きましたが、今回は黒一色に枠だけ描きます。もちろん、背景画像を読み込むようにすると、それっぽくなりますが。

フィールド管理クラス

○×ゲームでは配置した○、×を管理しました。テトリスでは固定されたブロックを管理します。役割は同じようなものですが、処理の内容は大きく変わります。

カーソルクラス

テトリスでは使わないので削除します。

キーボード入力状態管理クラス

基本的には流用しますが、キーボードのリピート処理を追加します。これは、キーを押しっぱなしにしたときに、そのキーを連打したかのような状態を作り出すための機能です。

FPS制御用クラス

これはそのまま流用します。

メッセージ表示クラス

これも流用します。が、あまり使いません。

その他のクラス

テトリスとして必要なクラスを追加します。テトリスのブロックや、ピース(4つのブロックの組み合わせをピースと呼ぶことにします)の管理などでしょうか。

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

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

2011年08月07日

C#とDXライブラリでゲーム制作 10回目(とりあえず最終回)

ゲームの完成

ここまででゲームは完成しました。完成したものを公開します。少しだけ改造していますが、ほとんどは説明した通りの内容になっています。

説明を端折った部分もありますが、そう難しいことはしていないつもりなので、ソースコードとコメントから判断してください。

OXGame.zip

なお、DxDLL.cs、DxLib.dll、は同梱していないので、それぞれ所定の場所にコピーしてください。

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

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

2011年08月06日

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

ゲームループの実装

ゲームループを実装します。基本的には「入力処理」「更新処理」「描画処理」、それと「Windowsメッセージの処理」のくり返しになります。

ここで「入力処理」については、「キーボードの読み取り」と、入力した内容によっての処理を組み合わせて、「演算処理」と呼ぶことにします。

もう一度、ゲームループの概略はこのようになります。

while (true)    // 無限ループ
{
    次のフレームを待つ();
    演算処理();
    更新処理();
    if(描画する時間がある)
    {
        描画処理();
    }
    DX.ProcessMessage(); // Windowsメッセージの処理
    if(戻り値が-1)
    {
        break; // ループを抜ける
    }
}

演算処理

演算処理は、キーボード押下状態の読み込みと、それによる処理を組み合わせたものです。キーボード押下状態の読み込みは必ず行いますが、処理の方は、そのときの状態によって変わってきます。一般的なゲームであっても、メニュー画面と、ゲームのメイン画面では、操作する対象も違いますし、操作方法も変わることがあります。

また、今回の場合は、プレイヤーの手番のときはプレイヤーが操作しますが、CPUの手番のときはCPUが操作します。そのため、「プレイヤーの入力待ち」か「CPUの処理待ち」かを判断して、分岐させるようにします。

さらに、入力が完了した後に、勝敗の判定も行います。これは別関数にしておき、フィールド管理クラスの勝敗判定関数を実行して判定したあと、メッセージ管理クラスにメッセージを設定します。

演算処理の概要
{
    キーボードの読み取り();
    switch(状態)
    {
        case プレイヤーの入力待ち:
            入力待ち処理();
            break;
        case CPUの処理待ち:
            CPU処理();
            break;
    }
    勝敗の判定();
}
勝敗判定関数の概略
{
    if(プレイヤーの勝利)
    {
        メッセージクラスに“プレイヤーの勝利”を設定;
    }
    if(CPUの勝利)
    {
        メッセージクラスに“プレイヤーの敗北”を設定;
    }
    if(引き分け)
    {
        メッセージクラスに”引き分け”を設定;
    }
}

更新処理

「演算処理」と「更新処理」を分けたのは、「演算処理」が入力にしたがって処理する内容なのに対し、「更新処理」は入力とは無関係に処理する内容になります。プレイヤーが何もしなくても勝手に動くモノは、ここで更新します。

今回の場合は、カーソルのアニメーションくらいしかすることがありません。

描画処理

描画処理は、「ダブルバッファリングによる描画処理」でほとんど説明しました。実際の描画処理は、各オブジェクトで実装しています。したがって、ここでは各オブジェクトの描画処理を呼び出すだけとなります。

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

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