C言語とDXライブラリで弾幕STGを作ってみよう！ Part1 準備編

#自己紹介
V高専生の西行響希です。普段はC++&DXライブラリやUnityでゲーム作成をしたり、AtCoderで競技プログラミングをしています。
V高専生の中には制作意欲が高く、いろいろと作成して活動している活発な人がいます。その高い技術力をどうにか多くの人に見てほしいという気持ちで今回V高専Advent Calendarを立ち上げてみました。

#初めに
高専でプログラミングを習う際、ほとんどの人はC言語を扱うことになるだろう。その中でも、コマンドラインをベースにしたCUIプログラミングがほとんどだ。
ソースコードを作成したらコンパイルをし、あの黒い画面で結果を見て次のステップに進む。そういった学習を高専のプログラミングの授業で行っている。
ここで一つ問いたいのが「__こんな地味なことをやって面白いと思うのか？__」ということだ。
(~~面白く感じるのだったらこの記事は読まなくてもいいだろう。このウインドウを閉じてぜひ黒い画面と微笑みあって欲しい。~~)

そこで実際にゲーム作成に用いられるDXライブラリを用いて、処理を目に見える形にして制作していこう。

#DXライブラリとは
[DXライブラリ](https://dxlib.xsrv.jp/)とは、DirectXというWindowsデスクトップアプリの開発に用いられるものをプログラミングしやすいようにまとめたものである。ゲームライブラリということで、画像の描画や音声の再生はもちろんのこと、ウインドウ上にテキストを描画したり、独自規格のアーカイブ内のファイルのオープンしたりすることができる。

#今回やること
本講座では、DXライブラリの基本的な関数を実際に動かしていき、C言語の様々な文法も同時に学んでいきます。

- Visual Studio 2019のインストール
- DXライブラリのダウンロード
- ウインドウの表示

#前提
- C言語がそれなりに扱える
- Windows環境を持っている
- やる気がある
- プログラミングが好き

#Visual Studioのインストール
1. [Visual Studio 2019](https://visualstudio.microsoft.com/ja/downloads/?rr=https%3A%2F%2Fdocs.microsoft.com%2Fja-jp%2Fvisualstudio%2Fide%2Fwhats-new-visual-studio-2019%3Fview%3Dvs-2019)のダウンロードページに行き、無料で使えるCommunityバージョンの無料ダウンロードをクリックしてインストーラをダウンロードする。(実はインストーラのインストーラ)
2. 先ほどダウンロードしたインストーラをクリックして、指示通りにインストールする。
3. スタートメニューに「_Visual Studio Installer_」が追加されているので開き、「C++によるデスクトップ開発」にチェックを入れ、インストールする。(とてもダウンロード量が多いので注意)
4. スタートメニューに「_Visual Studio 2019_」があることを確認する。

#プロジェクトの作成
1. DXライブラリのダウンロード<br>
[DXライブラリ置き場 DXライブラリのダウンロード](https://dxlib.xsrv.jp/dxdload.html)<br>
から「DXライブラリ Windows版」にある「DXライブラリ VisualC++用」をダウンロードする。
2. ダウンロードしたzipファイルをわかりやすいところに解凍する。

#DXライブラリの導入
ここが一番手がかかるので気を付けて進めてください。

1. Visual Studio 2019を起動し、右下の「新しいプロジェクトの作成」をクリックする。
![Microsoft Visual Studio 2019_11_28 16_06_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/1ab274d6-bdd9-5318-097b-983c6af7ec09.png)

2. プロジェクトテンプレート一覧から、「Windows デスクトップウィザード」を探してクリックする。
![Microsoft Visual Studio 2019_11_28 16_06_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/320a4329-244a-b418-d5dc-8b3c5d5b9ce9.png)

3. プロジェクト名は適当につける。場所はわかりやすいところに作成する。(Visual Studioというフォルダを作成し、その中にプロジェクトを作成するなど)
![Microsoft Visual Studio 2019_11_28 16_07_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/a0a34af3-6c2e-763a-eccb-596b5e46abc1.png)

4. アプリケーションの種類は「デスクトップアプリケーション(.exe)」を選び、追加のオプションの「空のプロジェクト」にチェックを入れる。
![Microsoft Visual Studio 2019_11_28 16_08_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/b5573a90-1917-26d2-365c-ac9188d6ecd8.png)

#DXライブラリの導入
プロジェクトを作成したら、DXライブラリの導入を行う。プロジェクトを新規作成したらその都度行うので忘れないようにしてほしい。DXライブラリの導入を行う前にC++のファイルを1つ作成する。Visual StudioではC言語でおなじみの.c拡張子のファイルは生成できないのでC++の拡張子.cppファイルを生成する。C++はC言語の文法も扱えるので問題ない。とりあえず`main.cpp`を作成することにする。
これをしないとDXライブラリの導入を行うウインドウで変更したい項目が出てこないことがあるので必ず忘れないように。そしたら右側の「ソリューションエクスプローラー」というところに先ほど作成した`main.cpp`をダブルクリックで開いて、一番下の「プロジェクト(P)」から「`作成したプロジェクト名`のプロパティ」をクリックする。
![スクリーンショット (21).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/529e90b4-2d70-49c0-f9af-2dcbbd8eefdb.png)
そうしたら以下のようなウインドウが出てくるのでDXライブラリの導入を行う。
![TypeGame - Microsoft Visual Studio 2019_11_28 16_54_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/5204cbac-3469-d37d-b542-8bba7dc3d061.png)

1. 左上の構成が「すべての構成」になっていることを確認して、左の「構成プロパティ」→「詳細」を開いて、その中の文字セットを「マルチバイト文字セットを使用する」を選択する。右下の適用ボタンを押す。
2. 「C/C++」を開いて「追加のインクルードディレクトリ」を選択。右の空欄の右端に下向きの矢印が出てくるのでクリックして「編集」を選ぶ。右下の適用ボタンを押す。
![スクリーンショット (22).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/6163d572-54b0-1e3f-67e7-1e1c9356f675.png)
3. 出てきたウインドウの右上にあるフォルダアイコンをクリックして空欄の右端にマウスカーソルを近づけると「...」というボタンが出てくるのでクリック。エクスプローラー画面が開くので解凍したDXライブラリの`プロジェクトに追加すべきファイル_VC用`フォルダを選択する。右下の適用ボタンを押す。
![TypeGame - Microsoft Visual Studio 2019_11_28 20_24_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/fad277f9-16f7-f68b-9c35-0c3d41e7fba9.png)
4. リンカーのライブラリディレクトリも3.と同様のことを行う。
5. 「C/C++」から「コード生成」を選択し、左上の構成を「すべての構成」から「Release」に変更する。右の欄から「ランタイムライブラリ」を選択し、「マルチスレッドDLL(/MD)」から「マルチスレッド(/MT)」に変更する。適用ボタンを押す。
![TypeGame - Microsoft Visual Studio 2019_11_28 20_35_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/60b81421-3984-203b-ebc1-679e1b54097b.png)
6. 構成を「Release」から「Debug」に変更し、「ランタイムライブラリ」を「マルチスレッドデバッグDLL(/MDd)」から「マルチスレッドデバッグ(/MTd)」に変更する。適用ボタンを押す。
7. OKボタンを押して閉じる。

以上で設定は終了。お疲れ様です。

#ウインドウの表示
実際にDXライブラリを使用してみましょう。以下にウインドウを表示させるだけのソースコードを載せる。`main.cpp`にコピペをしよう。

```cpp:main.cpp

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    //DXライブラリの初期化
    if (DxLib_Init() == -1) return 1;

    //キー入力の待機
    WaitKey();

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

    return 0; 
}
```
上に「デバッグ(D)」があるので、そこから「デバッグなしで開始」を選ぶ。コンパイルに成功すると、そのままプログラムを起動してくれる。すると真っ黒い画面が出てくるので、何かキーを押してプログラムを終了する。

__エラーが発生したときは、エラーメッセージを見よう！__ プログラムが間違っていたらその箇所を指定してくれる。もし「DxLib.hが開けません」という趣旨のメッセージがでたら、先ほどのDXライブラリを扱うための設定がうまくいっていない可能性が高い。もう一度やり直して原因を探ってほしい。

いままでC言語を扱ってきた人は、`int WINAPI WinMain`というものにビックリしただろう。これはWindowsでGUIプログラミングをするときにmain関数の代わりに必要になるものである。

`DxLib_Init()`、 `WaitKey()`、 `DxLib_End()` はそれぞれ「DXライブラリを扱うための初期化処理を実行する」、「キー入力されるまで待つ」、「DXライブラリの終了処理をする」関数である。DxLib_Init()やDxLib_End()等のDXライブラリのシステム的な関数は忘れると思わぬ挙動を起こしたり、Windowsが停止する可能性があるため忘れないこと。

また、DxLib_Init()が、初期化に失敗したときに-1を返すので、

```cpp
if (DxLib_Init() == -1) return 1;
```
で異常終了させている。

#まとめ
いかがだったでしょうか。ウインドウが出ただけでは「すごい！」ってなることは無いと思いますが、日々のプログラミングと同じように__積み重ねが大事です__。次回からはどんどん中身を作っていくのでこれからもよろしくお願いします。