Адептус Механикус


Пн Дек 21, 2020 13:01
Mathematicus
85  Свободный искатель

"Поэт должен видеть то, чего не видят другие. И это же должен и математик"
Софья Ковалевская

===

Итак, сегодня я создал короткую стори- перемешивание массива 10 чисел.

Вот ссылка на тестирование: (убрана по техническим причинам)

Сб Дек 26, 2020 18:00
Mathematicus
85  Свободный искатель

Итак, про перемешивание массива:

1. Для чего это нужно?

Cамое очевидное применение – перетасовка карт, но так же и расстановка чего угодно в случайном порядке. Несколько примеров:
а) Если 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 заметно короче и, главное – значительно упростит возможное расширение массива, если оно понадобится.

Вт Янв 26, 2021 18:32
Mathematicus
85  Свободный искатель
По не ясным причинам митрил меня вдохновил и у меня есть идеи для реализации. Я пытаюсь упорядочивать свою жизнь: составлять планы и следовать им. Согласно последнему плану, я буду посвящать каждый третий месяц написанию очередной текстовой игры. Так вот – в январе я профилонил и, по всей видимости, игры не будет. В феврале и марте я не буду заниматься играми. В связи с этим, хочу поделиться своей задумкой, которую собирался реализовать(и может быть, когда-нибудь, таки реализую).
===


Хотел сделать стори, вдохновлённую Песками Магриба Магистра Таро. Идея получилась совершенно другой, но это таки должен был быть сторигейм на картах, который может быть интересен и самому автору(в этом основная фишка).
===

Герой нашей истории, сихр Абдул аль-Хазред живёт в Ирэме, у пустыни Руб-эль-Хали, населённой злыми духами. Будучи практикующим сихром, Абдул владеет магией. А именно – умеет перетасовывать Карты Судьбы.

Сегодня наш герой, как обычно, отправляется исследовать пустыню, в поисках остатков часто гибнущих здесь караванов(чтобы разжиться сокровищами), а так же – в надежде найти редкие артефакты, которые непонятно откуда появляются в этих местах.

Ночь в этой пустыне несёт верную смерть, поэтому на весь поиск у вас всего 16 часов, после чего Абдул вернётся домой.
===

Перед вами – карточная игра в приключения. В каждом раунде Мастер Игры предлагает вам выбрать одну из трёх верхних карт – то, до чего вы можете добраться, потратив 1, 2 или 3 часа соответственно.

Поскольку вы не можете находиться в пустыне дольше 16 часов, то при истечении времени ваш выбор будет сокращаться, оставляя только те варианты, которые укладываются по времени. То есть, если до конца приключения остался один час, то будет доступна только одна первая карта за -1 час.
===

Вы выбираете карту и попадаете в некоторую ситуацию, в которой может быть как простое получение/потеря чего-либо, так бывают и ситуации выбора. Выбранная(и разыгранная) карта выходит из игры. Другие две карты кладутся под низ колоды, в которой изначально 35 карт.

Рубашки карт различаются и соответствуют "мастям" карт. Причём, их довольно много – я думал сделать семь мастей, при колоде в 35 карт всего.

Как игрок, вы видите три предлагаемые вам карты, видите их масти, но не видите, что конкретно это за карты. И знаете, что взятие первой карты -1 час; второй -2 часа; третьей -3 часа. Кроме того, вам доступно перемешивание карт(и вот, с этим нужно ещё дотумкать: должно ли на перемешивание тратиться время? Должно ли тратиться что-то ещё?)

===

Абдул аль-Хазред – легендарный автор Некрономикона из мифов Лавкрафта. Оттуда же и город Ирэм и пустыня Руб-эль-Хали.

Представьтесь для добавления комментариев - регистрация в один клик!