将列表添加到列表中

2 c# list

我的代码工作正常,除了当我添加一个playerHand,这是卡的列表,在列表playerHands,它改变了以往所有球员的手在列表中当前playerHand.

我对发生的事情的想法是,记忆中只有一个玩家手持不断更新处理过的牌.playerHands列表中的项目只是指向单个playerHand.

如何创建playerHand的多个实例,以便playerHands列表中的每个项目都是唯一的?

注意:我最初的反应是使用Arrays而不是List,但据我所知,Arrays是老式的并且不赞成使用List.解决我的问题是我的目标,但如果对我正在采取的方向有任何想法,这个计划将被接受.

using System;
using System.Collections.Generic;

namespace Blackjack
{
    class Program
    {
        static void Main()
        {
            int numOfDecks = 2;
            List<Cards> shoe = Deck.createDeck(numOfDecks);
            Deck.shuffleDeck(shoe, numOfDecks);
            Hand  playerHand  = new Hand();
            Hands playerHands = new Hands();

            //Test Hands
            //Create ten hands of dealt cards
            for (int i = 0 ; i < 10; i++)
            {               
                playerHand.clearHand();
                playerHands.addHand(playerHand);
                for (int j = 0; j < 5; j++)
                 {
                    playerHand.addCard(shoe[j]);
                    shoe.RemoveAt(0);   //delete card delt from shoe
                 }             
            }

             //Display the cards in each of the hands
             for (int i = 0; i < playerHands.hands.Count; i++)
             {
                 Console.Write("Hand {0}: Cards:  ", i);
                 for (int j = 0; j < playerHand.hand.Count; j++)
                {
                    Console.Write("{0}{1}, ", playerHands.hands[i].hand [j].rank, playerHands.hands[i].hand[j].suit);               
                }
                 Console.WriteLine();
             }
             Console.Read();
        }
    }
}

    class Hand
    {
    /////////////////////////////////////////////////////////////////////
    //Hand should contain, at a minimum:
    //  A List<> of cards that holds the individual cards delt to a player
    //  Game Number:  A game is continues until the player quits
    //  Hand Number:  Sequential hand played during a game
    //////////////////////////////////////////////////////////////////////

    public List<Cards> hand;

    public Hand()
    {
        hand = new List<Cards>();
    }

    public void addCard(Cards card)
    {
        this.hand.Add(card);
    }

    public void clearHand()
    {
       hand.Clear(); 
    }
}


class Hands
{
    public List<Hand> hands;

    public Hands()
    {
        hands = new List<Hand>();
    }

    public void addHand(Hand hand)
    {
        hands.Add(hand);
    }
}
Run Code Online (Sandbox Code Playgroud)

A. *_*esa 5

问题非常非常简单:您没有创建足够的Hand实例.

Hand playerHand = new Hand();只打了一次电话.这意味着您只有一个Hand实例,您正在清理并在第一个for循环中反复填充.

您需要new Hand()为每个手部实例调用一次(只需编辑代码的相关部分):

        Hands playerHands = new Hands();

        //Test Hands
        //Create ten hands of dealt cards
        for (int i = 0 ; i < 10; i++)
        {               
            Hand  playerHand = new Hand();
            playerHands.addHand(playerHand);
            for (int j = 0; j < 5; j++)
             {
                playerHand.addCard(shoe[j]);
                shoe.RemoveAt(0);   //delete card delt from shoe
             }             
        }
Run Code Online (Sandbox Code Playgroud)

玩得开心!