Aqutras Members' Blog

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

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

こんにちは,morivdenです.
ゲームプログラミングの勉強を兼ねて,
DXライブラリを用いた簡単なタイピングゲームを作ってみようと思います.

今回はタイトル画面と, 問題文を出力してキーボードから文字を入力する部分まで実装します.

環境

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

DXライブラリとは

DXライブラリ置き場より引用

DXライブラリとは,DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXや
Windows関連のプログラムを使い易くまとめた形で利用できるようにした
C++言語用のゲームライブラリです.

DXライブラリの導入方法やVisualStudioでの使用法については省略させていただきます.

タイピングゲーム制作

プロ生ちゃんをふんだんに使用した
タイピングゲームを作ってみようと思います.

実装の流れについてですが,まずは始まりと終わりが機能しなければいけないので,
タイトル画面と終了動作を最初に実装しました.

タイトル画面はこのような感じです.
f:id:morivden:20160426224353p:plain

終了動作を関数化しようと考えたのですが,
main関数の方で終了しなければ正しくプログラムを終了できなかったので,
終了の部分はmain関数の最後に残しました.

タイトル画面と終了動作を実装した後は,
画面への文字列の表示とキーボードからの入力の受け付けを実装しました.

メインとなるプレイ画面(試作段階)はこのような感じです.
f:id:morivden:20160426225657j:plain

キーボードから文字の入力を受け付ける際に当初はGetInputChar()関数を使っていたのですが,
GetInputChar()関数は文字が入力されるまで待ってくれないので,
実行すると無限ループになってしまいました.
そこで文字が入力されるまで待ってくれるGetInputCharWait()関数を使うことで,
無限ループに陥る問題を解決しました.

    // 入力された文字を格納するために利用
    char Typing[2] = "";  
    do {    // InputAnswerに格納されている答えの文字と比較して一致するまで入力させる
        TnputChar = GetInputCharWait(TRUE);   
        Typing[0] = InputChar;  
        Typing[1] = '\0';  
    } while (Typing[0] != InputAnswer[i]);  
    // 格納された文字の出力
    DrawStringToHandle(220 + i * 15, 240, Typing, x, FontHandle);

Typing変数についてですが,処理が正常に行われているかどうかの確認として
受け取った文字を画面に表示するために用いています.
また,初めはchar Typing[1] = "";としていたのですが,
表示がおかしくなるのでその対策としてTyping[1]にヌル文字を代入しました.

char Typing[1] = "";とした場合
f:id:morivden:20160427010528j:plain

char Typing[2] = "";として2文字目にヌル文字を代入した場合
f:id:morivden:20160427010601j:plain

テストプレイの様子です.
f:id:morivden:20160427013932g:plain

終わりに

今回はタイトル画面と問題文の出力,入力の受け付けと出力の実装を行いました.
今後はリザルト画面や終了画面,スピード測定などの実装を進めていき,
最終的にはe-typing寿司打のようにスコアが算出される
本格的なタイピングゲームにしていきたいと思います.