私はゲームをプログラミングしています。エリア内を移動できる NPC がいますが、問題があります。ランダム値のために、それらはすべて同じ方向に進みます。
これらはランダム関数です:
int MoveObjects::GetRandomDirectionToMove()
{
srand ( time(NULL) );
int x;
for(int i=0;i<5;i++)
x = rand() % 4 + 1;
return x;
}
int MoveObjects::GetRandomStepsToMove()
{
srand ( time(NULL) );
int x;
for(int i=0;i<5;i++)
x = rand() % 80 + 50;
return x;
}
int MoveObjects::GetRandomTimeToStand()
{
srand ( time(NULL) );
int x;
for(int i=0;i<5;i++)
x = rand() % 20 + 10;
return x;
}
そしてこれがメインです
for(int i=0;i<2;i++)
npc[i].MoveAround(area);
この場合、NPC は 2 人ですが、50 人の NPC を試しても、方向、歩数、立つ時間はすべて同じになります。
どうすれば異なる値を取得できますか?
このウェブサイトでランダムに関するガイドや質問を読もうとしましたが、何も機能しません。スランドを別の場所に置いてみましたが、それでもすべての NPC は同じ方向に進みます。おそらく、ランダムな値を取得するSDL関数がありますか?
for についてもう 1 つ: を削除するfor i
と、常に同じ値が得られます。つまり、すべて同じ方向に進みます 1 方向
完全なムーブアラウンド コード:
int frame = GetFrameCount();
frame++;
SetFrameCount(frame);
static int current_step = 0;
static int current_direction = 0;
static int current_wait = 0;
if(!current_step) {
current_step = GetRandomStepsToMove();
current_direction = GetRandomDirectionToMove();
current_wait = GetRandomTimeToStand();
}
if(!current_wait) {
if(current_direction == 1)
MoveUp(area);
else if(current_direction == 2)
MoveDown(area);
else if(current_direction == 3)
MoveRight(area);
else if(current_direction == 4)
MoveLeft(area);
current_step--;
if(current_step < 0) current_step = 0;
}
current_wait--;
if(current_wait < 0) current_wait = 0;