Я уверен, что я делаю что-то неправильно; но это уже немного смутило меня.
Я сделал небольшую игру Silverlight (старый клон Galaxian). Когда игра начинается ~ 90% времени, в игровой зоне случайно помещается куча звезд. Есть три типа звезд - более крупные звезды быстрее, маленькие звезды двигаются медленнее.
Он выглядит следующим образом:
~ 10% времени, когда все звезды появляются в "полосах",
Я думаю, стоит упомянуть, что хотя они и в узких полосах; они не все в одном и том же положении. Таким образом, он все равно генерирует случайное число - просто крошечное.
Чтобы воспроизвести ошибку, я просто ударил 'f5' в браузере. Почти все время он работает так, как ожидалось. Редко, я получаю группы. Еще раз нажмите "F5", чтобы устранить проблему.
Без публикации гигантской стены кода; Я думаю, что это самый подходящий код. Он появляется в классе Base, из которого унаследованы все мои звезды. Он называется один раз, когда каждая звезда создается.
Protected Sub SetInitialPosition()
myElipse.Height = GetStarSize()
myElipse.Width = GetStarSize()
_location.X = GetRandom.Next(-1 * Settings.StarEdge, CType(GameCanvas.Width, Integer) + Settings.StarEdge)
_location.Y = GetRandom.Next(0, CType(GameCanvas.Height, Integer))
myElipse.Fill = New SolidColorBrush(GetStarColor)
End Sub
Я не вижу ничего плохого. GetRandom() возвращает класс Singleton Random, и я в зависимости от GameCanvas.Height и GameCanvas.Width действителен, но опять же .Width работает точно так, как ожидалось.
Есть ли у кого-нибудь потенциальное объяснение этого поведения? Есть ли какие-либо проблемы, которые нужно отслеживать при генерации случайных чисел? Каждый раз, когда я просматриваю код, все в порядке, и игра работает так, как ожидалось.
Если это поможет, я могу опубликовать ссылку на игру.
(http://robdude.weebly.com/cci.html)
РЕДАКТИРОВАТЬ # 1:
Вот код из GetRandom()
Protected Shared Function GetRandom() As Random
If _random Is Nothing Then _random = New Random()
Return _random
End Function
РЕДАКТИРОВАТЬ № 2: Я действительно ценю любые мысли/советы по этому поводу.