C# 在套牌洗牌程序中将列表强制转换为int

C# 在套牌洗牌程序中将列表强制转换为int,c#,list,casting,playing-cards,C#,List,Casting,Playing Cards,我目前正试图写我的第一个程序,所以我的编码并不像其他人那么有知识 我正在尝试洗牌一副牌,而不使用Fischer Yates方法中给出的确切代码,或者至少是我的版本 我的计划是将卡片分配给一个枚举,这将为它们分配一个0-51之间的数字。然后我在列表中设置这些卡,并从RNG生成的列表中删除该卡。从列表中移除卡片后,计数器从可能的随机数中删除一个,我将该数字设置为一个临时变量,然后将其传递到一个新列表,该列表将是洗牌牌组 我的问题在于找到将我的第一个列表显式转换为int的代码。我想我知道如何使用.Re

我目前正试图写我的第一个程序,所以我的编码并不像其他人那么有知识

我正在尝试洗牌一副牌,而不使用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--;
        }
    }
}
枚举卡
{
阿塞斯派德,
两个黑桃,
三黑桃,
四黑桃,
五节,
六黑桃,
七斯帕德,
八日,
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等等)和一套套装


这将使大多数基于纸牌的游戏变得更加简单。

由于您的示例中确实没有洗牌代码,因此您对实际存在的问题有些困惑。因为这样的问题经常出现,所以我把这个问题作为类似问题的重复来结束。我建议您仔细阅读问答中的代码,这样您既可以得到问题的答案,也可以将问题缩小到几行代码(请参阅为帖子创建良好示例的指南)。