我的代码按预期工作,除非我将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);
}
}
答案 0 :(得分: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
}
}
玩得开心!