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 13:47

Nex
Участник (+120, -130)
Зарегистрирован: 11.06.2007
Сообщений: 2053

---

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

Нечего страдать фигней

Неактивен

0    0    #3
26.03.2008 14:10

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

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

Нечего страдать фигней!

З.Ы. Зачем постоянно искать реальные кубики?

Неактивен

0    0    #4
26.03.2008 15:21

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

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

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

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

Неактивен

0    0    #5
26.03.2008 15:48

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

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

Hind написал:

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

Не пойдет.
3 кубика никак не смогут выдать число меньше 3, например.
Кроме того, кубик 2d3 и 3d2 - совсем-совсем разные в плане баланса.

Неактивен

0    0    #6
26.03.2008 16:15

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

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

Hind написал:

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

А почему 114, а не 100?

Неактивен

0    0    #7
26.03.2008 16:40

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

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

Тогда уж RND(N*6-N) + N. smile

А вообще странно, кому нужен этот анализ, если анимации все равно не видно? Вот, если бы выглядело как в игре "Ведьмак", то да.

Отредактировано - VampirE - (26.03.2008 16:45)

Неактивен

0    0    #8
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    #9
26.03.2008 17:06

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

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

А новость-то, меж тем, совсем не из мира IF.

Отредактировано Gesperid (26.03.2008 17:10)

Неактивен

0    0    #10
26.03.2008 17:25

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

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

Вероятности выпадения для каждого кол-ва очков одинаковы.

Вот это не так.

Спроси у D&D-шника на досуге, почему он предпочтет меч с уроном 6d4 мечу 4d6. smile

Неактивен

0    0    #11
26.03.2008 18:51

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

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

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

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

Неактивен

0    0    #12
26.03.2008 20:29

oleksus
адвентурист шестого дня
Откуда: Киевская Русь, г.Ирпень
Зарегистрирован: 10.02.2007
Сообщений: 149
Вебсайт

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

Gesperid написал:

А новость-то, меж тем, совсем не из мира IF.

Ну, точно. Это скорее в министерство финансов. Они такие проги любят.

Неактивен

0    0    #13
26.03.2008 20:44

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 795
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

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

Eten написал:

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

Eten, программа нужная. Порадовал. Спасибо. Я ее радостно скачал и опаньки - нету у меня Framework! Соответственно, не работает. Не, я могу скачать этот самый Framework. Но вот насчет того, что она маленькая, я как-то засомневался...

Аналогичную вещь с графикой  - вращающимися кубиками, правда в монохромном изображении, - мой друг Vladius писал на С (без всяких ++ и #) и занимала она килобайта так 3-5. Вместе с графикой. И при этом не требовала дополнительных библиотек. У меня к тебе претензий нет, каждый пишет на чем ему удобно - я бы такую вещь делал на URQ smile. Это просто вопль во Вселенную: Куды же мы катимся! Если для программы, имитирующей броски кубиков, мы качаем 20 мб библиотеку!
Грустно всё это. А программа нужная. Только я ее лучше на Питоне напишу - для смартфона. Будут кубики всегда под рукой. и Места будут занимать мало. Кто алгоритмом поделится?

Неактивен

0    0    #14
26.03.2008 20:52

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 795
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

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

oleksus написал:

Gesperid написал:

А новость-то, меж тем, совсем не из мира IF.

Ну, точно. Это скорее в министерство финансов. Они такие проги любят.

Это из мира RPG скорее (D&D и AD&D). Т.е. близкий друг ИФ. Минфин сюда отношения не имеет.

Неактивен

0    0    #15
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    #16
26.03.2008 21:01

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

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

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

Корв, да какой там алгоритм. Запускаешь генератор случайных чисел от 1 до N для M кубиков (схемка NdM) и складываешь полученные результаты...

Неактивен

0    0    #17
26.03.2008 23:29

oleksus
адвентурист шестого дня
Откуда: Киевская Русь, г.Ирпень
Зарегистрирован: 10.02.2007
Сообщений: 149
Вебсайт

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

Шо вы маетесь, уже сто лет как есть ПРОГА со всеми возможными видами игральных кубиков, которой пользуются в нужной ситуации. Есть ее версия и для мобильников и для кпк. Писать новую - разве что добавить просчитывание кубиков с отскоком от стенки (и для реалистичности можно несколько видов покрытия реализовать, каучук, пенопласт, дерево, ламинат.) tongue

Неактивен

0    0    #18
27.03.2008 06:18

uux
Участник (+884, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1624

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

Korwin написал:

Это просто вопль во Вселенную: Куды же мы катимся! Если для программы, имитирующей броски кубиков, мы качаем 20 мб библиотеку!

Эх... Офф-топ подкрался незаметно;). У меня было недавно такое же ощущение, когда свежекупленный МФУ-принтер потребовал скачать в качестве драйверов и сервисного софта ни много ни мало... 150 Мб с гаком! А я еще помню времена, когда вся операционная система (причем с гуём, не так чтоб сильно отставшем от современных мастдаев) в развернутом состоянии занимала меньше места...

Неактивен

0    0    #19
27.03.2008 10:07

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

---

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

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

.Net Framework 2.0, эта вещь с появлением Vist-ы скоро станет нормальным явлением, поэтому не вижу смысла писать на чем-нибудь другом для Windows. Прошу для обсуждения .Net Framework заводить другую тему, а не сорить здесь. smile

Korwin, эту херотен можно скачать с сайта MS или найти в журнале "Игромания" выпуск март 2007 (я покупал с двумя DVD), короче, там есть .Net Framework 3, вот его и ставь. Только работать он будет под Windows XP/Vista, ну а вторая включет в себя все предыдущие версии ОС и XP.

Смотрите на скриншот:http://lasoftgame.ru/images/GameCubes.JPG





Код алгоритма:

Код:

            //Очистка от устаревших сообщений
            panel.Text = "";
            //определяет случайное кол-во раз 
            //переворачивания игрального кубика
            Random rnd1 = new Random();
            //определеяет случайную грань игрального кубика
            Random rnd2 = new Random();
            //----------
            //кубик или несколько кубиков перед выдачей случайной грани
            //всегда переворачиваются в среднем от 10 до 30 раз. Номер грани 
            //соответствует выпавшему случайному числу.
            //Каждый кубик имеет шесть граней, поэтому произведение кол-ва 
            //на 6 и использование рандома от такого максимума не может дать
            //точно иммитации броска кубика
            //Т.к. кубиков может быть несколько, то у каждого может выпасть число 
            //принадлежащее отрезку [1,6], поэтому нужно бросать каждый кубик отдельно.
            //Также каждый кубик падая вместе с остальными, поворачивается разное кол-во раз
            //Учитывая все эти факторы можно в достаточной мере смоделировать реальный бросок кубика.
            //Что и делает данный алгоритм.
            //----------
            //массив кол-в переворотов кубиков до выпадения случ. числа
            int[] KolvoPerev = new int[(int)Cub.Value];
            //Т.о. обеспечиваем имитацию разного падения кубиков, 
            //т.е. каждый кубик переворачивается разное кол-во раз
            for (int i = 0; i < (int)Cub.Value; i++)
                  KolvoPerev[i] = 10 + rnd1.Next(20);
            //массив случ. чисел кубиков
            //Cub.Value - это выбранное кол-во кубиков
            int[] RandomChislo = new int[(int)Cub.Value];
            //сумма случ. чисел
            int SummRandomChislo = 0;
            //бросание кубиков
            //бросает каждый кубик по очереди и прибавляет его число
            //к сумме остальных.
            for (int i = 0; i < (int)Cub.Value; i++)
            {
                //бросаем кубик
                for (int j = 0; j <= KolvoPerev[i]; j++)
                    RandomChislo[i] = rnd2.Next(6) + 1;
                //суммируем случ. числа
                SummRandomChislo += RandomChislo[i];
            }
            //Вывод на экран информации о результате броска кубиков
            if (Cub.Value == 1)//если один кубик, то выводим только число
                panel.Text = SummRandomChislo.ToString();
            else
            {//иначе выводим числа всех кубиков и общее число.
                for (int g = 0; g < (int)Cub.Value; g++)
                    if (g == (int)Cub.Value - 1)
                        panel.Text += RandomChislo[g].ToString();
                    else
                        panel.Text += RandomChislo[g].ToString() + " + ";
                panel.Text += " = " + SummRandomChislo.ToString();
            }

Чего здесь явно не хватает, так это эвристического подхода. Т.е. учитывать еще и тот фактор, что на кубике цифры случ. образом на гранях определяются только перед броском. Дальше идет расчет случ. поворот в разных направлениях и учет на каких гранях стоят цифры 1, 2, 3, 4, 5, 6.
Если у меня будет учитан и этот фактор, только тогда можно сказать с уверенностью на 90%, все таки есть факторы в реальном броске зависящие только от самого человека и другие, которыми обычно пренебрегают, например сила броска и прочие ухишрения (такое имеет смысл учитывать в игре "Кости"), что данный алгоритм полностью моделирует рельный бросок, как одного кубика, так и нескольких сразу.

З.Ы.
Так, что с интересом посмотрю на проги, которые смогут это все реализовать и как минимум будут работать на PC.tongue

Неактивен

0    0    #20
27.03.2008 10:12

Nex
Участник (+120, -130)
Зарегистрирован: 11.06.2007
Сообщений: 2053

---

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

Немножко ещё оффтопа:
скриншот с криво обрезанными краями - это жесть. давно я такого не видел

Неактивен

0    0    #21
27.03.2008 10:19

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

---

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

Korwin, грубо округляя она весит 30 Кб. Программа реально малехонькая, это видно по ее алгоритму.\

А теперь ко всем, кому не лень парить мозги дискретным распз....(тьфу), ну в общем поняли чем. Не страдайте ребята фигней, а взгляните на приведенный выше алгоритм, как говорится все гениальное просто, но не простое гениально!
З.Ы.
Не обижайтесь на мой пост, но читая ваши посты в теме и глядя на приведенный алгоритм, действительно приходишь к выше описанной фразе (читайте жирно выделенное).wink

Неактивен

0    0    #22
27.03.2008 11:45

serval
Участник (-1)
Зарегистрирован: 15.01.2008
Сообщений: 22

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

Eten написал:

Чего здесь явно не хватает, так это эвристического подхода. Т.е. учитывать еще и тот фактор, что на кубике цифры случ. образом на гранях определяются только перед броском. Дальше идет расчет случ. поворот в разных направлениях и учет на каких гранях стоят цифры 1, 2, 3, 4, 5, 6

Еще нужно учесть вероятность выпадения кубика на ребро smile

Неактивен

0    0    #23
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    #24
28.03.2008 12:52

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

---

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

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

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

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

Заумными словечками и я могу говорить так, что говори проще, не усложняй понимание простых вещей.

Так, что, Hind, ТЗ здесь следующее: требуется сделать наиболее точную иммитацию броска кубиков, выдать выпавшее число на каждом кубике, число на кубиках не может выпадать хаотичным образом.

Говоря проще, если числа расположились при повороте куба 3,5,6, то не может вслед за 3 вылетить 2. Тут нужно учесть расположения чисел на  реальном игральном кубе. Вот тогда иммитация будет почти не отличимо от реального броска кубика. Некоторыми факторыми, а это: куб упал на ребро, сила броска и прочее, можно пренебречь, т.к. это сильно не повлияет на точность иммитации.

З.Ы.
Я уже в принципе додумал не достающую часть, но в выложенном мною алгоритме учтено много факторов потому, что мне нафиг не нужен тривиальный генератор случ. чисел, мне нужен нормальный иммитатор броска игрального кубика. big_smile

Отредактировано Eten (28.03.2008 12:53)

Неактивен

0    0    #25
28.03.2008 13:59

Nex
Участник (+120, -130)
Зарегистрирован: 11.06.2007
Сообщений: 2053

---

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

Это будет часть мега-платформы?

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru