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

# お詫び

[こちら](https://qiita.com/Saigyo_HBK/items/4fc24376c79f7a73badf)をご覧ください。
はい、C言語から逃げました。

理由としては、やはりC言語だと作るのが大変になる部分が多いので、C++を使う予定でした。これだと、C言語詐欺になってしまい、他の言語を使うのならC#の方がコードがわかりやすい部分が多いので急遽C#に変更しました。


# 目次

- Visual Studioのインストール
- プロジェクトの作成
- C言語プログラムのC#化


# 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」が追加されているので開き、「.NET デスクトップ開発」にチェックを入れ、インストールする。(とてもダウンロード量が多いので注意)
![スクリーンショット (145).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/53b05b3c-1dfc-66cc-21b0-2f5c865b97db.png)
4. スタートメニューに「Visual Studio 2019」があることを確認する。


# プロジェクトの作成

1. Visual Studio 2019を起動し、右下の「新しいプロジェクトの作成」をクリックする。 
![aaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/5e079f5c-f1a5-6327-4939-df7c7e2a16e9.png)

2. プロジェクトテンプレート一覧から、「空のプロジェクト(.NET Framework)」を探してクリックする。
![スクリーンショット (146).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/5895fa4e-89ae-86ea-aa14-161a2228814e.png)

3. プロジェクト名を適当に付け、保存場所は分かりやすいところにする。(ドキュメントフォルダの中など)

### DXライブラリの導入

プロジェクトが完成したら、DXライブラリの導入を行います。[こちら](https://dxlib.xsrv.jp/dxdload.html)から「VisualC# 用パッケージ」をダウンロードして解凍してください。
解凍ができたら、*DxDLL.cs*をプロジェクトフォルダの中にまた同じ名前のフォルダがあるので、そこの*App.config*というファイルと同じところにコピーします。
Visual Studioのソリューションエクスプローラのプロジェクト名を右クリックして「追加」→「既存の項目」をクリック。先ほどの「DxDLL.cs」を追加してください。
![スクリーンショット (147).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/ddf3416b-e900-587d-8afb-8bec8cc3da42.png)

これで一応環境の整備はある程度整いました。


# C言語プログラムのC#化

Visual Studioのソリューションエクスプローラのプロジェクト名を右クリックして「追加」→「新しい項目」をクリック。ファイルの名前を「Program.cs」とします。

[この記事](https://qiita.com/Saigyo_HBK/items/7bf767131753314edab9)に書かれているC言語のプログラムをC#に直したものがこちらになります。

```cs:Program.cs
using DxLibDLL;

namespace Qiita
{
    class Program
    {
        /// <summary>
        /// メイン関数
        /// </summary>
        public static void Main()
        {
            const int WIN_W = 960, WIN_H = 720;

            DX.SetOutApplicationLogValidFlag(DX.FALSE);
            DX.SetAlwaysRunFlag(DX.TRUE);
            DX.SetWindowSizeChangeEnableFlag(DX.TRUE);
            DX.SetFullScreenResolutionMode(DX.DX_FSRESOLUTIONMODE_DESKTOP);
            DX.SetWindowText("シューティングゲーム");
            DX.ChangeWindowMode(DX.TRUE);
            DX.SetGraphMode(WIN_W, WIN_H, 32);

            // DXライブラリの初期化
            if (DX.DxLib_Init() == -1) return;

            DX.SetDrawScreen(DX.DX_SCREEN_BACK); //裏画面処理を設定する

            int image = DX.LoadGraph("img/jiki.png");
            float x = WIN_W / 2.0F, y = WIN_H - 100.0F;
            const float MOVE_SPEED = 3.0F;

            while (DX.CheckHitKey(DX.KEY_INPUT_ESCAPE) == 0)
            {
                DX.ProcessMessage();
                DX.ClearDrawScreen(); //裏画面をクリアする

                if (DX.CheckHitKey(DX.KEY_INPUT_LEFT) == 1) x -= MOVE_SPEED;
                if (DX.CheckHitKey(DX.KEY_INPUT_RIGHT) == 1) x += MOVE_SPEED;
                if (DX.CheckHitKey(DX.KEY_INPUT_UP) == 1) y -= MOVE_SPEED;
                if (DX.CheckHitKey(DX.KEY_INPUT_DOWN) == 1) y += MOVE_SPEED;

                //自機の画面外へのはみ出しをチェックする
                if (x < 0.0F) x = 0.0F;
                if (x > WIN_W) x = WIN_W;
                if (y < 0.0F) y = 0.0F;
                if (y > WIN_H) y = WIN_H;

                DX.DrawRotaGraphF(x, y, 1.0F, 0.0F, image, DX.TRUE);
                DX.ScreenFlip(); //2つの画面を入れ替える
            }

            DX.DxLib_End();
        }
    }
}
```

C言語と違うところは多くありますが、基本的にDXライブラリで提供されている関数や定数は、その前に`DX.`を付けなければなりません。

できたら、`Ctrl+Shift+B`でビルドします。このまま実行したいところですが、C#版ではDXライブラリのDLLをコピーしないと動かないのでコピーしてきます。

ダウンロード、解凍を済ませてあるC#版DXライブラリのフォルダから、**DxLib.dll**、**DxLib_x64.dll**、**DxLibDotNet.dll**の3ファイルを、DxDLL.csをコピーしたフォルダにあるbinフォルダ内のDebugフォルダにコピーしましょう。

C言語版の時に作った**jiki.png**も同じところにimgフォルダを作ってそこに入れましょう。

これで`F5`または`Ctrl+F5`キーを押せばC言語版と同じような動作をします。


# まとめ

これからはC#で開発をしていきたいと思います。
次回は、ソースコードを分割して、きれいな形にしていきましょう。