【问题标题】:using Dictionary trying to search for a value and key (poker game)使用字典尝试搜索值和键(扑克游戏)
【发布时间】:2011-07-08 11:42:15
【问题描述】:

我正在尝试使用 c# 创建一个基本的扑克游戏。

到目前为止,我已经使用这三行随机发牌:

Suit suit = (Suit)randomCardSelector.Next(4);
Value value = (Value)randomCardSelector.Next(13);
Card abc = new Card(suit, value);

现在我想要实现的是只发牌给那些还没有发牌的人。现在为此,我创建了两个“字典”集合,一个称为“deck”,一个称为“dealt”。我最初考虑将所有卡片添加到甲板上,然后在桌子上发牌时将它们从甲板上删除并使用卡片唯一键添加到处理中。

您认为最好的解决方法是什么?我基本上不希望重复的牌,例如 Ace Hearts 和 Ace Hearts 组合在同一个牌组中。我怎样才能防止这种情况发生?

【问题讨论】:

    标签: c# dictionary poker


    【解决方案1】:

    我认为最简单的方法是:

    答:覆盖GetHashCode() 函数,并使用卡片价值和卡片套装创建一个哈希。 B:实现IEquatable<Card>,比较花色和数值。

    然后,只需要一个包含所有发牌的HashSet<Card>(不需要字典),然后让你的卡片生成器检查卡片是否已经存在。

    【讨论】:

      【解决方案2】:

      您的Dictionary 方法应该可行,但我认为最简单的方法是生成一张List 牌,最初以某种自然顺序,然后将它们洗牌。然后,只需跟踪您已发出的列表中的多少张牌。洗牌时,您(以及其他尚未阅读的人)应该阅读此excellent article on the pitfalls of shuffling

      【讨论】:

        【解决方案3】:

        这不是通常的做法。我见过的大多数纸牌游戏都有 Deck 结构,它通常是 0..51 范围内的值的数组 [0..51]。对于每个值,花色是 (cardValue / 13),值是 (cardValue % 13)。您最初通过将数组初始化为 0..51 来为新游戏创建套牌,然后随机将每个位置的卡片与另一个随机位置的卡片交换。完成此操作后,您只需从一端挑选卡片并根据需要“发牌”给玩家。

        【讨论】:

          【解决方案4】:

          为什么不预先生成一张卡片列表,然后洗牌并将它们推入堆栈。

          当你发牌时,只需将下一张牌从堆栈中弹出即可。

          还有一个关于如何在 C# 中随机播放列表的 SO 问题 here

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-07
            • 2014-02-22
            • 1970-01-01
            • 2012-05-07
            • 2016-03-01
            • 1970-01-01
            相关资源
            最近更新 更多