2010-03-20 3 views
2

Я трюк, чтобы создать случайную ценность для моей игры, чтобы показать врагам на экране. Но это несколько раз показывают 2 вместе несколько раз 3 ... Я хочу спросить, что является лучшей FORMUL для создания случайного значения .. Это моя до сих пор случайной величинаКаков наилучший способ создания случайного значения?

random = 1 * (int) (Math.random() * 100); 
+1

@Meko: но вы * действительно * Требуется (псевдо) случайных? Для конечных пользователей иногда «поддельный случайный» дает лучшую «случайную иллюзию», чем истинный случайный. Таким образом, вы можете * отказаться от, например, псевдослучайного значения, указанного в * случайном *, который слишком близок к * lastrandom * (который вы будете отслеживать). Например, возможны три аннуитета, которые случайно появляются на экране (173,173) (хотя это маловероятно), но пользователь может предпочесть его, если в вашей игре была защитная сетка, предотвращающая «следующий случайный» от менее 20 пикселей от последнего случайного значения ... – SyntaxT3rr0r

ответ

2

Вы можете использовать java.util.Random:

Random random = new Random(); // uses System.nanoTime() as seed 
int enemies = random.nextInt(100); 

В любом случае, ваш подход также прекрасен, так как он фактически эквивалентен (за сценой) выше.

Вы можете напечатать последовательность из 100 случайных чисел, сгенерированных вашим путем, и убедиться, что проблем нет.

2

Что вы используете, если прекрасно.

В случае, если вы хотите что-то проще, вы хотели бы использовать Random класс как это:

Random generator = new Random(seed); 
int number = generator.nextInt(100); 
3

На самом деле создание подлинно случайных случайных чисел является сложная игра в своем собственном праве. Статья Wikipedia на эту тему даст вам представление о сложности, которая лежит в ней. Простые аппроксимации, такие как описанные выше, вероятно, достаточны для игровых целей, но, надо заметить, склонны быть «полосатыми» время от времени.

5

«но он несколько раз показывают 2 вместе несколько раз 3»

Учитывая совершенно случайные числа ... В каждых 100 случайных значениях от 0 до 99, вы найдете в среднем 1,0 двойников. Трижды будет происходить в среднем один раз за каждые 10000 значений. Учитывая 10 миллионов случайных чисел, java.util.Random yeilds следующие результаты на моей машине:

Doubles: 99873 
Triples: 985 

Double Rate: 1 in 100 
Triple Rate: 1 in 10152

Исходный код:

import static java.lang.System.*; 

import java.util.Random; 

public class Sandbox { 
    public static final int NUM_ITERATIONS = 10000000; 
    public static void main(String[] args) { 
     Random rand = new Random(); 

     int cur; 
     int last = -1; 
     int secondLast = -2; 
     int nDoubles = 0; 
     int nTriples = 0; 

     for (int i = 0; i < NUM_ITERATIONS; i++) { 
      cur = rand.nextInt(100); 
      if (cur == last) { 
       nDoubles++; 
       if (cur == secondLast) nTriples++; 
      } 
      secondLast = last; 
      last = cur; 
     } 

     out.println("Doubles: " + nDoubles); 
     out.println("Triples: " + nTriples); 
     out.println(); 
     out.println("Double Rate: 1 in " + Math.round(1.0 * NUM_ITERATIONS/nDoubles)); 
     out.println("Triple Rate: 1 in " + Math.round(1.0 * NUM_ITERATIONS/nTriples)); 

     exit(0); 
    } 
}
Смежные вопросы