-14 / 0 / 0
Регистрация: 26.02.2022
Сообщений: 18
1

Рандомайзер с шансом

19.03.2022, 08:22. Показов 1741. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я создаю свою игру. И вот пришла задача сделать рандомайзер. Но сам рандомайзер должен быть сложным, тоесть какие то штуки должны выподать редко. Я знаю что есть rand(), но нужно чтобы допустим цифра 5 выводилась на экран с шансом 5%. Или просто выводилась редко. Так вот как это можно реализовать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2022, 08:22
Ответы с готовыми решениями:

Игра с шансом 50/50
Необходимо написать код программы dragon = { 'hp': 2000, # жизненная энергия, запас...

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

Выдача элементов с заданным шансом
Здравствуйте. Такой вопрос, есть 6 элементов , каждому из этих элементов задается % выпадения ,...

Выпадение переменных с указанным шансом
Есть 10 переменных с значениями выигрыша .Как сделать чтобы они выпадали с указанным для них ...

Вывести из базы 1 строку с шансом
У меня есть такой запрос SELECT * FROM `prizes` WHERE `caseid`='{$id}' AND `winner`='0' ORDER BY...

5
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
19.03.2022, 09:22 2
В лоб: bool ok = (rand() % 100) < 5;
2
2 / 1 / 1
Регистрация: 18.03.2022
Сообщений: 3
19.03.2022, 09:23 3
Лучший ответ Сообщение было отмечено Bekamir как решение

Решение

Интересно, можно как-то криво так реализовать:
C++
1
2
3
4
5
int a;
a = rand() * rand() % 100; // чтобы чаще и сложнее менялось, сделал rand() * rand()
if (a < 5) { // % - это целочисленное деление, возвращающее остаток, от 0 до 99 
    drop(); // некая функция, которая должна сделать необходимое
}
Если нужно от 1 до 100, то:
C++
1
2
3
4
5
int a;
a = rand() * rand() % 100 + 1; // вот тут разница, теперь значения не 0-99, а 1-100
if (a <= 5) { // но тогда и тут знак не меньше, а равно или меньше
    drop();
}
Но есть решение выше, более красивое и краткое
1
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
19.03.2022, 14:36 4
Bekamir, Что-то такое надо?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <vector>
#include <random>
#include <unordered_map>
 
int main()
{
    std::locale::global(std::locale("Rus"));
 
    std::vector<std::string> names = { "совсем фигня", "немного полезная фигня", "офигенный лут" };
    std::vector<double> chances = { 80.0, 19.0, 1.0 };
 
    std::default_random_engine re(std::random_device{}());
 
    std::discrete_distribution dd(chances.begin(), chances.end());
 
    std::unordered_map<int, int> map;
 
    const int count = 10000;
 
    for (int i = 0; i < count; ++i)
    {
        ++map[dd(re)];
    }
 
 
    std::cout << "Выпало из " << count << " испытаний:" << std::endl;
    for (const auto& x : map)
    {
        std::cout << names[x.first] << " : " << x.second << " раз (" << 1.0 * x.second / count * 100 << "%)" << std::endl;
    }
}
1
-14 / 0 / 0
Регистрация: 26.02.2022
Сообщений: 18
25.03.2022, 14:43  [ТС] 5
Спасибо вам

Добавлено через 6 минут
как ответить пользователю здесь?(как бы это странно не звучало) Я просто новенький
0
4765 / 2575 / 892
Регистрация: 29.11.2010
Сообщений: 5,566
26.03.2022, 01:38 6
Если вы реально собрались делать игру, то помните -- человеческий мозг совершенно не умеет в вероятности. )
В игроделе принято хитро подсуживать игроку, чтоб игра казалась более "честной".
Создавать такие "интуитивно честные случайности" -- довольно интересная тема.
0
26.03.2022, 01:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2022, 01:38
Помогаю со студенческими работами здесь

Рандомная запись с заданным шансом из другой таблицы
Доброго. Есть 2 таблицы, хранящие следующие данные: items: case_in:

Рандомный выбор элемента массива с определённым шансом
Есть массив string names = new string { &quot;Александр&quot;, &quot;Алексей&quot;, &quot;Анатолий&quot; }; Задача: Нужно...

Случайное число, с шансом выпадения после 20 меньше, чем до 20
Как сделать к примеру: рандом от 1 до 100. Что бы шанс выпадения после 20 был меньше, чем до 20?

С каким минимальным шансом должно выпадать оружие из каждого сундука?
В игре проводится акция в которой каждый игрок получает 10 сундуков. Из каждого сундука игрок...

Рандомайзер
Как можно реализовать максимально рандомный рандомайзер от 0 до 32767 через rand() Пробовал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru