首页 > 解决方案 > 使用 srnd 获取相同的值

问题描述

我试图创造一个纸牌游戏,我遇到了这个问题:

例如:我抽了3张牌开始游戏,每次我玩,游戏都会给出红桃2和方块4,那么第三张牌是不同的(例如方块7)。如果我选择再获得一张牌,游戏会保留 2 张红心,4 张方片,然后将方格 7 与另一张牌交换,而不是保留它。每次我再画一个时,它都会交换最后一回合画的最后一个。

输出:第一次迭代

卡板。获得 3 张初始卡

红心 2 钻石 4 钻石 7

选择你想做什么:

1.-抽一张牌

2.-选择一对

1

第二次迭代

画一张卡片

红桃 2 方块 4 黑桃 9 方块 2

选择你想做什么:

1.-抽一张牌

2.-选择一对

1

第三次迭代

画一张卡片

红桃2 方块4 黑桃9 方块7 黑桃2

选择你想做什么:

1.-抽一张牌

2.-选择一对

等等。

事先谢谢你。

Card* Deck::pickCard() {
    Deck b;
    srand(time(NULL));
    int randCard = rand() % getMany()+1;
    Card* c;
    c = deck[randCard];
    for(int i=randCard+1;i<posFullDeck;i++){
        deck[i-1] = deck[i];
    }
    posFullDeck--;
    return c;
}

void TaulaJoc::pickCard() {
    if (getManyTable() < 20) {
        Baralla b;
        Carta *c = b.pickCard();
        //Eliminar del munt
        table[posFullTable] = c;
        posFullTable++;
        //DELETE
        delete c;
    } else if (getManyTable() == 20) {
        cout<<"You cannot draw more cards!"<<endl;
    }    
}

标签: c++

解决方案


Srand(time(0))

这应该在 main 开始时调用一次,以在每次程序运行时更改变量。然后像往常一样使用 rand 函数,你的代码中没有包含它。


推荐阅读