Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
26.03.2008 12:46

Eten
Участник (+9, -307)
Откуда: Балаково, Санкт-Петербург.
Зарегистрирован: 21.05.2007
Сообщений: 1416
Вебсайт

---

Виртуальные игральные кубики

Недавно написал маленькую, но полезную прогу, называется "Игральные кубики". Смысл программы, в следующем: вы выбираете кол-во кубиков от 1 по 20. И бросаете кубики.

Данная версия основана на рандоме, но усчетом факторов реального броска кубиков.

Данную прогу остается улучшить применив еще эврестический подход, для наиболее точно имитации броска игральных кубиков.

Скачать можно на этой странице: http://lasoftgame.ru/downloads.php?cat_id=5

З.Ы.
Знаю, что вы можете сказать: "Нечего страдать фигней" и т.д. Но лучше использовать электронную версию кубиков, чем постоянно искать реальные.

Неактивен

0    0    #2
26.03.2008 15:21

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Виртуальные игральные кубики

Нажимаем на любом калькуляторе RND и умножаем на разность верхней и нижней границы (например, на 114, если у нас 20  кубиков), округляем - вот и наши кости...

Неактивен

0    0    #3
26.03.2008 17:01

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Виртуальные игральные кубики

fireton написал:

3 кубика никак не смогут выдать число меньше 3, например.

Совершенно верно. Именно так и получится по моей формуле. Ну, конечно,  надо прибавить нижнюю границу, но это и без того ясно.
0 ≤ RND ≤ 1
Верхняя граница (с 3 кубиками) = 3 * 6 = 18
Нижняя граница = 3 * 1 = 3

3 ≤ RND * (18 - 3) + 3 ≤ 18
Вероятности выпадения для каждого кол-ва очков одинаковы.
Что не так?

Неактивен

0    0    #4
26.03.2008 18:51

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Виртуальные игральные кубики

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

Неактивен

0    0    #5
26.03.2008 20:59

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Виртуальные игральные кубики

Korwin написал:

Если для программы, имитирующей броски кубиков, мы качаем 20 мб библиотеку!

Не все так плохо, KRI будет занимать ненамного больше 100 КБайт, ничего не требуя. smile
Разве что GDI+, но в XP и выше он есть по умолчанию, а ниже можно установить (пакет весит ~900 КБайт).

Korwin написал:

Кто алгоритмом поделится?

А чего там делиться? Числа небольшие, решаем в лоб. Псевдокод:

Код:

score = 0;
for (i = 0; i < n; i++) // n - число бросков кубика (ну или число кубиков)
score += 1 + 5 * random(); // Где random - функция, возвращающая случайное число от 0 до 1

Неактивен

0    0    #6
27.03.2008 12:24

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Виртуальные игральные кубики

Eten написал:

Hind, а где ты увидешь на кубиках дубль, если у тебя только одна цифра будет?

Блин, значит будем очки на каждом кубике в массив пихать, один шут. В ТЗ ничего не было о необходимости выводить очки по каждому кубику. Вообще, короче - ТЗ не было.

И еще, Eten, откройте для себя Alt + Print Screen.
Что касается вашего алгоритма, то это вообще смешно - никакой разницы вот с этим нет, вы просто делаете лишние вычисления:

Код:

int score = 0;
int * dice = new int[n];

for (int i = 0; i < n; i++)
{
dice[i] = 1 + 5 * random();
score += dice[i];
}

...

delete [] dice;

Для реального кубика - дискретное равномерное распределение. Не углубляясь в "случайность" сишного рандома, скажу, что для вышенаписанного кода распределение именно таково. У вашего - не знаю, это проще увидеть на графике.

Неактивен

0    0    #7
28.03.2008 16:44

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Виртуальные игральные кубики

Я же писал:

Где random - функция, возвращающая случайное число от 0 до 1

Имелось в виду, принадлежащее отрезку [0, 1].
Разумеется, если вы хотите использовать сишную функцию, нужно курить ее описание.

Eten, у вас очень большая проблема - вы считаете "заумные слова" ничего не значащими, а между тем это часть терминологии теории вероятностей, имеющая точные и четкие определения и совершенно обоснованно здесь мной используемая.

Неактивен

0    0    #8
28.03.2008 23:09

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Виртуальные игральные кубики

Eten написал:

Когда выложишь нормальный код, тогда и приму твои заверения.

Да... Тут явно не о чем говорить - уровни подготовки несопоставимы.

Неактивен

0    0    #9
29.03.2008 19:22

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Виртуальные игральные кубики

fireton написал:

Но если задачей ставится именно достоверная имитация броска набора кубиков, то обычным рандомом не обойдешься.

Но ведь достоверная имитация броска кубиков - задача, мягко говоря, другого порядка сложности при отсутствии готового физического движка. Никто с этим и не спорит, просто то, что предложил Eten, для игрока ничем не отличается от моего варианта (специально частотные диаграммы построил), а работает не столь эффективно.

Неактивен

0    0    #10
29.03.2008 20:51

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Виртуальные игральные кубики

Eten написал:

А где ты их выложил? Уж очень интересно посмотреть

А нафига? Они ничего не докажут сами по себе - всегда можно сказать, что я их нарисовал от фонаря. Кому нужно - тот сам построит, да не забудьте взять число бросков побольше - хотя бы миллион.

Вот реализация моего алгоритма на C:

Код:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    srand((unsigned)time(0));
    int n = 1000000;
    int num = 0;
    int dice[6] = {0,0,0,0,0,0};
    for (int i = 0; i < n; i++)
    {
        num = rand() % 6;
        dice[num]++;
    }
    printf ("%d\n%d\n%d\n%d\n%d\n%d", dice[0], dice[1], dice[2], dice[3], dice[4], dice[5]);
}

Программа выдает список количества выпаданий для каждой стороны кубика.
Если так интересно, график тут.
Можешь сравнить со своим - отличий за пределами погрешности не будет.
Ну, наверное, уже все понятно, да?

Отредактировано Hind (29.03.2008 20:53)

Неактивен

Powered by PunBB
© copyright 2001–2026 iFiction.Ru