街头骰子模拟-似乎有代码偏见?

时间:2019-05-04 02:04:23

标签: c++ dice

好的,所以在过去的几个月中我没有做太多的编码,而且我认为我现在可以重新使用它,因为我有足够的空间来设置适当的工作空间。 因此,我再次基于一个简单的基于控制台的骰子游戏(街头掷骰)开始了自己的工作,这时基本上只是一个模拟。 我遇到的问题是,每次我运行代码时,播放器似乎都具有优势。 随着时间的流逝,情况只会变得更糟。

这是我的代码。

#include <iostream>
#include <ctime>
#include <Windows.h>

int Wins = 0, Losses = 0;

using namespace std;

class Dice
{
private:
    int NumSides;
public:
    Dice(int NumSides = 6)
    {
        this->NumSides = NumSides;
    }
    ~Dice()
    {

    }

    int Roll(int NumDice)
    {
        int Result = 0;
        for (int i = 0; i < NumDice; i++)
            Result += (rand() % NumSides) + 1;
        return Result;
    }

};

void PrntScore()
{
    cout << "Wins = " << Wins << " Losses = " << Losses << endl;
}


int Won()
{
    cout << "YOU WIN!" << endl;
    Wins++;
    PrntScore();
    return 0;
}

int Lost()
{
    cout << "YOU LOSE!" << endl;
    Losses++;
    PrntScore();
    return 0;
}


int main()
{

    srand(time(NULL));

    Dice D;


    while (1)
    {

        int FirstRoll = D.Roll(2);

        cout << "First Roll = " << FirstRoll << endl;

        if (FirstRoll == 7 || FirstRoll == 11) { Won(); }
        else if (FirstRoll == 2 || FirstRoll == 3 || FirstRoll == 12) { Lost(); }
        else
        {
            cout << "Point set = " << FirstRoll << endl;

            int NewRoll = 0;
            do
            {
                NewRoll = D.Roll(2);
                cout << "New Roll = " << NewRoll << endl;
                Sleep(500);
            } while (NewRoll != FirstRoll && NewRoll != 7);

            if (NewRoll == FirstRoll)
                Won();
            else
                Lost();

        }

        Sleep(500);

    }

    return 0;
}

这是代码偏见,还是运气极差?

1 个答案:

答案 0 :(得分:1)

rand,srand和RAND_MAX存在很多问题,建议不要使用它们。应该考虑使用C ++ 11 <random>

https://en.cppreference.com/w/cpp/numeric/random