前提・実現したいこと
C#とUnityで現在クイズゲームを作っています。クイズの問題を、一度解いたものが出ないように、ランダムで出したいと思っています。
発生している問題・エラーメッセージ
配列を乱数にするところまでは出来たのですが、重複なしで行うことが出来ませんでした。よろしくお願いします。
該当のソースコード
public void QuestionLabelSet() { //Unityに問題を渡す変数 Text qLabel = GameObject.Find("").GetComponentInChildren<>(); List<string> Q = new List<string>() {"問題1","問題2"}
リストの並べ替えを使って、
Q = Q.OrderBy(a => Guid.NewGuid()).ToList(); for (int i = 0; i < Q.Count; i++) { qLabel.text = Q[i]; }
これでも重複してしまったので、Randomを使ってみました。
var random = new System.Random(); for (int i = 0; i < Q.Count; i++) { var up = Q[random.Next(0, Q.Count)]; qLabel.text = up;
しかし、これも重複してしまいました。
試したこと
var random = new System.Random(); for (int i = 0; i < Q.Count; i++) { var up = Q[random.Next(0, Q.Count)]; //↓ここに入れてみましたが、エラー(stringからintに変換できない)が起きました Q.RemoveAt(up); qLabel.text = up;
「追記」
public class QuizMgr : MonoBehaviour { void Start() { QuestionLabelSet(); } public void QuestionLabelSet() { //問題をUnityに渡す Text qLabel = GameObject.Find("A").GetComponentInChildren<B>(); //問題を置く List<string> Q = new List<string>() {"問題1","問題2"}; //ランダムに問題を出す for (int i = 0; i < Q.Count; i++) { var num = UnityEngine.Random.Range(0, Q.Count); var up = Q[num]; qLabel.text = up; Q.RemoveAt(num); } }
ランダムに問題は出たのですが、重複してしまいます。すみません、確認お願いします。
質問確認中ですが、コードを貼り付けるときは<code>のアイコンをクリックして表示される```と```の間に入れると読みやすくなりますよ。
回答2件
あなたの回答
tips
プレビュー