C ++:如何生成多于一组的随机值

时间:2019-02-19 07:20:24

标签: c++ inheritance

我写了一个代码来生成一个播放器,但是在如何生成第二个上却陷入了困境。 我最终将需要与一大堆人一起工作。 一定有我最想念的东西...

类定义

class Player
{
public:
    Player(personal_information pi, player_skill pskill, player_trait ptrait);
    void generatePlayer();

private:
    personal_information pinfo;
    player_skill pskill;
    player_trait ptrait;
};

类实现

Player::Player(personal_information pi, player_skill psk, player_trait pt)
{
    this->pinfo = pi;
    this->pskill = psk;
    this->ptrait = pt;
}

产生玩家的乐趣

void Player::generatePlayer()
{
    printf(" %s %s (%dyo, %dcm, %dkg)\n", this->pinfo.first_name, this->pinfo.last_name, this->pinfo.years, this->pinfo.height, this->pinfo.weight);
    printf("   Can play as (%s)\n", this->pskill.position);
    printf(" Player Skills:\n");
    printf("   Fitness (%d)\n", this->pskill.fitness);
    printf("   Strenght (%d)\n", this->pskill.strenght);
    printf("   Goalkeeping (%d)\n", this->pskill.goalkeeping);
    printf("   Passing (%d)\n", this->pskill.passing);
    printf("   Shooting (%d)\n", this->pskill.shooting);
    printf(" Traits:");
//  printf("\n");
//  printf(" Player is");
if (true == this->ptrait.tall) { printf(" Tall"); };
if (true == this->ptrait.raz) {printf(" Short");};
if (true == this->ptrait.fat) {printf(" Fat");};
if (true == this->ptrait.skinny) {printf(" Skinny");};
    printf(".\n");
    printf("\n");
}

主要

int main()
{
    initSystem();

    // Random player generator data
    personal_information pi = { 0 };
        pi.first_name = nameEng[rand() % ARR_SIZE(nameEng)];
        pi.last_name = nameEngSurname[rand() % ARR_SIZE(nameEngSurname)];
        pi.years = Min_Age_Player + random(Min_Age_Player - Max_Age_Player);
        pi.height = MIN_HEIGHT + random(MAX_HEIGHT - MIN_HEIGHT);
//      pi.height = 140;
        pi.weight = MIN_WEIGHT + random(MAX_WEIGHT - MIN_WEIGHT);
//      pi.weight = 120;
    player_skill psk = { 0 };
        psk.position = positionsList[rand() % ARR_SIZE(positionsList)];
        psk.fitness = random(10);
        psk.strenght = random(10);
        psk.goalkeeping = random(5);
        psk.passing = random(10);
        psk.shooting = random(10);
    player_trait pt = { 0 };
            //  tall/short
        if (pi.height > 186) {pt.tall = true;
            psk.goalkeeping = psk.goalkeeping + 2;
        };
        if (pi.height < 165) { pt.raz = true;
            psk.goalkeeping = psk.goalkeeping - 2;
        };
            //  fat/skinny
        if (pi.weight > 100) { pt.fat = true;
            psk.fitness = psk.fitness - 2;
            psk.strenght = psk.strenght + 2;
        };
        if (pi.weight < 85) { pt.skinny = true;
            psk.strenght = psk.strenght - 2;
        };
    Player P1genStats(pi, psk, pt);
    P1genStats.generatePlayer();

    Player P2genStats(pi, psk, pt);
    P2genStats.generatePlayer();

    return 0;
}

我很天真地认为这将为我提供2套独立的值,但是当我运行它时,它会给我两次相同的值。

本质上给我两次相同的玩家。

理想情况下,我什至不希望这成为主要问题,编写单个函数以生成具有这些统计信息的玩家的最优雅方法是什么?

1 个答案:

答案 0 :(得分:0)

如果要使用两个不同的播放器,则需要运行两次随机生成的代码。

考虑一下您的object函数不会做任何事情。它仅打印玩家统计信息。该函数的更好称呼是generatePlayer

真正的生成代码是您主要拥有的所有代码,它们会生成随机信息。因此,也许您的代码会像这样更好地进行结构化(为清楚起见,我已将其缩写)。在此代码中,printPlayer构造函数调用随机代码,因此所有玩家都将具有随机状态。

Player