音ゲーマーのためのゼロから始めるC#講座：第一回まとめ

初めまして、音ゲーデベロッパーの腕毛の人と申します。
色々あって本日からC#の勉強を始めることになりました（講義の開催決定→２日後に実施という超スパン…）。

というのも、僕は前々からUnityでの音ゲー開発をしたい！と思っていたのですが、肝心のプログラミングの知識を持っていませんでした。
そこでDiscord内メンバーの音ゲー開発経験のある方とボイチャで相談したところ、勉強会の開催をすることになりその講師役を快く引き受けてくれました。
この講座は本日５月１１日の昼11時から約一時間開催。１週間程度でC#の基本を学んでしまおうという内容になっています。
###### コロナのせいで仕事もないしなぁ…:thinking:

# 第一回テーマ：はじめの一歩

講師を務めてくれたのは小野塚企画さん[@onozukaKikaku](https://twitter.com/onozukaKikaku)
クイズアプリ用に早押しボタンを作る等、面白い商品を作ったりもしてます。


- 今回の目標
 - プログラムを書いて実行する
 - 型と変数と値を使ってみる
 - コンソールの表示方法を知る
 
この３つを達成できるよう教えて頂きました。


## プログラミングを書いて実行する
PCはMac、コンソールツールにVisual Studioを使用（バージョン7.7.4 build1)し、まずはプロジェクトファイルを作成
![スクリーンショット 2020-05-11 14.43.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/bd4fe227-4709-6f2a-72d4-b4b311720350.png)
左のその他から.NETを選択、コンソールプロジェクトがC#になってる確認ヨシ！作成！
![スクリーンショット 2020-05-11 14.50.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/890fbf6c-ee5f-d0ff-cd39-ee278f265386.png)

ファイル名はMyFirstProjectにしました。英語表記じゃないと動かないようです。
![スクリーンショット 2020-05-11 14.43.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/0b97cd75-814f-946c-3326-ace5b0c6a3f4.png)
すると、こんな感じで初期画面が出現
![スクリーンショット 2020-05-11 14.49.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/5f402277-f4a9-1233-a19e-bf783def6af0.png)

７行目の

```csharp
    public static void Main(string[] args)
```

から下の

        {
このかっこの中身からプログラムが実行されます！
どの言語もだいたいMain〜以降で実行されるらしいです。

最初は何をやっていいのかわからないので、言われるがままに書いていきます。

```csharp
        Console.WriteLine("Hello World!");
```

**の下に**

```csharp
        Console.ReadKey();
```

**を書いてください。**
![スクリーンショット 2020-05-11 15.23.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/f1a70ad8-a01b-48e9-7882-6ccf2aba1215.png)

書きました。

そして左上の再生ボタンを押して実行すると…
![スクリーンショット 2020-05-11 15.26.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/080d5ca8-45d6-8f87-8299-ea271f2d23c6.png)

プログラミングが実行できました。やったね！

Console.WriteLine("Hello World!"); → Hello World!を表示しますという命令

Console.ReadKey(); → 書いた瞬間に消えるのを防ぐ命令

です。割と重要…
あとHello World!以外の文章に変えたりもしました。

 ✅**プログラムを書いて実行する**　
目標達成です！

## 値を入れて表示する
ここから**型**というものを使っていきます。

**{の下、9行目に**

```csharp
     int score = 1000000;
```

**11行目の""の中身を書き換えて**

```csharp
       Console.WriteLine("score: {0}", score);
```

これでスコアを表示してみましょう
![スクリーンショット 2020-05-11 15.59.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/497f821d-3919-8d7c-7cb4-43c2ca134093.png)
実行じゃああああ
![スクリーンショット 2020-05-11 16.02.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/9c59062a-0dfa-609e-684a-8f6ef2a02cca.png)
無事に表示されました！

青文字で表示されてる**int**は**整数型**というものです。
, scoreが9行目のscoreと連動しています。
######（こっからスペース入れるとか半角とか細かく意識しだす）

intは整数のみを表示できる型です。続けて小数点を表示できる型を使ってみます。

10行目に

```csharp
      double bpm = 333.33;
```

13行目に

```csharp
      Console.WriteLine("BPM: {0:}", bpm);
```

を書いていきます。（検索候補とかすぐ出るので割と楽です）
![スクリーンショット 2020-05-11 16.23.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/04b42826-6a7b-d8a7-50bd-d31d5e101e68.png)
（元ネタわかるかな）
![スクリーンショット 2020-05-11 16.31.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/e2729642-16ad-cc29-676e-d1f5c7466198.png)
はい、成功です
ここで入力した**double**は**小数型**といいます。

ここまできたら曲名欲しいですよね？書いていきます。

11行目に

```csharp
        string songName = "The Legend of MAX";
```

13行目に

```csharp
        Console.WriteLine("songName: {0}", songName);
```

入力すんだよほら
![スクリーンショット 2020-05-11 16.39.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/3f47f542-7446-6af9-a4d0-4d7b724d0c52.png)

（ここで僕はConsole.WriteLine("songName: {0}", songName);を書き忘れて注意メッセージが出ました）
![スクリーンショット 2020-05-11 16.40.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/8339f55a-0fe5-becf-d221-3b7f5156f7c5.png)
（一回ミスったけど）表示されたのでヨシ！あと元ネタも判明したのでヨシ！
ここで入力した**string**を**文字列型**といいます。

✅**型と変数と値を使ってみる**
目標は達成しましたが何がなんやらなので次項、解説です。

## 色々な型と表示方法を知る
↑で習った型が**基本の三型**となります。これからもたくさん使ってくよ。

・**int（整数型）**
・**double（小数型）**
・**string（文字列型）**
これらは青い文字で表示されています。

intやdoubleの後にスペースを挟んで書いたscoreやbpmのことを**変数**といいます。
そして＝の後の数字や文字列が**値**です。値はなんかオレンジっぽいような茶色っぽいような中途半端なやつです。

int score = 1000000;
は
**型　変数＝値**

ということなんですね〜(セミコロンは行を終わらせる時に必須なんで忘れずに付けてね）

ここで講師からの**大事な**アドバイスなんですが
int aとか絶　対　に　書　か　な　い　で　く　だ　さ　い
変数はただの文字なのでなんでもいいのですが
マジで人のこと考えてプログラミングしましょう。何の値を入れてるのかわかりにくくなるのに本職でさえこれやる人がいるらしいですよ？

ここで力尽きてきたので以下は早歩きで解説します（？）

・{0}{1}は文字列の順番です　値をいくつか表示したい時に使いますね
・プログラミングでは数字を０から数えます（０が一番目）
・小数点を隠したい時は{0：F0}と書きます
・スコアを指定した桁数で表示したい時は{0:D7}と書きます

以上のことを何やかんやしたプログラムがこれです

```csharp
        int maxScore = 1000000;
        int score = 100;
        double bpm = 333.33;
        string songName = "The Legend of MAX";
        int highScore = 950000;

        Console.WriteLine("songName: {0}", songName);
        Console.WriteLine("score: {0:D7} / {1}", score, maxScore);
        Console.WriteLine("BPM: {0:F0}", bpm);
        Console.ReadKey();
    }
}
```


✅**コンソールの表示方法を知る**
これで今日やった内容は全てヨシ！


そして最後には次回への課題が出ました。それは…
#  課題:音ゲーのゲーム画面に必要な値を表現してみる。
今からやります

以上で第一回は終了です〜
プログラム知ってる人がたくさんいて初心者の僕には人権がなかった😦
次回は明日、5月12日昼11時
今回のアーカイブや講義の様子はDiscordで確認できますのでぜひお越しください〜
Discord:https://discord.gg/8arnHu6
Twitter:[＠stereonoah](https://twitter.com/stereonoah)