Странное поведение при ничьей - PullRequest
0 голосов
/ 22 февраля 2011

В моей игре xna у меня есть метод создания сундуков с сокровищами в случайных местах на карте.Дело в том, что он притягивает их всех в одном месте.Случайный не генерирует уникальные случайные числа для точек v3.Тем не менее, если я отлаживаю и прошагаю по методу, он работает отлично.

void CreateTreasure()
    {
        for (int i = 0; i < 20; i++)
        {
            Random random = new Random();
            Treasure t = new Treasure(new Vector3((float)random.Next(0, 600), 0, (float)random.Next(600)));
            treasureList.Add(t);
        }
    }

, а при прорисовке я перебираю

foreach (Treasure t in treasureList)
        {
            DrawModel(treasure, Matrix.Identity * Matrix.CreateScale(0.02f) * Matrix.CreateTranslation(t.Position));
            PositionOnMap(ref t.Position);
        }

PositionOnMap просто занимает позицию и настраивает Y назаставить модели сидеть на карте высот.Есть мысли?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

Вам нужно переместить Random за пределы вашего цикла. Прямо сейчас он будет каждый раз создавать новый случайный экземпляр. Поскольку начальное значение по умолчанию основано на времени, если это происходит быстро, первый вызов Next () всегда будет возвращать одно и то же значение. Попробуйте это:

void CreateTreasure()
{
    // Just move this outside, so each .Next call is on the same instance...
    Random random = new Random();
    for (int i = 0; i < 20; i++)
    {
        Treasure t = new Treasure(new Vector3((float)random.Next(0, 600), 0, (float)random.Next(600)));
        treasureList.Add(t);
    }
}
2 голосов
/ 22 февраля 2011

создайте случайное значение вне вашего цикла и используйте только следующее внутри, также используйте случайное начальное число для инициализатора, например:

var random = new Random(Guid.NewGuid().GetHashCode());
...