Потребность в предсказуемом случайном генераторе

Я видел много ответов, предлагающих использовать

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" +  Environment.getExternalStorageDirectory())));

. Это работает, но заставляет Сканер мультимедиа повторно сканировать мультимедиа на устройстве. Более эффективный подход будет заключаться в запросе / удалении через провайдера контента Media Store:

// Set up the projection (we only need the ID)
String[] projection = { MediaStore.Images.Media._ID };

// Match on the file path
String selection = MediaStore.Images.Media.DATA + " = ?";
String[] selectionArgs = new String[] { file.getAbsolutePath() };

// Query for the ID of the media matching the file path
Uri queryUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
ContentResolver contentResolver = getContentResolver();
Cursor c = contentResolver.query(queryUri, projection, selection, selectionArgs, null);
if (c.moveToFirst()) {
    // We found the ID. Deleting the item via the content provider will also remove the file
    long id = c.getLong(c.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
    Uri deleteUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
    contentResolver.delete(deleteUri, null, null);
} else {
    // File not found in media store DB
}
c.close();
151
задан 6 revs, 5 users 40% 9 April 2016 в 18:25
поделиться

37 ответов

Так и должно быть, это вероятность, не стоит ожидать критического попадания 1 балл каждые 5 битв .. попробуйте с монеткой или кубиком и убедитесь сами. Но это только я. ГБ

0
ответ дан 23 November 2019 в 22:12
поделиться

Как многие говорят, это действительно проблема с тем, что «случайное». Результаты, которые вы получаете, случайны, и независимо от того, как вы делаете игру, некоторые игроки будут считать, что ваш счетчик нечестный и не случайный. ;)

Один из возможных вариантов - гарантировать попадание каждые n раз и генерировать n случайным образом в определенных границах после каждого попадания. Все дело в том, что «чувствуется» правильным при тестировании.

0
ответ дан 23 November 2019 в 22:12
поделиться

Для генераторов случайных чисел C ++ используйте rand или boost :: random

Каждый раз, когда игрок получает удар, вы просто проверяете, есть ли случайное число в [0; 1] меньше 0,2. Это означает, что кто-то не может получить критических попаданий в 15, но это маловероятно.

Это даст вам естественные случайные числа в соответствии с законами биномиального распределения (p = 0,2)

-2
ответ дан 23 November 2019 в 22:12
поделиться
static int crit = 0;

public bool isCritical()
{
   crit = crit++ % 5;
   return (crit==0);
} 

if you still want some randomness, alter the modulus using another static variable each time a crit is performed. varying it will equal probability from 3 to 7 should keep the average time between crits at 1 in 5, but never less than 3 or more than 7 hits between them.

-4
ответ дан 23 November 2019 в 22:12
поделиться

Проблема с бозо-сортировкой в том, что она может длиться вечно.

-1
ответ дан 23 November 2019 в 22:12
поделиться

Я тоже пытался решить эту проблему. Лучшее, что я мог придумать, - это динамическое изменение вероятностей чисел на основе того, как часто они появлялись в ближайшем прошлом. Что-то вроде (для кубика в Matlab):

probabilities = [1 1 1 1 1 1];
unrandomness = 1;
while true
    cumprob = cumsum(probabilities) ./ sum(probabilities);
    roll = find(cumprob >= rand, 1)
    probabilities = probabilities + unrandomness;
    probabilities(roll) = probabilities(roll) - 6*unrandomness;
    if min(probabilities) < 0
        probabilities = probabilities - min(probabilities);
    end
end

Извините за отсутствие отступов. Параметр неслучайности можно настроить по желанию. Истинный случайный вывод (неслучайность = 0):

2 3 1 1 4 1 3 3 4 5 1 5 5 2 6 1 1 1 6 1 1 3 5 6 6 1 4 2 4 6 3 6 5 1 1 6 2 5 6 4 3 5 2 4 6 5 5 5 4 4 3 4 1 2

неслучайность = 1:

3 2 4 5 6 2 6 2 4 1 5 5 1 6 4 3 1 4 2 1 3 2 6 5 3 6 5 3 1 4 1 6 5 3 4 2 1 6 5 4 1 4 3 1 6 6 5 4 3 1 5 2 3 2

Думаю, выглядит лучше. Особенно, если вы нанесете промежутки между числами.

0
ответ дан 23 November 2019 в 22:12
поделиться

Я думаю, вам нужно сгенерировать случайные числа из распределения Пуассона.

0
ответ дан 23 November 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: