为真正糟糕的标题道歉,但我不太清楚如何更好地表达它。我正在创建一个相当简单的程序,只是为了在C#中使用继承,包括向玩家发牌。我想知道最好的方法是什么,以及在给玩家分配这两种方式之间的区别是什么:
在Player类中:
public Player takeHand(List<Card> cards)
{
this.hand = cards;
return this;
}
然后在“众议院”级别(即经销商/主要班级)内,循环播放玩家并出售卡片:
List<Player> players = new List<Player>() {new Player.. new Player..};
List<List<Card>> hands;
for (int i = 0; i < players.count; i++)
{
hands.Add(new List<Card>());
for (int j = 0; j < cardsToDeal; j++)
{
hands[i].Add(dealCard());
}
players[i].takeHand(hands[i]); // correct?
players[i] = players[i].takeHand(hands[i]); // correct?
}
我的第一个问题是调用方法'takeHand'的正确方法是什么?他们似乎都工作相同。
我的第二个问题是,然后让“takeHand”方法改为“void”,然后不返回'this',有什么不同?即:
public void takeHand(List<Card> cards)
{
this.hand = cards;
}
然后做:
players[i].takeHand(hands[i]);
它似乎仍然像我期望的那样工作,并且正确地将牌分配给玩家。
感谢您的任何意见/建议! FYP
答案 0 :(得分:3)
这没用:players[i] = players[i].takeHand(hands[i]);
:您不需要修改播放器,只需要修改hand
。正确的是:
public void takeHand(List<Card> cards)
{
this.hand = cards;
}
因为,IRL,当你交易卡时,你不能改变整个玩家吗?你只需要更换他们手中的卡片。
这里也是一样,每次交易时都不需要更改player[i]
。此外,您正在返回this
,这就像写我用杰克替换杰克