C# 在套牌洗牌程序中将列表强制转换为int
我目前正试图写我的第一个程序,所以我的编码并不像其他人那么有知识 我正在尝试洗牌一副牌,而不使用Fischer Yates方法中给出的确切代码,或者至少是我的版本 我的计划是将卡片分配给一个枚举,这将为它们分配一个0-51之间的数字。然后我在列表中设置这些卡,并从RNG生成的列表中删除该卡。从列表中移除卡片后,计数器从可能的随机数中删除一个,我将该数字设置为一个临时变量,然后将其传递到一个新列表,该列表将是洗牌牌组 我的问题在于找到将我的第一个列表显式转换为int的代码。我想我知道如何使用.RemoveAt从第一个列表中删除。我需要进行另一次转换,还是可以将找到的随机数存储到shuffledDeck中C# 在套牌洗牌程序中将列表强制转换为int,c#,list,casting,playing-cards,C#,List,Casting,Playing Cards,我目前正试图写我的第一个程序,所以我的编码并不像其他人那么有知识 我正在尝试洗牌一副牌,而不使用Fischer Yates方法中给出的确切代码,或者至少是我的版本 我的计划是将卡片分配给一个枚举,这将为它们分配一个0-51之间的数字。然后我在列表中设置这些卡,并从RNG生成的列表中删除该卡。从列表中移除卡片后,计数器从可能的随机数中删除一个,我将该数字设置为一个临时变量,然后将其传递到一个新列表,该列表将是洗牌牌组 我的问题在于找到将我的第一个列表显式转换为int的代码。我想我知道如何使用.Re
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--;
}
}
}
枚举卡
{
阿塞斯派德,
两个黑桃,
三黑桃,
四黑桃,
五节,
六黑桃,
七斯帕德,
八日,
NineSpade,
坦斯帕德,
杰克斯帕德,
皇后大道,
王牌,
阿塞哈特,
两颗心,
三颗心,
四心,
五颗心,
六颗心,
七心,
第八部分,
九心,
十心,
JackHeart,
皇后大道,
王心,
亚齐钻石,
两颗钻石,
三钻石,
四钻石,
菲德亚蒙德,
六钻石,
塞文迪蒙德,
八月份,
NineDiamond,
坦迪蒙德,
杰克戴蒙德,
皇后区,
金钻,
AceClub,
两人俱乐部,
三人俱乐部,
四俱乐部,
菲维俱乐部,
六俱乐部,
七方俱乐部,
八俱乐部,
NineClub,
十俱乐部,
杰克俱乐部,
QueenClub,
国王俱乐部
}
阶级洗牌
{
静态随机rndCard=新随机(DateTime.Now.毫秒);
int电流卡;
int临时卡;
int totalCards=51;
List currentDeck=新列表();
List shuffledDeck=新列表();
私人洗牌机()
{
同时(totalCards>-1)
{
tempCard=rndCard.Next(0,51);
全部卡片--;
}
}
}
所以你有一个卡片列表,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);
}
List currentDeck=新列表();
List shuffledDeck=新列表();
对于(int i=0;i
这样,随着i
的增加,每个循环中剩余的牌数减少,我们抓取一张,并将其添加到洗牌牌组中
编辑:我可能会建议创建一个Card类(如果你对C#有那么深的了解的话)——每个“Card”对象都有一个数值(1-13,Jack为11,Queen为12,King为13等等)和一套套装
这将使大多数基于纸牌的游戏变得更加简单。由于您的示例中确实没有洗牌代码,因此您对实际存在的问题有些困惑。因为这样的问题经常出现,所以我把这个问题作为类似问题的重复来结束。我建议您仔细阅读问答中的代码,这样您既可以得到问题的答案,也可以将问题缩小到几行代码(请参阅为帖子创建良好示例的指南)。