【问题标题】:C++ Array Index [closed]C++ 数组索引 [关闭]
【发布时间】:2019-03-04 03:17:47
【问题描述】:

我正在尝试在 C++ 中制作一个类似于黑杰克的卡片程序,但其中一个限制是卡片数组必须包含卡片的花色和价值,即 2H、3H、2C、3C , 等等。我该怎么做?

【问题讨论】:

  • 你到底在坚持什么?
  • 我只是无法弄清楚如何使数组的索引同时具有这两个组件。
  • 这很简单。只需将所有花色和卡片的值放入它们自己的单独数组中,您的索引将只是该数组的索引。
  • 类似char cards[][2] = { {2,'H'}, {3,'H'} };

标签: c++ arrays indexing


【解决方案1】:

Suits 创建一个enum

enum Suits { Spades, Clubs, Diamonds, Hearts };

Card 创建一个class

class Card
{
  private:
    Suits suit;
    int value;

  public:
    Card(Suits s, int v);
};

Card::Card(Suits s, int v)
{
    suit = s;
    value = v;
}

main 中创建您的数组(或vector

int main(int argc, char const *argv[])
{
    int size = 6, total_colors = 4, total_values = 13;
    std::vector<Card> v;

    // Fill the vector with random cards
    for (int i = 0; i < size; i++)
        v.push_back(Card((Suits)(i % total_colors), i % total_values));

    return 0;
}

注意事项

  • 这将允许您仅使用一个索引来操作您的卡片。这比为Card 可能拥有的每个属性创建单独的数组更清洁、更易于维护。
  • Card((Suits)(i % total_colors), i % total_values) 将基于 索引 i 创建一个 Card,您可能需要更改逻辑以使其适合您的用例。

【讨论】:

    【解决方案2】:

    所以这类似于你如何表示一个矩阵,除了每一行代表一套西装。

    如果我在每一行中都有 Ace -> King,则行的长度将为 13。然后您可以将每个花色分配到特定行。例如,红心可能是 0、方块 1、黑桃 2 和梅花 3。

    要对这些值中的任何一个进行索引,只需将卡牌 [suit * 13 + 卡牌] 命名,假设您命名了您的数组卡牌。例如,如果我想要 2 的钻石,它将被索引为卡片 [1 * 13 + 1],因为 2 将是排钻石的第二张卡片(假设 A 是索引 0)。

    你甚至可以为花色做一个枚举,这样计算就可以看起来像卡片[DIAMONDS * 13 + 1]。此外,您可以为卡片使用另一个枚举,以进一步简化卡片的索引[DIAMONDS * 13 + TWO]。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 2021-11-04
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多