为项目制作Uno游戏。
所有108张卡片都位于名为cardDeck [108]的填充数组中
开始功能随机抽取7张牌,并通过添加来填充玩家的手
他们到一个名为playerHand []的数组
我需要这方面的帮助。
1)我不知道如何将纸牌拉到playerHand []中时从cardDeck阵列中消失。
2)我也不知道如何创建将对cardDeck数组中的非空值进行计数的东西,因此它将显示出两位玩家都抽出纸牌后甲板中剩余的纸牌总数。
最佳答案
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
将卡座设置为
vector
。vector<Card> deck_;
将每张卡插入卡座。
deck_.push_back(Yellow0);
deck_.push_back(WildDraw4);
洗牌
srand((unsigned)time(0));
random_shuffle(deck_.begin(), deck_.end());
将卡片从卡组中取出并放在玩家手中。
vector<Card> player_hand_;
for( size_t i = 0; i < 7; ++i )
{
player_hand_.push_back(deck_[0]);
deck_.erase(deck_.begin());
}
编辑:
根据以下注释中的请求,我将解释为什么我相信应该有多个无状态卡 vector ,而不是一个有状态卡 vector 。
OOP尝试实现的理想之一是尽可能逼真的建模。现在,显然
vector
不是OOP,但是理论上可以包含在其中。尽管在许多情况下当然不能完美实现,甚至在许多情况下甚至都不能试图完美实现,但是在实际的IMO超越任何特定的编程范例之后,尝试对软件组件进行建模。因此,请考虑使用Uno卡。 Uno卡具有几个不同的属性。他们的等级为(0-9),有一套西装(红色,蓝色,黄色,绿色)。还有一些具有特殊含义并且既不适合也不适合其等级的卡(WildDraw4,Wild,Draw2,Skip,reverse)。
因此,如果我们要使用C++对Uno卡进行建模,它将是什么样? Uno卡一旦打印就不会更改。例如,黄色2永远不会是绿色5或疯狂抽奖4。如果您从包装盒中取出绿色,然后将其交给您的 friend ,它仍然是绿色。现在就在您 friend 的手中,但这对卡而言并没有改变。相反,改变的是您 friend 的手。现在,它不再是空的,而是持有Green 7 Uno卡。
在Uno游戏中,每位玩家被发7张牌。一卡面朝上放置成弃牌堆,其余卡面朝下放置成抽牌堆。当您将一张牌从抽牌堆移到玩家的手上时,即使位置已更改,该牌仍未更改。但是不要卡在人类语言上。 “它的位置”并不表示卡的位置是卡的属性。但是当您移动纸牌时,情况发生了变化-抽签状态和玩家的手牌状态。
因此,我们最终得出了一个用于抽奖桩的 vector ,另一个用于丢弃桩的 vector ,以及每个玩家的一个 vector ,代表他们的手。
该设计易于维护程序员理解,易于扩展和易于首次开发。因为它很简单,所以也不特别容易出现缺陷。毕竟,更可能发生故障的是滑板还是航天飞机?