[英]How to make a member function of a class in C++ generate a different random number each time it is called?
[英]How to get a different random number in c++ with each class initialization
我有一個名為Slime的敵人職業,每個黏液都沿着路徑移動(就像塔防游戲),並且我試圖獲得一個隨機數(它將告訴黏液何時更改路徑更改方向)。 但是我嘗試使用3個Slimes來嘗試,它們最終都具有相同的隨機數。 我的敵人的班級中包含以下代碼,以生成x和y的隨機數:
Enemy::Enemy(Level* level, float x, float y, float speed, int direction, int width, int height)
:
Entity(level, x, y, width, height), // Each enemy is an entity
speed(speed),
direction(direction)
{
srand((unsigned)time(0));
rangeX = (level->GetTileWidth() * level->GetScale() - width * level->GetScale()) - (width * level->GetScale()) + 1;
rangeY = (level->GetTileHeight() * level->GetScale() - height * level->GetScale()) - (height * level->GetScale()) + 1;
randNumX = (rand() % rangeX) + (width * level->GetScale());
randNumY = (rand() % rangeY) + (height * leel->GetScale());
}
每當我創建一個新的Slime對象時,就會調用該代碼。 我正在測試三種不同的粘液,它們都給我相同的隨機數。 當我重新啟動它時,它們的編號與原始編號不同,但是所有三個史萊姆仍然具有相同的隨機數。 難道我做錯了什么? 我應該在該課程之外播種蘭特,以便只調用一次嗎? 而rangeX和rangeY只是在路徑內給了我一個數字,因此沒有敵人在草地上或在路徑上徘徊。
每次創建新的Slime對象時,您會將rand()重新播種為相同的值。 這意味着rand()為每個Slime產生相同的數字。
如果僅在程序開始時(在主程序中)對rand()進行一次播種,則將獲得不同的值。
丟掉srand((unsigned)time(0));
。 當前線程第一次啟動時,僅執行一次。
如果確實需要每個對象都包含自己的隨機數生成器,則可以為每個對象配備實現此類隨機數生成器的類的實例,或者自己滾動; 您將在這里找到一些好主意: https : //stackoverflow.com/a/1640399/773113
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.