C :如何生成一组随机值更多



我编写了一个代码来生成玩家,但是却陷入了如何生成第二个播放器上。我最终需要与其中一堆合作。/N我一定有一些非常基本的东西……

类定义

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;
}

我足够naiive,可以认为这会给我带来2组单独的值,但是当我运行时,它给了我两次相同的值。

本质上给我同一个球员两次。

理想情况下,我不希望这是主要的,什么是编写单个功能来生成这些统计数据的播放器的方法?

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

如果考虑到它,您的generatePlayer函数不会做任何事情。它仅打印播放器统计信息。该功能的更好名称是printPlayer

实际生成的代码是您主要拥有的所有代码,它们会生成随机信息。因此,也许您的代码会这样结构更好(为了清楚起见,我缩写了)。在此代码中,Player构造函数调用随机代码,因此所有播放器都将具有随机统计信息。

class Player
{
public:
    Player(); // generate player with random stats
    void printPlayer();
private:
    personal_information pinfo;
    player_skill pskill;
    player_trait ptrait;
};
Player::Player()
{
    pinfo.first_name = nameEng[rand() % ARR_SIZE(nameEng)];
    pinfo.last_name = nameEngSurname[rand() % ARR_SIZE(nameEngSurname)];
    ...
    pskill.position = positionsList[rand() % ARR_SIZE(positionsList)];
    pskill.fitness = random(10);
    ...
}
int main()
{
    Player P1genStats;
    P1genStats.printPlayer();
    Player P2genStats;
    P2genStats.printPlayer();
}

最新更新