I'm not sure how descriptive my title is but hopefully some clicked and will better understand what I mean here.
I am making a simple game and the function that I want to create should take an item from an array (name) and one from the other (role) and pair them together to form "name-role" which will be added in the other vector.
My first version had me trying to use rand() with all numbers under 13 but I found myself having to wait around 30 minutes after the first 6 items because, obviously, it would take some time until it would get another index that wasn't already used. I tried to use some vectors with items, extract random number from them and then delete that number so it will be much faster but it's stuck in a loop and I'm not really sure why. I worked on this for a long time and started getting very confused and tired from my own code, so if someone could help me that'd be great.
My current un-working code:
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.: The couts are from me trying to debug the game (despite being able to do it from my IDE, I just preffer doing this for some odd reason, so, ignore them.
Aucun commentaire:
Enregistrer un commentaire