2012-04-05 195 views
3

我对C++很陌生,而且遇到了一个问题。
我想写一个21点游戏。我有一个大小为52的类型为'char'的数组,其中包含不同的卡片,我想要对其进行洗牌。我不知道如何,但那不是问题。我做了一个名为'ShuffleDeck'的函数,但它不起作用,说它不能返回一个数组。我也无法引用数组。我应该怎么做呢?以下是我正在谈论的代码部分。如何使用函数更改数组?

void ShuffleDeck(bool &rgCards[]) { 
    for (int i = 1; i < 52; ++i) { 
     //something 
    } 
    return rgCards[]; 
} 

所有帮助表示赞赏。

回答

3

您使用std::vector并将其中的值进行混洗。优选地,通过参考该功能来传递它并且处理原始矢量。

从你的代码段,它不是完全清楚你期望它做的事情 - 通过引用传递的bool数组,但返回它作为一个int与语法rgCards[]这使得完全没有意义在这方面。

编辑:按照弗雷德的评论 - 你可以使用random_shuffle

+1

或者只是使用['random_shuffle()'](http://stdcxx.apache.org/doc/stdlibref/random-shuffle.html)在'std :: vector'上,而不是滚动你自己的shuffle函数。 – 2012-04-05 21:35:26

+0

@FredLarson酷,所有的东西继续令我惊叹。 :) – 2012-04-05 21:37:39

+0

是啊,我真的不知道我要去哪里,但我不想在这里发布任何代码。谢谢您的帮助! – argoneus 2012-04-05 21:39:05

2

从你提供的代码片段看起来好像你正在试图将一个对数组的引用传递给ShuffleDeck()。数组引用的C++语法是data-type (&)[N],其中N是数组中元素的数量。你的函数改为

void ShuffleDeck(char (&rgCards)[52]) { ... } 

您可以将此模板功能,可以让编译器推断出数组的长度

template<size_t N> 
void ShuffleDeck(char (&rgCards)[N]) { ... } 

最后,由于您使用C++你或许应该切换到使用的容器类如std::arraystd::vector而不是C风格的数组。

1

为了保持代码最相似的你写什么,我就做最小的更正:注意&不是必需的,该指数应该开始从0

void ShuffleDeck(bool rgCards[]) { 
    for (int i = 0; i < 52; ++i) { 
     //something 
    } 
} 

你会做任何改变到rgCards [I]将可调用ShuffleDeck

2

你也可以做到这一点

void shuffle(int* deck, int size) 
{ 
    for(int i =0; i < size; i++) 
    { 
    deck[i] = i; 
    } 
} 

这表明阵列作为确实传递一个指针。

int deck[52]; 
shuffle(deck,52); 
0

最干净的溶液,IMO:

class Deck { 
    char cards[52]; 
public: 
    void Shuffle(); 
}; 

void Deck::Shuffle() 
{ 
    // I can change cards here because both cards and Shuffle are members of Deck 
}