C# 用c语言创建一副牌#

C# 用c语言创建一副牌#,c#,C#,因此,我试图为我的一个编程类创建一副卡片。我从来没有真正做过这样的事,如果我犯了愚蠢的错误,我很抱歉。我正在VisualStudio中编写此代码(按类规则)。我正在尝试为我的牌组创建一个卡对象数组。我遇到的问题是,当我尝试打印数组时,我只得到52行Card_Games.Card(名称空间是Card_Games)。在我的卡片类中,我没有正确地将卡片的值和套色分配给该卡片对象,这有什么错 public partial class Form1 : Form { public Form1()

因此,我试图为我的一个编程类创建一副卡片。我从来没有真正做过这样的事,如果我犯了愚蠢的错误,我很抱歉。我正在VisualStudio中编写此代码(按类规则)。我正在尝试为我的牌组创建一个卡对象数组。我遇到的问题是,当我尝试打印数组时,我只得到52行Card_Games.Card(名称空间是Card_Games)。在我的卡片类中,我没有正确地将卡片的值和套色分配给该卡片对象,这有什么错

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Deck.FillDeck();
        Deck.PrintDeck();
    }
}

class Card
{
    public int Value;
    public static string[] SuitsArray = new string[] {"Hearts", "Diamonds", "Clubs", "Spades"};
    public string Suit;

    public Card(int value, string suit)
    {
        Value = value;
        Suit = suit;
    }

    public Card(string input)
    {
        string tempValue = "";
        string suitSentence = "";
        switch (Value)
        {
            case 11:
                tempValue = "Jack";
                break;
            case 12:
                tempValue = "Queen";
                break;
            case 13:
                tempValue = "King";
                break;
            case 14:
                tempValue = "Ace";
                break;
            default:
                tempValue = Value.ToString();
                break;
        }
        switch (Suit)
        {
            case "Hearts":
                suitSentence = " of Hearts";
                break;
            case "Diamonds":
                suitSentence = " of Diamonds";
                break;
            case "Clubs":
                suitSentence = " of Clubs";
                break;
            case "Spades":
                suitSentence = " of Spades";
                break;
        }
        input = tempValue + suitSentence;
    }
}

class Deck
{
    public static Object[] deck = new Object[52];


    public static void FillDeck()
    {
        int index = 0;
        foreach (string suit in Card.SuitsArray)
        {
            for (int value = 2; value <= 14; value++)
            {
                Card card = new Card(value, suit);
                deck[index] = card;
                index++;
            }
        }
    }

    public static void PrintDeck()
    {
        for (int i=0; i<52; i++)
        {
            System.Diagnostics.Debug.WriteLine(deck[i]);
        }
    }
}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
甲板;
Deck.PrintDeck();
}
}
班级卡
{
公共价值观;
公共静态字符串[]SuitsArray=新字符串[]{“红心”、“钻石”、“梅花”、“黑桃”};
公益诉讼;
公共卡(整数,字符串)
{
价值=价值;
西装=西装;
}
公共卡(字符串输入)
{
字符串tempValue=“”;
字符串为“”;
开关(值)
{
案例11:
tempValue=“杰克”;
打破
案例12:
tempValue=“皇后”;
打破
案例13:
tempValue=“国王”;
打破
案例14:
tempValue=“Ace”;
打破
违约:
tempValue=Value.ToString();
打破
}
开关(套装)
{
案例“红心”:
一句话:“心的力量”;
打破
“钻石”案:
“钻石”;
打破
案例“俱乐部”:
俱乐部名称;
打破
“黑桃”一案:
“黑桃的”;
打破
}
输入=tempValue+suit句子;
}
}
甲板
{
公共静态对象[]组=新对象[52];
公共静态空隙填充甲板()
{
int指数=0;
foreach(卡片中的字符串套装。套装套装)
{

对于(int value=2;value将
object[]
更改为
Card[]
。然后在您的打印方法中,您可以打印
deck[i]。value
deck[i]。Suit
。这是一个控制台应用程序:

class Program
{
    static void Main(string[] args)
    {
        Deck.FillDeck();
        Deck.PrintDeck();
        Console.ReadLine(); 
    }
}

class Card
{
    public int Value;
    public static string[] SuitsArray = new string[] { "Hearts", "Diamonds", "Clubs", "Spades" };
    public string Suit;

    public Card(int value, string suit)
    {
        Value = value;
        Suit = suit;
    }

    public Card(string input)
    {
        string tempValue = "";
        string suitSentence = "";
        switch (Value)
        {
            case 11:
                tempValue = "Jack";
                break;
            case 12:
                tempValue = "Queen";
                break;
            case 13:
                tempValue = "King";
                break;
            case 14:
                tempValue = "Ace";
                break;
            default:
                tempValue = Value.ToString();
                break;
        }
        switch (Suit)
        {
            case "Hearts":
                suitSentence = " of Hearts";
                break;
            case "Diamonds":
                suitSentence = " of Diamonds";
                break;
            case "Clubs":
                suitSentence = " of Clubs";
                break;
            case "Spades":
                suitSentence = " of Spades";
                break;
        }
        input = tempValue + suitSentence;
    }
}

class Deck
{
    public static Card[] deck = new Card[52];


    public static void FillDeck()
    {
        int index = 0;
        foreach (string suit in Card.SuitsArray)
        {
            for (int value = 2; value <= 14; value++)
            {
                Card card = new Card(value, suit);
                deck[index] = card;
                index++;
            }
        }
    }

    public static void PrintDeck()
    {
        for (int i = 0; i < 52; i++)
        {
            Console.WriteLine($"{deck[i].Value} {deck[i].Suit}");
        }
    }
}
类程序
{
静态void Main(字符串[]参数)
{
甲板;
Deck.PrintDeck();
Console.ReadLine();
}
}
班级卡
{
公共价值观;
公共静态字符串[]SuitsArray=新字符串[]{“红心”、“钻石”、“梅花”、“黑桃”};
公益诉讼;
公共卡(整数,字符串)
{
价值=价值;
西装=西装;
}
公共卡(字符串输入)
{
字符串tempValue=“”;
字符串为“”;
开关(值)
{
案例11:
tempValue=“杰克”;
打破
案例12:
tempValue=“皇后”;
打破
案例13:
tempValue=“国王”;
打破
案例14:
tempValue=“Ace”;
打破
违约:
tempValue=Value.ToString();
打破
}
开关(套装)
{
案例“红心”:
一句话:“心的力量”;
打破
“钻石”案:
“钻石”;
打破
案例“俱乐部”:
俱乐部名称;
打破
“黑桃”一案:
“黑桃的”;
打破
}
输入=tempValue+suit句子;
}
}
甲板
{
公共静态卡[]套=新卡[52];
公共静态空隙填充甲板()
{
int指数=0;
foreach(卡片中的字符串套装。套装套装)
{

对于(int value=2;value,这里有一个稍微优化的版本

我添加了getter来提取命名值和全名,例如“黑桃王牌”,并使用
Enum
作为套件

然后我使用了一个带模运算符(
%
)和
Math.Floor
的单循环来填充数据组。这就是枚举发挥作用的地方,因为使用枚举和int很简单

public class Card
{
    public enum Suites
    {
        Hearts = 0,
        Diamonds,
        Clubs,
        Spades
    }

    public int Value
    {
        get;
        set;
    }

    public Suites Suite
    {
        get;
        set;
    }

    //Used to get full name, also useful 
    //if you want to just get the named value
    public string NamedValue
    {
        get
        {
            string name = string.Empty;
            switch (Value)
            {
                case (14):
                    name = "Ace";
                    break;
                case (13):
                    name = "King";
                    break;
                case (12):
                    name = "Queen";
                    break;
                case (11):
                    name = "Jack";
                    break;
                default:
                    name = Value.ToString();
                    break;
            }

            return name;
        }
    }

    public string Name
    {
        get
        {
            return NamedValue + " of  " + Suite.ToString();
        }
    }

    public Card(int Value, Suites Suite)
    {
        this.Value = Value;
        this.Suite = Suite;
    }
}

public class Deck
{
    public List<Card> Cards = new List<Card>();
    public void FillDeck()
    {
        public void FillDeck()
        {
          //Can use a single loop utilising the mod operator % and Math.Floor
          //Using divition based on 13 cards in a suited
          for (int i = 0; i < 52; i++)
          {
             Card.Suites suite = (Card.Suites)(Math.Floor((decimal)i/13));
             //Add 2 to value as a cards start a 2
             int val = i%13 + 2;
             Cards.Add(new Card(val, suite));
          }
         }
    }

    public void PrintDeck()
    {
        foreach(Card card in this.Cards)
        {
            Console.WriteLine(card.Name);
        }
    }
}
公共类卡
{
公共枚举套房酒店
{
红心=0,
钻石,
俱乐部,
黑桃
}
公共整数值
{
得到;
设置
}
公共套房
{
得到;
设置
}
//用于获取全名,也很有用
//如果只想获取命名值
公共字符串名称值
{
得到
{
string name=string.Empty;
开关(值)
{
案件(14):
name=“Ace”;
打破
案件(13):
name=“King”;
打破
案件(12):
name=“Queen”;
打破
案件(11):
name=“杰克”;
打破
违约:
name=Value.ToString();
打破
}
返回名称;
}
}
公共字符串名
{
得到
{
返回“+Suite.ToString()的NamedValue+”;
}
}
公共卡(整数,套房)
{
这个。值=值;
this.Suite=Suite;
}
}
公务舱甲板
{
公共列表卡=新列表();
公共空填甲板()
{
公共空填甲板()
{
//可以使用mod运算符%和Math.Floor使用单个循环
//使用基于13张卡片的分割