我不确定我的标题是多么具有描述性,但有希望点击一下,并且会更好地理解我的意思。
我正在制作一个简单的游戏,我想要创建的函数应该从数组(名称)中获取一个项目,从另一个中获取一个项目(角色)并将它们组合在一起以形成“name-role”,这将被添加在另一个向量中。
我的第一个版本让我尝试使用rand(),所有数字都在13以下,但我发现自己必须在前6个项目后等待大约30分钟,因为很明显,它需要一些时间才会得到另一个索引尚未使用过。我尝试使用一些带有项目的向量,从中提取随机数,然后删除该数字,这样它会更快但是它陷入循环中,我不确定为什么。我在这方面工作了很长时间,开始对我自己的代码感到非常困惑和厌倦,所以如果有人能帮助我,那就太好了。
我当前未使用的代码:
std::vector<std::string> gGetResidents()
{
std::string gPlayers[12]{ "Deodat Lawson", "James Bayley", "Edward Bishop", "Rebecca Nurse", "Sarah Good",
"Bridget Bishop", "Sarah Wildes", "Elizabeth Howe", "John Proctor", "Martha Carrier", "George Burroughs",
"Giles Corey" };
std::string gRoles[12]{ "Jailor", "Sheriff", "Investigator", "Vigilante", "Doctor", "Bodyguard", "Lookout",
"Escort", "Godfather", "Mafioso", "Consort", "Framer" };
std::vector<size_t> gUsed;
std::vector<std::string> gMetaResidents;
for (size_t gInd{ 0 }; gInd < 12; ++gInd)
{
gLabel:
std::vector<size_t> gNumbersPlayer{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
std::vector<size_t> gNumbersRole{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
srand(time(nullptr));
size_t gRandomPositionPlayer = rand() % gNumbersPlayer.size();
size_t gRandomPositionRole = rand() % gNumbersRole.size();
std::cout << "siz : " << gNumbersPlayer.size() << "\n\n";
std::cout << "rand pos pl : " << gRandomPositionPlayer << " rand pos rol : " << gRandomPositionRole << "\n\n";
size_t gRandomPlayer{ 0 };
size_t gRandomRole{ 0 };
if(gRandomPositionPlayer < gNumbersPlayer.size() && std::find(gNumbersPlayer.begin(), gNumbersPlayer.end(), gRandomPositionPlayer) != gNumbersPlayer.end())
{
gRandomPlayer = gNumbersPlayer[gRandomPositionPlayer -1];
gNumbersPlayer.erase(gNumbersPlayer.begin() + gRandomPositionPlayer);
}
std::cout << "rand pl : " << gRandomPlayer;
if (gRandomPositionRole < gNumbersRole.size() && std::find(gNumbersRole.begin(), gNumbersRole.end(), gRandomPositionRole) != gNumbersRole.end())
{
gRandomRole = gNumbersRole[gRandomPositionRole - 1];
gNumbersRole.erase(gNumbersRole.begin() + gRandomPositionRole);
}
std::cout << " rand rol : " << gRandomRole << "\n\n";
if (std::find(gUsed.begin(), gUsed.end(), gRandomPlayer) != gUsed.end())
goto gLabel;
if (std::find(gUsed.begin(), gUsed.end(), gRandomRole) != gUsed.end())
goto gLabel;
gUsed.push_back(gRandomPlayer);
gUsed.push_back(gRandomRole);
std::string gCombinedUn = gPlayers[gRandomPlayer].append(" is the ");
std::string gCombined = gCombinedUn.append(gRoles[gRandomRole]);
gMetaResidents.push_back(gCombined);
gCombinedUn.clear();
gCombined.clear();
std::cout << gRandomPlayer << " - " << gRandomRole << "\n";
}
return gMetaResidents;
}
P.S。:cout来自我试图调试游戏(尽管能够从我的IDE中做到这一点,我只是因为某些奇怪的原因而不愿意这样做,所以,忽略它们。