You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 如何从Deck牌组类抽卡并将Card对象存入用户手牌List集合

问题修正与实现方案

1. 先修复Deck类的语法错误

你提供的Deck类中Shuffle方法缺少闭合大括号,先补全避免编译失败:

class Deck
{
    private Card[] deck;
    private int currentCard;
    private const int numberofCards = 52;
    private Random ranNum;

    public Deck()
    {
        string[] faces = { "Ace", "2", "3", "4", "5", "6",
                            "7", "8", "9", "10","Jack", "Queen", "King"};
        string[] suits = { "Clubs", "Hearts", "Spades", "Diamonds" };
        deck = new Card[numberofCards];
        currentCard = 0;
        ranNum = new Random();
        for (int count = 0; count < deck.Length; count++)
            deck[count] = new Card(faces[count % 13], suits[count / 13]);

    }

    public void Shuffle()
    {
        currentCard = 0;
        for (int i = 0; i < deck.Length; i++)
        {
            int j = ranNum.Next(numberofCards);
            Card temp = deck[i];
            deck[i] = deck[j];
            deck[j] = temp;
        }
    } // 补全此处缺失的大括号

    public Card DealCard()
    {
        if (currentCard < deck.Length)
            return deck[currentCard++];
        else
            return null;
    }
}

Card类代码无需修改可直接正常使用。

2. 主程序抽卡逻辑实现

抽卡逻辑必须放在Deck实例化之后,建议先调用洗牌方法打乱牌序再抽卡,抽得的卡牌直接Add到userHand集合即可,以下是抽5张手牌的实现示例:

class Program
{
    static void Main(string[] args)
    {
        List<Card> userHand = new List<Card>();
        Deck deck1 = new Deck();
        
        // 先洗牌打乱牌序
        deck1.Shuffle();

        // 抽5张牌存入手牌
        for(int i = 0; i < 5; i++)
        {
            Card drawnCard = deck1.DealCard();
            if(drawnCard != null) // 避免牌堆抽空导致的空引用异常
            {
                userHand.Add(drawnCard);
            }
        }

        // 输出用户手牌
        Console.WriteLine("你的手牌:");
        foreach(var card in userHand)
        {
            Console.WriteLine(card.ToString());
        }

        // 原有输出全部52张牌的逻辑可按需保留或删除
        Console.WriteLine("\n完整牌组:");
        for(int i = 0; i < 52; i++)
        {
            Console.WriteLine("{0,-19}", deck1.DealCard());
            if ((i + 1) % 4 == 0)
                Console.WriteLine();
        }
        Console.ReadLine();
    }
}

补充说明

  • 你之前写的GetCard是笔误,Deck类对外提供的抽卡方法为DealCard,直接调用即可
  • 若需要调整抽卡数量,修改抽卡循环的终止条件即可

内容的提问来源于stack exchange,提问作者Xm Par

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:27:01