C# I';I’我想用记分制来决定4名选手的胜负

C# I';I’我想用记分制来决定4名选手的胜负,c#,system,points,playing-cards,C#,System,Points,Playing Cards,我试图通过验证字符串值将点添加到计数中,但由于.equal和.contains仅适用于字符串,我不知道如何计数点。我应该为类型变量卡制作自己的相等方法吗?要求数字必须有黑桃/心形/钻石/梅花值 //card class... class Card { public string s; public string f; public Card (string sC, string fC) { s = sC; f = fC;

我试图通过验证字符串值将点添加到计数中,但由于.equal和.contains仅适用于字符串,我不知道如何计数点。我应该为类型变量卡制作自己的相等方法吗?要求数字必须有黑桃/心形/钻石/梅花值

//card class...
class Card
{
    public string s;
    public string f;

    public Card (string sC, string fC)
    {

        s = sC;
        f = fC;
    }

    public override string ToString()
    {
        return f + s;
    }
}

//Deck class....

string[] cards = {"2", "3", "4", "5", "6", "7",
                              "8", "9", "10", "J", "Q", "K",
                              "A"};
//spades, diamond , club, heart. not necessarily in the same order

string[] type = { "\x2660", "\x2666", "\x2665", "\x2663" };

deck = new Card[52];
random = new Random();
for (int i = 0; i < deck.Length; i++)
{
    deck[i] = new Card(cards[i % 13], type[i / 13]);
}

//output is spades of 2

Console.WriteLine(Deck[0]);

void Shuffle()
{
    for (int i = 0; i < deck.Length; top++)
    {
        int j = random.Next(52);
        Card temp = playDeck[i];
        playDeck[i] = playDeck[j];
        playDeck[j] = temp;
    }
}
Card passCards()
{
    if (currentCard < deck.Length)
    {
        return deck[currentCard++];
    }
    else
    {
        return null;
    }
}


// Method I'm trying to make

int count =0;

int countPoints()
{
    for(int i = currentCard; i < deck.Length; i++)
    {
        if (deck[currentCard].Equals("1"))
        {
            count = count + 1;
        }
    }
    return count
}

//main...
Console.WriteLine("playername" + ...13 cards.. + Total points : " + deck.countPoints());
//卡片类。。。
班级卡
{
公共字符串s;
公共字符串f;
公共卡(字符串sC、字符串fC)
{
s=sC;
f=fC;
}
公共重写字符串ToString()
{
返回f+s;
}
}
//甲板级。。。。
字符串[]卡片={“2”、“3”、“4”、“5”、“6”、“7”,
“8”、“9”、“10”、“J”、“Q”、“K”,
“A”};
//黑桃、钻石、棍棒、心脏。不一定是同一顺序
字符串[]类型={“\x2660”、“\x2666”、“\x2665”、“\x2663”};
卡片组=新卡片[52];
随机=新随机();
for(int i=0;i
一种方法是将卡的
名称
属性存储为
枚举
,其中每个名称的位置与卡的值相关(至少对于编号的卡)。例如:

// Start the Ace with value 1, the rest are automatically one greater than the previous
public enum CardName
{
    Ace = 1, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King
}
这使得计算特定名称的分数非常容易。如果值为
1
,则返回
11
(假设ACE为11),如果大于
9
,则返回
10
(假设人脸卡为10),否则返回值:

public int Value
{
    get
    {
        var value = (int) Name;
        return value == 1 ? 11 : value > 9 ? 10 : value;
    }
}
现在,如果我们有一个
列表手牌
,我们可以通过如下操作得到手牌总数:

int total = hand.Sum(card => card.Value);

为了完整起见,这里有一个
类、
类的小示例(这是一个围绕
列表
的花式包装),以及它们的一个示例用法,以展示如何获得玩家手牌的总和:

public enum Suit { Hearts, Clubs, Diamonds, Spades}

public enum CardName
{
    Ace = 1, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King
}

public class Card
{ 
    public Suit Suit { get; }
    public CardName Name { get; }

    public int Value => (int) Name == 1 ? 11 : (int) Name > 9 ? 10 : (int) Name;

    public Card(CardName name, Suit suit)
    {
        Name = name;
        Suit = suit;
    }

    public override string ToString()
    {
        return $"{Name} of {Suit}";
    }
}

public class Deck
{
    private readonly List<Card> cards = new List<Card>();
    private readonly Random random = new Random();

    public int Count => cards.Count;

    public static Deck GetStandardDeck(bool shuffled)
    {
        var deck = new Deck();
        deck.ResetToFullDeck();
        if (shuffled) deck.Shuffle();
        return deck;
    }

    public void Add(Card card)
    {
        cards.Add(card);
    }

    public bool Contains(Card card)
    {
        return cards.Contains(card);
    }

    public bool Remove(Card card)
    {
        return cards.Remove(card);
    }

    public int Sum => cards.Sum(card => card.Value);

    public Card DrawNext()
    {
        var card = cards.FirstOrDefault();
        if (card != null) cards.RemoveAt(0);
        return card;
    }

    public void Clear()
    {
        cards.Clear();
    }

    public void ResetToFullDeck()
    {
        cards.Clear();

        // Populate our deck with 52 cards
        foreach (Suit suit in Enum.GetValues(typeof(Suit)))
        {
            foreach (CardName name in Enum.GetValues(typeof(CardName)))
            {
                cards.Add(new Card(name, suit));
            }
        }
    }

    public void Shuffle()
    {
        var thisIndex = cards.Count;

        while (thisIndex-- > 1)
        {
            var otherIndex = random.Next(thisIndex + 1);
            if (thisIndex == otherIndex) continue;

            var temp = cards[otherIndex];
            cards[otherIndex] = cards[thisIndex];
            cards[thisIndex] = temp;
        }
    }
}

class Program
{
    private static void Main()
    {
        var deck = Deck.GetStandardDeck(true);
        var playerHand = new Deck();
        var computerHand = new Deck();

        Console.WriteLine("Each of us will draw 5 cards. " +
            "The one with the highest total wins.");

        for (int i = 0; i < 5; i++)
        {
            GetKeyFromUser($"\nPress any key to start round {i + 1}");

            var card = deck.DrawNext();
            Console.WriteLine($"\nYou drew a {card}");
            playerHand.Add(card);

            card = deck.DrawNext();
            Console.WriteLine($"I drew a {card}");
            computerHand.Add(card);
        }

        while (playerHand.Sum == computerHand.Sum)
        {
            Console.WriteLine("\nOur hands have the same value! Draw another...");

            var card = deck.DrawNext();
            Console.WriteLine($"\nYou drew a {card}");
            playerHand.Add(card);

            card = deck.DrawNext();
            Console.WriteLine($"I drew a {card}");
            computerHand.Add(card);
        }

        Console.WriteLine($"\nYour total is: {playerHand.Sum}");
        Console.WriteLine($"My total is: {computerHand.Sum}\n");

        Console.WriteLine(playerHand.Sum > computerHand.Sum
            ? "Congratulations, you're the winner!"
            : "I won this round, better luck next time!");

        GetKeyFromUser("\nDone! Press any key to exit...");
    }

    private static ConsoleKeyInfo GetKeyFromUser(string prompt)
    {
        Console.Write(prompt);
        var key = Console.ReadKey();
        Console.WriteLine();
        return key;
    }
}
公共枚举套装{红心、梅花、钻石、黑桃}
公共枚举卡名
{
ACE=1、二、三、四、五、六、七、八、九、十、杰克、皇后、金
}
公务舱卡
{ 
公益诉讼{get;}
公共卡名名称{get;}
公共int值=>(int)Name==1?11:(int)Name>9?10:(int)Name;
公共卡(卡名、套装)
{
名称=名称;
西装=西装;
}
公共重写字符串ToString()
{
返回{Suit}的$“{Name}”;
}
}
公务舱甲板
{
私有只读列表卡=新列表();
private readonly Random=new Random();
公共整数计数=>cards.Count;
公共静态甲板GetStandardDeck(布尔混洗)
{
var甲板=新甲板();
deck.ResetToFullDeck();
如果(洗牌)牌组。洗牌();
返回甲板;
}
公共作废添加(卡片)
{
卡片。添加(卡片);
}
公共bool包含(卡片)
{
返回卡。包含(卡);
}
公共bool移除(卡)
{
归还卡片。移除(卡片);
}
public int Sum=>cards.Sum(card=>card.Value);
公共卡提款下一个()
{
var card=cards.FirstOrDefault();
如果(card!=null)cards.RemoveAt(0);
回程卡;
}
公共空间清除()
{
卡片。清除();
}
公共空间重置到空甲板()
{
卡片。清除();
//用52张牌填充我们的牌组
foreach(Enum.GetValues中的套装(typeof(Suit)))
{
foreach(Enum.GetValues中的CardName名称(typeof(CardName)))
{
卡片。添加(新卡片(姓名、套装));
}
}
}
公开无效洗牌()
{
var thisIndex=卡片数;
而(此索引-->1)
{
var otherIndex=random.Next(此索引+1);
如果(thisIndex==otherIndex)继续;
var temp=卡片[其他索引];
卡片[其他索引]=卡片[此索引];
卡片[此索引]=临时;
}
}
}
班级计划
{
私有静态void Main()
{
var deck=deck.GetStandardDeck(真);
var playerHand=新甲板();
var computerHand=新甲板();
Console.WriteLine(“我们每人将抽5张牌。”+
“总得分最高的人。”);
对于(int i=0;i<5;i++)
{
GetKeyFromUser($”\n按任意键开始第{i+1}轮);
var card=deck.DrawNext();
Console.WriteLine($“\n您画了一张{card}”);
playerHand.Add(卡片);
card=deck.DrawNext();
Console.WriteLine($“我画了一张{card}”);
添加(卡片);
}
while(playerHand.Sum==computerHand.Sum)
{
Console.WriteLine(\n所有的手都有相同的值!再画一个…);
var card=deck.DrawNext();
Console.WriteLine($“\n您画了一张{card}”);
playerHand.Add(卡片);
card=deck.DrawNext();
Console.WriteLine($“我画了一张{card}”);
添加(卡片);
}
Console.WriteLine($“\n您的总数为:{playerHand.Sum}”);
Console.WriteLine($“我的总数是:{computerHand.Sum}\n”);
Console.WriteLine(playerHand.Sum>computerHand.Sum