カードゲームをunityとc#で作りたい:カードシャッフルスクリプト編(4)

Githubソースコード公開&まとめ

今回はカードをシャッフルするプログラムを下記のチュートリアルを参考にしながら書きます。完成品はYOUTUBEテキスト欄からアセットにてダウンロードできます。それでは以下のチュートリアル動画の補足解説です。

シャッフルの仕方ですが、動画では1番から順に6番までのカードをシャッフルしています。これは概念を説明しているもので、実際のスクリプトでは51番から開始しして、段々小さい数にしていきます。

シャッフルの前にまず、シャッフルする前のリスト0~51を作成します。0,1,2,3,4,,,,50,51と順に並んでいる連番です。

これによってリスト0~51が作成されたのがインスペクター上で分かります。本来であればリストは表示されませんが、デバッグモード(鍵マークの横のプルダウンメニューから選択)にすると、0~51番の番号が生成されているのを確認できます。

次に52番目のカード(index51)をランダムに生成したk番目のカードと入れ替えます。直接代入をするとどちらかの値を失ってしまうので、途中にtempという値を入れることで、入れ替えを可能にしています。nがディクリメントされているので、その次にwhile文が回ると51番目のカード(index50)をランダムに生成したk番目のカードと入れ替えるという風に段々数値を小さくしながらランダムな順番のカードと順次入れ替えを行っていきます。

上記のコードをshuffleメソッド本体に追加し、実行すると、最終的には完全にシャッフルされた数列が出来たことが、インスペクター上で確認できます。たったこれだけのコードでシャッフルが可能になるのですね。考えた人はとても頭が良いと感心します。

おすすめの記事