计算数组中的Null值

Nic*_*son 2 c++ arrays function

为项目制作一个uno游戏.

所有108张卡都位于名为cardDeck的填充数组中[108]

start函数随机抽取7张牌,并通过将它们添加到名为playerHand []的数组中来填充玩家手牌.

我需要帮助.

1)当我们将卡片拉入playerHand []时,我不知道如何使卡片从cardDeck阵列中消失.

2)我也不知道如何创建一些能够计算cardDeck数组中非空值的东西,这样它就会显示两个玩家抽牌后留在牌组中的牌的总数.

Joh*_*ing 12

#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
Run Code Online (Sandbox Code Playgroud)

制作甲板vector.

vector<Card> deck_;
Run Code Online (Sandbox Code Playgroud)

将每张卡插入卡座.

deck_.push_back(Yellow0);
deck_.push_back(WildDraw4);
Run Code Online (Sandbox Code Playgroud)

洗牌

srand((unsigned)time(0));
random_shuffle(deck_.begin(), deck_.end());
Run Code Online (Sandbox Code Playgroud)

将牌从牌组中取出并放入玩家的手中.

vector<Card> player_hand_;
for( size_t i = 0; i < 7; ++i )
{
  player_hand_.push_back(deck_[0]);
  deck_.erase(deck_.begin());
}
Run Code Online (Sandbox Code Playgroud)

编辑:

根据下面评论中的请求,我将解释为什么我认为应该有多个无状态卡的向量而不是单个有状态卡向量.

OOP试图接近的理想之一是尽可能地模拟现实世界.现在显然vector不是OOP,但理论上包含的卡片可以是.虽然在许多情况下肯定无法完美实现,或者甚至应该尝试在很多情况下完美实现,但在现实世界IMO超越任何特定编程范例之后尝试对软件组件进行建模.

所以考虑一下Uno牌.Uno卡有几个不同的属性.他们有一个等级(0-9),他们有一套(红色,蓝色,黄色,绿色).还有一些卡片具有特殊含义,既没有套装也没有等级(WildDraw4,Wild,Draw2,Skip,reverse).

因此,如果我们要用C++模拟Uno卡,它会是什么样子?Uno卡一旦打印就不会改变.例如,黄色2永远不会是绿色5或野生抽奖4.如果你从盒子里拿出绿色的7并把它交给你的朋友,它仍然是绿色的7.它现在在你朋友的手中,但这不是变化.相反,改变的是你朋友的手.它现在拥有一张Green 7 Uno卡,而不是空的.

在Uno的游戏中,每个玩家获得7张牌.有一张牌面朝上放置成弃牌堆,剩下的牌面朝下放置,形成抽牌堆.当您将牌从抽牌堆移到玩家手中时,即使位置有卡,卡仍然没有变化.但不要挂在人类语言上."它的位置"并不意味着卡的位置是卡的属性.但是当你移动牌时,一些东西已经发生了变化 - 抽签的状态和玩家的手牌.

因此,我们最终得到了一个用于绘图堆的向量,另一个用于弃牌堆,以及每个玩家的一个向量,代表他们的手.

这种设计易于由维护程序员理解,易于扩展,并且易于第一次开发.因为它很简单,所以也不容易出现缺陷.毕竟,更容易崩溃 - 滑板或航天飞机?

  • @Jason:你把"更有效率"等同于"更好".大多数时候,当它变得更有效时,某些东西不会变得更好.在大多数情况下,稳健性和易维护性以及可扩展性远比效率更重要. (2认同)