Ну, во-первых, CStdLib.Rand - это не отличный PRNG. Однако я не знаю C ++ достаточно хорошо, чтобы знать, что лучше в мире C ++; Я бы посмотрел на PRNG, рекомендованные для криптографии. Это должно работать достаточно хорошо для большинства целей, не связанных с безопасностью.
Что еще более важно, вы не "посеяли" PRNG. Это не происходит автоматически, как это происходит со встроенными PRNG некоторых других языков, таких как .NET. Если он не высеян, то начальное число всегда будет постоянным (возможно, нулевым), и поэтому поток чисел, создаваемых алгоритмом PRNG, всегда будет одинаковым. Наиболее распространенное начальное число будет основано на текущем времени (предпочтительно с разрешением «тиков», поэтому трудно точно угадать, какая доля миллисекунды была получена вызовом); Другими хорошими источниками исходных данных являются положение курсора мыши, последний доступ к памяти ОЗУ или жесткого диска или действительно случайные данные, доступные с подключенного устройства (серверы для онлайн-казино часто имеют настоящие устройства RNG, которые предоставляют фактически случайные данные о среде который может быть использован для посева PRNG).