4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

クイズをランダムに出題する方法

Last updated at Posted at 2019-06-12

#はじめに
 こちらの記事はCSVファイルによるクイズのデータの読み込みが前提となります。CSVファイルに関しましては以下の記事をご参照ください。
 https://hakonebox.hatenablog.com/entry/2018/05/17/010407

#概要
 ListRandom.Rangeを用いることでCSVファイルにあるクイズのデータをランダムに抽出、並び替えて表示します。これによりクイズゲームにおいてクイズを毎回ランダムに出題することができます。

#前提
以下のようなcsvファイルをcsvDatasとして読み込んでいます。今回はここからランダムに出題していきます!

タイトル,問題,選択肢1(答え),選択肢2,選択肢3
1,世界遺産が最も多い国は?,イタリア,フランス,中国
2,「テンパる」 はどのゲームの用語から生まれた言葉?,麻雀,囲碁,ポーカー
・・・・・・・
30,次のうちJR山手線にない駅は?,汐留,田端,目白

#スクリプト
まず、以下のように関数を定義します。

List<int> GetRandomList(){
		List<int> randomList = new List<int>();
		while(randomList.Count < 5){
			int y = Random.Range(1,31);
			if(!randomList.Contains(y)){
				randomList.Add(y);
			}
		}
		return randomList;	
	}

これにより、1~30の数字からランダムに5つ取り出して新たにListを作成することができるので、これを実際にListに紐づけます。

public List<int> randomQuiz;
randomQuiz = GetRandomList();

そして、この新たなListを以下のように利用してquizTextにクイズを表示させます。

quizText.text = csvDatas[randomQuiz[0]][1];

#ちょっと細かい解説
以下の部分の詳しい解説をします。興味のある方だけお読みください。

while(randomList.Count < 5){
  int y = Random.Range(1,31);
  if(!randomList.Contains(y)){
    randomList.Add(y);
  }
}

1行目はrandomListの要素数が5個になるまで以下の処理を続けるという意味です。
2行目はRandom.Rangeを利用して、1~30のうちランダムに1つの数をyに代入するという意味です。
3,4行目はもしrandomListの要素に上で代入したyが含まれていなければ新たにyをrandomListに追加するという意味です。3行目の条件があることで数字の被りを防止しています。

#終わりに
今回紹介したランダムな数字のListを作成する方法はクイズだけでなく様々な場面で活用することができると思います。ぜひ応用してみてください!

4
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?