カードゲームを作ってる際に
デッキのリストを用意したは良いけど、
シャッフル出来なくてつまらん!!!
ってことあるよね。
僕自身シャッフルの仕方がわからなくて困ってたけど、
案外簡単な方法で出来たので、
今回はデッキ(List)の順番をランダムにする方法を解説するよ!!
では行くぞ!!
【初心者向け】
「カードゲームを作ってみたいけど、作り方が全く分からない!!!」
という人向けに0からカードゲームの作り方を書いてるので
めっちゃ初心者だけど作ってみたい!!というひとは見てみて↓
リスト(List)をシャッフル(ランダムに)する方法は??
デッキのリストをシャッフルするには、
この処理をぶち込めばいいだけ!
※deckはListね。
List<int> deck = new List<int>() {1,2,… } みたいなやつ
ランダムにしたいListの名前を書き換えて使ってね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void Shuffle() // デッキをシャッフルする { // 整数 n の初期値はデッキの枚数 int n = deck.Count; // nが1より小さくなるまで繰り返す while (n > 1) { n--; // kは 0 ~ n+1 の間のランダムな値 int k = UnityEngine.Random.Range(0, n + 1); // k番目のカードをtempに代入 int temp = deck[k]; deck[k] = deck[n]; deck[n] = temp; } } |
これを呼び出せばシャッフル完了!
これが↓
こんな感じになる!↓
超簡単ですな。
次は中身の解説をするよ!!
コードの中身の解説
ざっくり処理の流れとしては
こんな感じのことをしているよ↓
1.デッキ(リスト)の枚数を取得
2.ランダムな順番のカードと最後のカードを入れ替える
3.最後のカードは固定させて、その一つ手前のカードを最後のカードとする
4.デッキが全部固定されるまで繰り返す
これを踏まえてコードを見直してみよう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void Shuffle() // デッキをシャッフルする { // 整数 n の初期値はデッキの枚数 int n = deck.Count; // nが1より小さくなるまで繰り返す while (n > 1) { n--; // kは 0 ~ n+1 の間のランダムな値 int k = UnityEngine.Random.Range(0, n + 1); // k番目のカードをtempに代入 int temp = deck[k]; deck[k] = deck[n]; deck[n] = temp; } } |
、、、これ考えた人すごくない??
カードゲームならシャッフル処理はほぼ必須なので、
覚えておいて損はないよ!!
【まとめ】デッキ(リスト)をシャッフルする方法
最後にリストをシャッフルする方法について改めてまとめておきます!
1.下記のメソッドを記載する。
2.Shuffleメソッドを呼び出す。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void Shuffle() // デッキをシャッフルする { // 整数 n の初期値はデッキの枚数 int n = deck.Count; // nが1より小さくなるまで繰り返す while (n > 1) { n--; // kは 0 ~ n+1 の間のランダムな値 int k = UnityEngine.Random.Range(0, n + 1); // k番目のカードをtempに代入 int temp = deck[k]; deck[k] = deck[n]; deck[n] = temp; } } |
あくまでメソッドは記載するだけじゃなくて、
呼び出さないとシャッフルしてくれないからね!
ではではこれを使って色んなリストを混ぜてみて下さいな!!
終わりっ!!!
【初心者向け】
「カードゲームを作ってみたいけど作り方が全く分からない!!!」
という人向けに0からカードゲームの作り方を書いてるので、
めっちゃ初心者だけど作ってみたい!!というひとは見てみて↓
他の関連記事↓
お恥ずかしながら、メソッドを呼び出す方法が分からないので教えてほしいです。。。
>りんごさん
んー、別のクラスのメソッドを呼び出す方法ってことですかね??
やり方は色々あるとは思いますが、文字だけで説明しようとすると難しいですね。。
需要があれば(あと自分の理解の為に。笑)別記事でまとめようかと思います!
「別クラス メソッドを呼び出す」とかでいい感じに説明してくれてるサイトがあるはず、、、!(丸投げで申し訳ない)