読者です 読者をやめる 読者になる 読者になる

Aqutras Members' Blog

株式会社アキュトラスのメンバーが、技術情報などを楽しく書いています。

DXライブラリでタイピングゲーム制作 その2

技術

こんにちは,morivdenです.
前回(DXライブラリでタイピングゲーム制作)に引き続いてDXライブラリを用いた
簡単なタイピングゲームを作成していこうと思います.
前回ではタイトル画面,問題文の出力,キーボードからの入力までを実装しました.
今回は正誤判定と終了画面を実装していきます.

環境

  • Windows 8.1 Pro
  • Visual Studio 2015
  • DXライブラリ

正誤判定と終了画面の実装

前回実装したキーボードからの入力では正誤判定を行っていませんでした.
今回は正誤判定を実装し,正解時にはアルファベットを水色に,
不正解時にはアルファベットを赤色に,かつプロ生ちゃんの表情を変化させました. また,打ち終わった際にもプロ生ちゃんの表情を変えました. 正解時
f:id:morivden:20160510155801j:plain

不正解時
f:id:morivden:20160510155811j:plain

打ち終わった時
f:id:morivden:20160510155819j:plain

GetInputCharWait()関数を使うことで入力の際の無限ループは回避できました.
しかし,正誤判定を実装して動作テストしたところ,
なぜか最初に入力の受け付けよりも先に正誤判定が行われていました.
なのでIsFirst変数を用意し,一番最初に行われる正誤判定の際だけフラグを立てて
処理を飛ばすことで正しい順序で処理が出来るようにしました.

// 入力と正誤判定
for (j = 0; j < AlphaLen; j++) {

    InputChar = GetInputCharWait(TRUE);
    Typing[0] = InputChar;
    // 正誤判定
    if (Typing[0] != Alpha[j]) {
        // 1回目のGetInputCharWait関数より先に1回目の正誤判定が行われるため
        // IsFirstで1回目の正誤判定を飛ばす
        if (IsFirst == 0) {
            j--;
            IsFirst = 1;
            continue;
        }
        // ミス時の画像を表示
        Typing[0] = Alpha[j];
        DrawGraph(MAIN_X, MAIN_Y, MissHandle, TRUE);
        DrawStringToHandle(ANSWER_X + j * FONT_SIZE / 2, ANSWER_Y, Typing, RED, FontHandle);
        j--;
    }
    else {
        // 正解時の画像を表示
        DrawGraph(MAIN_X, MAIN_Y, MainHandle, TRUE);
        DrawStringToHandle(ANSWER_X + j * FONT_SIZE / 2, ANSWER_Y, Typing, LIGHTBLUE, FontHandle);
    }
}

次に終了画面の実装を行いました.

終了画面
f:id:morivden:20160510164532j:plain

終了するか続行するかを選択させるSelectQuit()関数は
bool型の関数で実装し,main関数でのwhile文の継続条件として利用しています.

// Escキーが押されれば終了、Nキーが押されれば続行
while (TRUE) {
    if (CheckHitKey(KEY_INPUT_ESCAPE)) {
        return TRUE;
    }
    else if (CheckHitKey(KEY_INPUT_N)) {
        return FALSE;
    }
}
// ゲームのメイン部分
while (!QuitFlag) {
    GameMain();
    QuitFlag = SelectQuit();
}

終わりに

今回は正誤判定と終了画面を実装しました.
次回はタイプスピードや正確性などを表示するリザルト画面を実装していこうと思います.
制限時間を実装するかどうかは現在検討中です.