我写了一个代码来生成一个播放器,但是在如何生成第二个上却陷入了困境。 我最终将需要与一大堆人一起工作。 一定有我最想念的东西...
类定义
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套独立的值,但是当我运行它时,它会给我两次相同的值。
本质上给我两次相同的玩家。
理想情况下,我什至不希望这成为主要问题,编写单个函数以生成具有这些统计信息的玩家的最优雅方法是什么?
答案 0 :(得分:0)
如果要使用两个不同的播放器,则需要运行两次随机生成的代码。
考虑一下您的object
函数不会做任何事情。它仅打印玩家统计信息。该函数的更好称呼是generatePlayer
。
真正的生成代码是您主要拥有的所有代码,它们会生成随机信息。因此,也许您的代码会像这样更好地进行结构化(为清楚起见,我已将其缩写)。在此代码中,printPlayer
构造函数调用随机代码,因此所有玩家都将具有随机状态。
Player