見出し画像

初めてのUnityとC# 2【須貝と作れるようになるLIVE】

間違いなく基礎から勉強しなおした方がいい気がしている…


どうも、湯倉です。
QuizKnockの須貝さんがしてくださっている作れるようになるLIVE#4にて、自分のしたいように作ろうとしたところ、完全に詰まってしまいました。

参考にした配信はこちら↓

あくまでnoteは自分自身の進捗備忘録として活用するつもりなのですが、
お詳しい方やQK学ぼうメイトの方でお教えいただければ幸いです…。


やりたいこと


  1. 問題をランダムではなく、順番に出したい

  2. 解答は正誤判定だけでなく、軽い解説も載せたい

  3. 問題数をあらかじめ決めておき、終了時に合計正解数を表示したい


以上の3つができるのが理想です。
一応問題をランダムに出すところまで一度作成し、そこから改変していこうと考えたため、
現在は連続正解数カウンターを作る前までやった状態です。

2,3はとりあえず置いておいて、1の実装に向けて頑張りたいと思います。


1.問題を順番に出したい

順番に出すほうが、乱数を使うよりも簡単な気がするのに…。

とりあえずquestion1~5まで作り終えた状態です。

forやswitchを使えば何とかなるかな、と思ってとりあえず書いてみたもの。(void Start部分のみ)
本当に基礎知識が欠けているので、根本から間違っていて「なにやってんだこいつ」状態ですが悪しからず…。自分でも間違っていることは理解していますので。

    void Start()
    {
        //順番に問題を出したい
	for (int r = 1; r < 6; r++)
	{
               switch (r)
                {
                case 1: //rが「1」の時に実行する
                    question1();
                    Debug.Log("case1が実行されました"); //コンソール画面に「case1が実行されました」と出力する
                    break; //switch文を抜ける
                case 2: //rが「2」の時に実行する
                    question2();
                    Debug.Log("case2が実行されました"); //コンソール画面に「case2が実行されました」と出力する
                    break;//switch文を抜ける
                case 3: //rが「3」
                    question3();
                    Debug.Log("case3が実行されました"); //コンソール画面に「case3が実行されました」と出力する
                    break;//switch文を抜ける
                case 4: //rが「4」
                    question4();
                    Debug.Log("case4が実行されました"); //コンソール画面に「case4が実行されました」と出力する
                    break;//switch文を抜ける
                case 5: //rが「5」
                    question5();
                    Debug.Log("case5が実行されました"); //コンソール画面に「case5が実行されました」と出力する
                    break;//switch文を抜ける
                }       
	  }
    }        

breakでswitch抜けるんだっけ…とか考えながら書いた結果です。

当然これで実行すると最初からquestion5が表示されます。
コンソールではcase1~5が順番に実行されているのが確認できます。

多分forの使い方が間違っているのではないかと。
理想は、


question1()

問題1の正誤判定

question2()

問題2の正誤判定

……


ですから…。
arrayとかListとか使うんですかね???うーん…

あと1つ疑問なのが、question○()の○=整数の部分を変数で管理できないかということ。
そうしたら、須貝さんの言うようにもっとスマートにできるんだと思います。多分。

チャット欄で教えてくれていた人いたのでしょうか…。
作るのに必死でチャット欄を覗けていなかったため、覗きながらもう一度考え直そうと思います。
(5時間分のチャットをちゃんと見直すのってどれくらいかかるんだろう…)


まだまだ基礎知識もググる力も足りないので、頑張っていこうと思います。

ggrksと言われるのは覚悟の上ですが、教えてくれる方いらっしゃったら助かります…。


現時点の備忘録

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;


public class testQuestion_Kirikae : MonoBehaviour
{
    public Text title;
    public Text question;
    public Text button1;
    public Text button2;
    public RectTransform buttonLeft;
    public RectTransform buttonRight;
    
    
    // Start is called before the first frame update
    void Start()
    {
        //順番に問題を出したい
		for (int r = 1; r < 6; r++)
		{
            switch (r)
            {
                case 1: //numが「1」の時に実行する
                    question1();
                    Debug.Log("case1が実行されました"); //コンソール画面に「case1が実行されました」と出力する
                    break; //switch文を抜ける
                case 2: //numが「2」の時に実行する
                    question2();
                    Debug.Log("case2が実行されました"); //コンソール画面に「case2が実行されました」と出力する
                    break;//switch文を抜ける
                case 3: //numが「1」と「2」以外の時に実行する
                    question3();
                    Debug.Log("case3が実行されました"); //コンソール画面に「defaultが実行されました」と出力する
                    break;//switch文を抜ける
                case 4: //numが「4」
                    question4();
                    Debug.Log("case4が実行されました"); //コンソール画面に「defaultが実行されました」と出力する
                    break;//switch文を抜ける
                case 5: //numが「5」
                    question5();
                    Debug.Log("case5が実行されました"); //コンソール画面に「defaultが実行されました」と出力する
                    break;//switch文を抜ける
            }       
		}        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    public void question1()
        {
            //タイトルの番号を書き換えろ
            title.text = ("問題1");
            //問題文を書き換えろ
            question.text = ("文章や画像などをコピーするのは"+"\n"+"Ctrl+?");
            //ボタン1を選択肢-1に書き換えろ
            button1.text = ("C");
            //ボタン2を選択肢-2に書き換えろ
            button2.text = ("K");
        }
    public void question2()
        {
            //タイトルの番号を書き換えろ
            title.text = ("問題2");
            //問題文を書き換えろ
            question.text = ("文章や画像などを貼り付けするのは"+"\n"+"Ctrl+?");
            //ボタン1を選択肢-1に書き換えろ
            button1.text = ("V");
            //ボタン2を選択肢-2に書き換えろ
            button2.text = ("X");
        }
    public void question3()
        {
            //タイトルの番号を書き換えろ
            title.text = ("問題3");
            //問題文を書き換えろ
            question.text = ("ひとつ前の状態に戻すには"+"\n"+"Ctrl+?");
            //ボタン1を選択肢-1に書き換えろ
            button1.text = ("Z");
            //ボタン2を選択肢-2に書き換えろ
            button2.text = ("B");
        }
    public void question4()
        {
            //タイトルの番号を書き換えろ
            title.text = ("問題4");
            //問題文を書き換えろ
            question.text = ("やり直し・繰り返しするには"+"\n"+"Ctrl+?");
            //ボタン1を選択肢-1に書き換えろ
            button1.text = ("Y");
            //ボタン2を選択肢-2に書き換えろ
            button2.text = ("R");
        }
    public void question5()
        {
            //タイトルの番号を書き換えろ
            title.text = ("問題5");
            //問題文を書き換えろ
            question.text = ("文章や画像などを切り取るのは"+"\n"+"Ctrl+?");
            //ボタン1を選択肢-1に書き換えろ
            button1.text = ("X");
            //ボタン2を選択肢-2に書き換えろ
            button2.text = ("D");
        }
    public void shuffle()
    {
        int s =Random.Range(1,3);
        if(s == 1)
        {            
            //ボタン1がX座標-150、ボタン2が150
            buttonRight.anchoredPosition = new Vector2(-150,-120);
            buttonLeft.anchoredPosition = new Vector2(150,-120);
        }
        else
        {
            //ボタン1がX座標150、ボタン2が-150
            buttonRight.anchoredPosition = new Vector2(150,-120);
            buttonLeft.anchoredPosition = new Vector2(-150,-120);
        }
    }
}

この記事が気に入ったらサポートをしてみませんか?