我正在尝试用2名玩家创建一个扑克游戏,每个玩家获得5张牌.我遇到的问题是,当第一个玩家拿出他的5张牌时,第二个玩家也会抽出相同的5张牌.在Deck中,有一个变量top_card,每次抽奖都会减少.但它重新回到51而不是从46继续.任何人都可以帮助我吗?
Sample output
nine of clubs
jack of diamonds
queen of clubs
queen of hearts
joker of hearts
nine of clubs
jack of diamonds
queen of clubs
queen of hearts
joker of hearts
Run Code Online (Sandbox Code Playgroud)
//Card
#include <string>
using namespace std;
enum suits { none, diamond, club, heart, spade };
class card {
public:
card( ){
suit = none;
rank = 0;
}
card( suits sv, int rv) {
rank = rv;
suit = sv;
}
int spots ( ){
return rank;
}
suits kind ( ){
return suit;
}
string toString() const {
return rankString(rank) + " of " + suitString(suit);
}
string rankString(int r) const{
if (1 == r) return "ace";
else if (2 == r) return "two";
else if (3 == r) return "three";
else if (4 == r) return "four";
else if (5 == r) return "five";
else if (6 == r) return "six";
else if (7 == r) return "seven";
else if (8 == r) return "eight";
else if (9 == r) return "nine";
else if (10 == r) return "ten";
else if (11 == r) return "jack";
else if (12 == r) return "queen";
else if (13 == r) return "king";
else return "joker";
}
string suitString(suits s) const {
if (s == spade) return "spades";
else if (s == heart) return "hearts";
else if (s == diamond) return "diamonds";
else if (s == club) return "clubs";
else return "non-suit";
}
protected:
int rank;
suits suit;
};
//Deck
#include "card.h"
#include <ctime>
#include <cstdlib>
using namespace std;
class deck {
public:
deck() {
top_card = 0;
for( int i = 2; i <= 14; i++ )
{
card c1( diamond, i ),
c2( spade, i ),
c3( heart, i ),
c4( club, i );
cards[ top_card++ ] = c1;
cards[ top_card++ ] = c2;
cards[ top_card++ ] = c3;
cards[ top_card++ ] = c4;
}
}
void shuffle() {
srand(time(NULL));
for(int i=0; i<52; i++) {
int a = rand()%52;
card temp = cards[i];
cards[i] = cards[a];
cards[a] = temp;
}
}
bool is_empty() {
return (top_card <= 0);
}
card draw() {
if( !is_empty() ) {
return cards[ --top_card ];
}
else {
card non_card( none, 0 );
return non_card;
}
}
protected:
card cards[ 52 ];
int top_card;
};
Run Code Online (Sandbox Code Playgroud)
你手上的ctor需要一个deck值:
hand(deck a) {
for(int i=0;i<5;i++)
hands[i] = a.draw();
}
Run Code Online (Sandbox Code Playgroud)
因此,当你draw从甲板上时,只有甲板的本地副本被修改.
编辑:现在可能还值得注意的是,你正在向一个玩家发行5张牌,然后向下一个玩家发牌5张(玩家1获得卡1至5,玩家2获得卡6至10,依此类推).在通常的方案中,你处理循环,所以对于2名玩家,玩家1将获得卡1,3,5,7和9,玩家2将获得卡2,4,6,8和10.
你的shuffle算法也存在缺陷.谷歌搜索"费雪耶茨"应该帮助你理顺它.你也做不希望调用srand每次洗牌一次又一次-你要在节目开始时只有一次调用它.
| 归档时间: |
|
| 查看次数: |
1077 次 |
| 最近记录: |