【C#】クラスのサンプル(山札)

カードクラスを複数持っている(属性として含んでいる)状態をクラスとして抽出します

クラス

using System.Collections.Generic;

public class Deck
{
    public List<Card> Cards { get; set; }

    public Deck()
    {
        Cards = new List<Card>();
        foreach (Suit suit in Enum.GetValues(typeof(Suit)))
        {
            foreach (Rank rank in Enum.GetValues(typeof(Rank)))
            {
                Cards.Add(new Card(suit, rank));
            }
        }
    }

    public void Shuffle()
    {
        // Using Fisher-Yates shuffle algorithm
        for (int i = 0; i < Cards.Count; i++)
        {
            int randomIndex = UnityEngine.Random.Range(i, Cards.Count);
            Card temp = Cards[i];
            Cards[i] = Cards[randomIndex];
            Cards[randomIndex] = temp;
        }
    }
}

Deckクラスは、CardCardsと呼ばれるオブジェクトのリストを属性として持っています。コンストラクタは、カードの新しい空のリストを作成し、すべての可能な値をループします。SuitそしてRank新しいものを作成するための列挙型Card組み合わせごとにオブジェクトを付け、リストに追加します。

shuffleというメソッドも作っています。Shuffleフィッシャー・イェーツのシャッフルアルゴリズムと呼ばれる一般的なシャッフルアルゴリズムを使用してデッキをシャッフルします。このアルゴリズムは、リスト内のすべてのカードをループし、各カードについて、現在のインデックスとリストの末尾の間にランダムなインデックスを選択し、ランダムに選択されたインデックスで現在のカードをカードと交換します。

全体の流れ

C#

Posted by hidepon