在 Deck Shuffling 程序中将列表转换为 int
List cast to int in a Deck Shuffling program
我目前正在尝试编写我的第一个程序,所以我的编码并不像其他人那样知识渊博...
我正在尝试洗一副纸牌而不使用 Fischer-Yates 方法或至少我的版本中给出的确切代码...
我的计划是将卡片分配给一个枚举,这将为它们分配一个 0-51 之间的数字。然后我将卡片设置在列表中并从 RNG 生成的列表中删除卡片。在卡片从列表中移除后,计数器从可能的随机数中删除一个,我将这个数字设置为一个临时变量,然后我将其传递给一个新列表,该列表将成为洗牌后的牌组。
我的问题是找到可以将我的第一个列表显式转换为 int 的代码。我想我知道如何使用 .RemoveAt 从第一个列表中删除。我是否需要进行另一次转换,或者我可以将找到的随机数存储到 shuffledDeck 中吗?
enum Cards
{
AceSpade,
TwoSpade,
ThreeSpade,
FourSpade,
FiveSpade,
SixSpade,
SevenSpade,
EightSpade,
NineSpade,
TenSpade,
JackSpade,
QueenSpade,
KingSpade,
AceHeart,
TwoHeart,
ThreeHeart,
FourHeart,
FiveHeart,
SixHeart,
SevenHeart,
EightHeart,
NineHeart,
TenHeart,
JackHeart,
QueenHeart,
KingHeart,
AceDiamond,
TwoDiamond,
ThreeDiamond,
FourDiamond,
FiveDiamond,
SixDiamond,
SevenDiamond,
EightDiamond,
NineDiamond,
TenDiamond,
JackDiamond,
QueenDiamond,
KingDiamond,
AceClub,
TwoClub,
ThreeClub,
FourClub,
FiveClub,
SixClub,
SevenClub,
EightClub,
NineClub,
TenClub,
JackClub,
QueenClub,
KingClub
}
class DeckShuffle
{
static Random rndCard = new Random(DateTime.Now.Millisecond);
int currentCard;
int tempCard;
int totalCards = 51;
List<Cards> currentDeck = new List<Cards>();
List<int> shuffledDeck = new List<int>();
private void CardShuffler()
{
while (totalCards > -1)
{
tempCard = rndCard.Next(0, 51);
totalCards--;
}
}
}
所以你有一张卡片列表,currentDeck
。
我建议使用 for 循环来获得一个整数值,例如:
List<Cards> currentDeck = new List<Cards>();
List<Cards> shuffledDeck = new List<Cards>();
for(int i = 0; i < currentDeck.Count - 1; i++) {
//Grab a card, insert it into ShuffledDeck
int randoNum = rndCard.Next(0, 51-i); //This will grab a new number between 1 and however many cards are left
shuffledDeck.Add(currentDeck[randoNum]);
currentDeck.RemoveAt(i);
}
这样,随着 i
的增加,每循环一次,currentDeck 中剩余的牌数减少,我们抓取一张,并将其添加到洗牌后的牌组中。
编辑: 我可能会建议创建一个 Card class 不过(如果你已经深入学习 C#)- 每个 "Card" 对象会有一个数值(1-13,Jack 11,Queen 12,King 13,等等)和花色。
这将使大多数纸牌游戏变得更容易。
我目前正在尝试编写我的第一个程序,所以我的编码并不像其他人那样知识渊博...
我正在尝试洗一副纸牌而不使用 Fischer-Yates 方法或至少我的版本中给出的确切代码...
我的计划是将卡片分配给一个枚举,这将为它们分配一个 0-51 之间的数字。然后我将卡片设置在列表中并从 RNG 生成的列表中删除卡片。在卡片从列表中移除后,计数器从可能的随机数中删除一个,我将这个数字设置为一个临时变量,然后我将其传递给一个新列表,该列表将成为洗牌后的牌组。
我的问题是找到可以将我的第一个列表显式转换为 int 的代码。我想我知道如何使用 .RemoveAt 从第一个列表中删除。我是否需要进行另一次转换,或者我可以将找到的随机数存储到 shuffledDeck 中吗?
enum Cards
{
AceSpade,
TwoSpade,
ThreeSpade,
FourSpade,
FiveSpade,
SixSpade,
SevenSpade,
EightSpade,
NineSpade,
TenSpade,
JackSpade,
QueenSpade,
KingSpade,
AceHeart,
TwoHeart,
ThreeHeart,
FourHeart,
FiveHeart,
SixHeart,
SevenHeart,
EightHeart,
NineHeart,
TenHeart,
JackHeart,
QueenHeart,
KingHeart,
AceDiamond,
TwoDiamond,
ThreeDiamond,
FourDiamond,
FiveDiamond,
SixDiamond,
SevenDiamond,
EightDiamond,
NineDiamond,
TenDiamond,
JackDiamond,
QueenDiamond,
KingDiamond,
AceClub,
TwoClub,
ThreeClub,
FourClub,
FiveClub,
SixClub,
SevenClub,
EightClub,
NineClub,
TenClub,
JackClub,
QueenClub,
KingClub
}
class DeckShuffle
{
static Random rndCard = new Random(DateTime.Now.Millisecond);
int currentCard;
int tempCard;
int totalCards = 51;
List<Cards> currentDeck = new List<Cards>();
List<int> shuffledDeck = new List<int>();
private void CardShuffler()
{
while (totalCards > -1)
{
tempCard = rndCard.Next(0, 51);
totalCards--;
}
}
}
所以你有一张卡片列表,currentDeck
。
我建议使用 for 循环来获得一个整数值,例如:
List<Cards> currentDeck = new List<Cards>();
List<Cards> shuffledDeck = new List<Cards>();
for(int i = 0; i < currentDeck.Count - 1; i++) {
//Grab a card, insert it into ShuffledDeck
int randoNum = rndCard.Next(0, 51-i); //This will grab a new number between 1 and however many cards are left
shuffledDeck.Add(currentDeck[randoNum]);
currentDeck.RemoveAt(i);
}
这样,随着 i
的增加,每循环一次,currentDeck 中剩余的牌数减少,我们抓取一张,并将其添加到洗牌后的牌组中。
编辑: 我可能会建议创建一个 Card class 不过(如果你已经深入学习 C#)- 每个 "Card" 对象会有一个数值(1-13,Jack 11,Queen 12,King 13,等等)和花色。
这将使大多数纸牌游戏变得更容易。