Адептус Механикус
Пн Дек 21, 2020 13:01
- Доступные действия:
Mathematicus
76
Свободный искатель
"Поэт должен видеть то, чего не видят другие. И это же должен и математик"
Софья Ковалевская
===
Итак, сегодня я создал короткую стори- перемешивание массива 10 чисел.
Вот ссылка на тестирование: (убрана по техническим причинам)
Сб Дек 26, 2020 18:00
- Доступные действия:
Mathematicus
76
Свободный искатель
Итак, про перемешивание массива:
1. Для чего это нужно?
а) Если 4 союзника и 6 врагов должны сделать в раунде по одному ходу, в случайном порядке.
б) Если вы хотите создать подземелье 5х5 пещер, в котором нужно расположить ровно одного Вампуса, ровно две колонии Супер-Летучих-Мышей и ровно три глубокие ямы, причём так, чтобы ничто из этого не накладывалось ни друг на друга ни на центральную пещеру(точку входа игрока), ни на 4 пещеры, соседних с центральной – тогда тасуете 20 "карт", и заполняете ими подземелье(кроме центральных полей).
в) Если вы хотите, чтобы 7 характеристик вашего героя имели все значения от 1 до 7, в случайном порядке(например, Сила=7, Восприятие=5, Выносливость=3, Харизма=6, Интеллект=4, Ловкость=2, Удача=1) и чтобы игрок мог сколько угодно делать их "реролл".
— возможных применений просто ну ОЧЕНЬ много.
2. Алгоритм, простыми словами.
а) В массиве из N ячеек обмениваем значения первой ячейки и случайно выбранной(от 1 до N).
б) Повторяем алгоритм для оставшейся части массива(кроме уже обработанной ячейки), до тех пор, пока эта оставшаяся часть не меньше двух ячеек.
3. Тонкости реализации на митриле, для продвинутых.
Swap(n, m) {local: k, l}
(n,m) – номера ячеек, которые функция обменяет местами
{local: k, l} – другие переменные, которые затрагивает эта функция
= = =
RandFromRange(n, m) {local: k, return r} // m > n
(n, m) – диапазон, из которого будет выбрано случайное число от n до m
{local: k, – вспомогательная переменная, которую затрагивает эта функция
return r} – переменная, в которую будет помещено сгенеренное число
= = =
Shuffle(array a() from i to 10) {}
– собственно, перемешивание массива от элемента i и до конца. Она использует обе вышеобозначенные функции и затрагивает различные переменные, которые я уже не стал упоминать.
= = =
Менее очевидно, но вовсе не менее важно – создать функции:
Get(n from a) {return r} – поместить значение ячейки a[n] в переменную r
Set(r to a[m]) – поместить значение переменной r в ячейку a[m]
– их использование позволит сделать функцию Swap заметно короче и, главное – значительно упростит возможное расширение массива, если оно понадобится.
-
Книго-игровые марафоны
- Киберпанк: Тени Найт-Сити
- Время решений
- Падшие ангелы
- Зиккурат Ленина
- Зловещие тропы Алмана
- Рандеву
- Корона королей
- Герои
- Небо над Бангкоком
- Каслевания: Битва в старом замке
- Рыцарь живых мертвецов
- Кольца злобы
- Око Сфинкса
- Мадам Гильотина
- Турнир юнлингов
- Политический отбор
- Хачиманский марафон
- Преддверие
- Идущие на смех
- Убийство в клубе Диоген
- Марафон безумного переводчика
- Рок-марафон
- Болотная лихорадка
- Проклятие замка «Пяти башен»
- Подземелья замка кошмаров
- Джунгарское нашествие
- Марафон
- МАКИМ
- МАКИМ
- Книго-игровой марафон 2014
- МАКИМ
-
Конкурсы
-
Обсуждение форумных РПГ
-
Большой Адронный Коллайдер
-
Утилиты для помощи ДМам
-
Безвременье
-
События и мероприятия