三目並べゲームを作っていて、今プレイヤーの対戦相手を作っています。ご存知のように、三目並べの試合には 9 つのフィールドがあるため、他の X と O によって既に使用されているすべてのフィールドを含むベクトルを作成しました。
std::vector<int> UsedPositions;
そのため、srand(time()) でランダムな値を取得しようとする前に、ベクトルを反復処理して、その位置が既に使用されているかどうかを確認しました。実際には機能しましたが、ご想像のとおり、貧弱な CPU では多くの計算 (したがって時間) がかかりました。これは、ベクトルに約 8 つの要素がある場合、8 回反復する必要があることを意味するためです (つまり、乱数がそうでなければ、それをさらに 8 回通過する必要があります)。
TL;DR - ベクトルから < 10 && > 0 の個別のランダム値を取得するにはどうすればよいですか?
私にとって遅いコード:
int FindUniqueAnswer()
{
int answer;
bool AnswerFound = false;
while(!AnswerFound)
{
bool DoesntEqual = true;
srand(time(0));
int random = rand()%10;
if(random == 0)
{
random++;
}
for(int i = 0;i<UsedPositions.size();i++)
{
if(random == UsedPositions.at(i))
{
DoesntEqual = false;
break;
}
}
if(DoesntEqual)
{
answer = random;
AnswerFound = true;
}
}
return answer;
}