1. stereonoah

    Posted

    stereonoah
Changes in title
+音ゲーマーのためのゼロから始めるC#講座:第二回まとめ
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,325 @@
+腕毛の人です。[前回](https://qiita.com/stereonoah/items/49ebe8493309c19f56a5)の課題をやってたら就寝4時でした…
+
+今回も駆け足で復習していきましょう!
+
+さて、まずは前回の課題からです。
+**課題:音ゲーのゲーム画面に必要な値を表現してみる**
+
+```csharp
+ static void Main(string[] args)
+```
+
+より下の行から、こんなプロブラムを書いてみました。
+
+```csharp
+ {
+ string songName = "REJECTION";
+ string artist = "GAT";
+ string gene = "OTOGE CORE";
+ int bpm = 370;
+ int level = 19;
+ double hiSpeed = 3.5;
+ string optionH = "hidden";
+ string optionS = "sudden";
+ string playerName = "UDG";
+ string rank = "S";
+ int score = 999990;
+ double gauge = 99;
+ int clearLine = 70;
+ string percent = "%";
+
+
+ Console.WriteLine("1st STAGE");
+ Console.WriteLine("TUNE: {0}", songName);
+ Console.WriteLine("ARTIST: {0}", artist);
+ Console.WriteLine("GENE:{0}", gene);
+ Console.WriteLine("BPM: {0}", bpm);
+ Console.WriteLine("LEVEL: {0}", level);
+ Console.WriteLine("Hi-speed: {0}", hiSpeed);
+ Console.WriteLine("OPTION: {0} / {1}", optionH, optionS);
+ Console.WriteLine("RESULT");
+ Console.WriteLine("Player: {0}", playerName);
+ Console.WriteLine("RANK: {0}", rank);
+ Console.WriteLine("Score: {0}", score);
+ Console.WriteLine("GAUGE: {0:D3} {1} / {2:D3} {1} ", gauge, percent, clearLine);
+ }
+ }
+}
+```
+
+※前回、
+
+```csharp
+ Console.ReadKey();
+```
+を入力しないといけないと書きましたが、Macでは必要ないことが判明。便利…
+コーンソールに表示されたのはこちら!
+![スクリーンショット 2020-05-13 17.35.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/64ec02f8-5c86-c59e-9fb8-b60e0914d45f.png)
+何気に8.5.5(build 7)にバージョン更新してますねえ
+
+DDRのボス曲をパロってみました。考え方としては*ヨシ!*
+
+
+
+
+
+
+# 本日のテーマ:変数をいじくりまわす
+
+今回の目標はこちらです
+
+- 目標
+ - 変数をいじってみる
+ - コメントの書き方を知る
+ - bool型とfloat型を知る
+
+お?新しい型がどんどん出てきますね。なんかプログラマーっぽい🧐
+でも使うのは次回以降でした。
+
+## 値を変えてみる
+新しいプロジェクトファイルを作成し、名前を**MySecondProject**と命名。
+講師曰く、実験用のプロジェクトにはMy~と名付けるそうです。
+Testと書いて痛い目にあったとかなんとか…
+
+スコアの計算を実行していきます。
+まず以下の内容を書きましょう。
+
+```csharp
+
+ int score = 0;
+ int maxScore = 1000000;
+ Console.WriteLine("score {0}", score);
+ Console.WriteLine("Maxscore {0}", maxScore);
+```
+
+スコアがゼロの状態です。ここに+ 200してみましょう
+
+```csharp
+ score = score + 200;
+ Console.WriteLine("score {0}", score);
+ Console.WriteLine("Maxscore {0}", maxScore);
+```
+全て新しく書く行です。
+score = + 200;と書くことで実際に200点足されて表示されるんですね。
+![スクリーンショット 2020-05-12 11.17.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/ee3a0f65-ac2f-20a4-ecef-c0fb5233569c.png)
+無事に実行されました!
+
+更に+200していきますが、今度はこう書いてみましょう。
+
+```csharp
+ score += 200;
+ Console.WriteLine("score {0}", score);
+ Console.WriteLine("Maxscore {0}", maxScore);
+```
+score = score + 200;
+
+score += 200;
+と短くなりました。=の前に+を置くだけで同じく足し算を実行してくれるそうです。
+![スクリーンショット 2020-05-12 11.19.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/d7fdac2f-30d2-cd4a-9b91-7a2e8819546e.png)
+scoreが400になりましたね!
+
+さて、ここまでスコアの加算を200と書いてきましたが
+そもそも曲によって値が違ってきますよね?(100だったり1000だったり)
+ということで次は変数を使って計算してみます。
+
+例えばスコアに加算されるのが990なら
+
+```csharp
+ int perfectscore = 990;
+```
+これを書いてください。
+perfectという単語もやや語弊を生みそうですね。
+他にもjustScoreやcoolScore等、他の変数と間違えないような名前を付けてください。
+
+では、先ほどやったスコアの加算を変数で実行してみましょう。
+
+```csharp
+ score += perfectScore;
+ Console.WriteLine("score {0}", score);
+ Console.WriteLine("Maxscore {0}", maxScore);
+```
+![スクリーンショット 2020-05-12 11.21.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/1c085a77-3f1b-58a6-3ead-33773cacf700.png)
+無事に足し算してくれましたね!
+
+ではでは、今度は総ノーツ数を決めてその1ノーツごとの得点を計算してみましょう。
+ノーツ数を**573**とし、満点をノーツ数で割ります。
+
+```csharp
+ int notesNum = 573;
+```
+を追加し、更に
+
+```csharp
+ int perfectScore = maxScore / notesNum;
+```
+これはperfectScoreの行を書き直してください。
+÷ は / で表します。maxScore ÷ notesNumという意味になります。
+
+そんで、score += perfectScore; 〜を実行するだけです。
+![スクリーンショット 2020-05-12 11.24.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/e87f83c7-7ece-6834-d31f-e49689b1c478.png)
+無事に計算してくれまし…た?
+
+実はこのままでは**少数の計算**をしてくれないのです。
+int型とint型の計算では、答えも整数になってしまいます。そこで…
+そうです、**double**を使いましょう。
+
+```csharp
+ double score = 0;
+
+ double perfectScore = (double)maxScore / notesNum;
+```
+2つの行を書き換えましょう。この時、割り算の前にも(double)と書く必要があります。
+maxScoreもnotesNumもint型なので、このままでは整数しか出してくれません。
+そこで(double)をmaxScoreの前につけることで
+*一時的に* double型で計算するらしい…
+これを**キャスト**と言います。
+これで少数の計算までバッチリやってくれますね。
+
+そして11回計算してみた結果がこちらです。(見返したらなんか中途半端だった)
+![スクリーンショット 2020-05-12 11.32.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/d54b6c03-db2e-e275-3383-9a96e9ede328.png)
+ちなみにコンソール上で小数点を隠すには**{0:F0}**という風に書くそうです!
+右の0は小数点の桁数に対応してて、小数点第n位を表すことができます。
+これから先、多用しますねこれは。
+
+さて、ここまで数字の値を合わせてきましたが
+実は**文字列も合わせることができます**。
+次からは *3rd STAGE* という表示ができるように頑張ります。
+
+ステージの表示、イメージとしては
+"{0}rd STAGE", stage
+みたいな感じでステージ数をint型で表したいのですが
+これはできないらしいです。なんでかは割愛された…
+
+そこで、こういうものを書きます。
+
+```csharp
+ string stageName = stage.ToString() + "rd Stage";
+```
+
+実はstring型でも足し算が可能で、例えば
+"3" + "rd STAGE"
+というような感じです。でもステージ数は*int stage = n* で表したい…
+そこで
+**変数.Tostring()**
+という風に書きます。これでint型がstring型に変換されて計算が可能に。
+
+なんやかんやあって、書いたのがこちらです!
+
+```csharp
+ {
+ double score = 0;
+ int maxScore = 1000000;
+ int notesNum = 573;
+ double perfectScore = (double)maxScore / notesNum;
+ string songName = "SABER KING";
+ string artistName = "Taguchi";
+
+ int stage = 3;
+ string stageName = stage.ToString() + "rd Stage";
+
+
+ Console.WriteLine("{0}", stageName);
+
+ Console.WriteLine("{0} / {1}", songName, artistName);
+ Console.WriteLine("score {0}", score);
+ Console.WriteLine("Maxscore {0}", maxScore);
+
+ score = score + perfectScore;
+ Console.WriteLine("score {0} / {1}", score, maxScore);
+
+ score += perfectScore;
+ Console.WriteLine("score {0} / {1}", score, maxScore);
+ }
+ }
+ }
+```
+そして実行
+![スクリーンショット 2020-05-12 11.48.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635578/20f40ef9-3014-819b-a69c-a0108a8daaf6.png)
+(何気にスコアと理論値を1行にまとめてます)
+*3rd STAGE* がちゃんと表示されました!
+
+✅変数をいじってみる
+なんか色々できた!ヨシ!
+
+## 表示と処理を分ける
+プログラム上ではコメントが書けるということを(ざっくり)教わりました。
+こんな感じ
+
+```csharp
+ //改行までがコメント扱いされます
+ /*この間がコメント
+   *←必要ないけどわかりやすいように書いてることが多い
+ *この行で終わり*/
+ ///VisualStudio限定、でも使わないでください
+```
+使わないでと言われたら使いたくなる(
+
+実務のコメントでは例えば
+//表示部
+
+//処理部
+
+//宣言部
+のようにプログラムの内容をわかりやすくしているそうです。
+パッと見どこに何書いてるなんてわからないですもんねえ。
+
+✅コメントの書き方を知る
+いずれあることないこと書くと思うのでヨシ!
+
+## 色々な値の替え方
+講座の最後には**bool型**と**float型**について学びました。
+
+- bool型
+
+簡単にいうとYesかNoかを表してくれる型ですね。
+= の後に *true/false* のどちらかを入れます。
+例えばステージクリアやオプション等の表示が変わる際に使います。
+
+```csharp
+ bool isCleard = false;
+ bool hidden = true;
+ bool sudden = true;
+```
+…表示の仕方は次回!
+
+- float型
+
+*ほぼdoubleと一緒* ?らしい。
+Unityではこれもよく使うんですね。
+書き方も少し違って
+
+```csharp
+ float hiSpeed = 1.5f
+```
+最後にfをつけるんですね。
+**floatの方が軽く、doubleの方が精度が良い**です。と、教わりました。
+
+後々めんどそう…
+
+✅bool型とfloat型を知る
+新しいこと覚えるの楽しいのでヨシ! ✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
+
+# 課題
+ポップンを想定し、10万点満点でノーツ数3の曲を全てCOOLで取ったとして
+
+
+- 0コンボ, 1コンボ, 2コンボ, 3コンボの時のscore
+- またそのrate(~%)
+
+を表示してみよう
+
+レートの計算をするにはまず
+
+ int rate = 0;
+ double rate = (double)score / (double)maxScore;
+この2行を書いて
+
+ rate = (double)score / (double)maxScore; * 100;
+この計算をconsole.WriteLineの上に書いていきましょう!
+
+ちなみに右の * 100 は x100 のことで掛け算を表しています。これが分からなくてうんうん唸ってました😩
+
+講座の開催場所はこちら👇
+Discord:https://discord.gg/8arnHu6
+Twitter:[@stereonoah](https://twitter.com/stereonoah)
+