在 Deck Shuffling 程序中列出投射到 int

本文关键字:int Deck Shuffling 程序 | 更新日期: 2023-09-27 18:33:05

我目前正在尝试编写我的第一个程序,所以我的编码不像其他人那样知识渊博......

我正在尝试洗一副牌,而不使用费舍尔-耶茨方法中给出的确切代码,或者至少是我的版本......

我的计划是将卡片分配给枚举,这将为它们分配一个从 0-51 的数字。然后,我将卡片设置在列表中,并从 RNG 生成的列表中删除卡片。从列表中删除卡片后,计数器从可能的随机数中删除一个,我将数字设置为一个临时变量,然后将其传递给一个新列表,该列表将成为洗牌组。

我的问题是查找将我的第一个列表显式转换为 int 的代码。我想我知道如何使用.删除。我是否需要进行另一次转换,或者我可以将找到的随机数存储到洗牌组中吗?

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--;
        }
    }
}

在 Deck Shuffling 程序中列出投射到 int

所以你有一个卡片列表,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类(如果你已经学习了C#) - 每个"Card"对象都有一个数值(1-13,11代表杰克,12代表女王,13代表国王等)和一个花色。

这将使大多数基于卡牌的游戏变得容易得多。