что делать рандомный ответ
Большая книга предсказаний: задайте вопрос и откройте на случайной странице
Большая книга предсказаний: задайте вопрос и откройте на случайной странице. Перед вами волшебная книга с советами и предсказаниями. Это это довольно своеобразный источник мудрости, содержащий множество ответов на те вопросы, которые интересуют каждого человека в определенные моменты его жизни.
Предлагаем вашему вниманию безопасный способ гадания, которым очень любили пользоваться ещё наши прабабушки… Перед вами волшебная книга с советами и предсказаниями. Это это довольно своеобразный источник мудрости, содержащий множество ответов на те вопросы, которые интересуют каждого человека в определенные моменты его жизни. Вам необходимо закрыть глаза, загадать желание или сформулировать вопрос и открыть книгу на случайной странице. Готовы? Тогда поехали! Итак откройте книгу на одной из страниц. Закройте глаза и выберите номер страницы.
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. Придется срочно искать выход из кризиса и перестраивать свою жизнь. Со временем тревоги останутся позади.
33. Тормозом на данное время является недоверие к себе и окружающим. Период застоя.
34. Ваши мечты далеки до завершения. Ухудшение положения. Надо потратить больше усилий, чем вы предполагали.
35. Очень много противоречий. Если будете слишком рьяно добиваться желаемого, упустите достигнутое ранее.
36. Ваше удачное продвижение и успехи могут вызвать зависть. Дальше сплетен это не пойдет.
37. Все свои расходы возьмите под контроль, иначе будете жалеть о зря потраченных деньгах.
38. Добавьте к желанию инициативу, предприимчивость, самостоятельность — и у вас все обязательно получится.
39. Получите нужные известия.
40. Ваши планы будут исполняться прямо пропорционально затраченным времени и силам.
41. Надо применить обходные пути и постараться не торопить ход событий.
42. Период неопределенности. Наметьте конкретный план предполагаемых действий и старайтесь следовать ему.
44. В ближайшем будущем не будет особых волнений. Все дела ясны, все планы исполнимы.
46. Желание исполнится, если вы будете достаточно скромны в своих требованиях.
47. Поездка или путешествие внесут нужные коррективы в ваши планы. У вас появится возможность быстрого продвижения вверх по социальной лестнице.
48. Вы получите все благодаря усердию, трудолюбию, дисциплине и поддержке судьбы.
49. Доверьтесь жизни, плывите по течению, и река сама принесет вас к нужному месту.
50. То, что вызовет в вас неуверенность и опасение, в дальнейшем обернется благом.
51. События будут развиваться быстрее, чем вы ожидаете. Возможно, они застанут вас врасплох.
Читайте также: 7 фактов, которые вы обязаны знать о своей группе крови
52. Ваше восприятие действительности несколько искажено. Пока вы не в состоянии увидеть скрытую сторону событий.
53. Полоса приятных неожиданностей, которые будут следовать одна за другой.
54. В вашу жизнь войдут новые люди, которые станут преданными друзьями или коллегами.
55. Вас ожидают стечение счастливых случайностей и рост материального благосостояния.
56. Ваши способности и трудолюбие будут оценены по достоинству. Возможность поощрения, карьерного роста и выгодного сотрудничества.
57. Столько будет забот и хлопот, что практически не остается времени на что-то другое.
58. В вашей душе царит хаос, который может стать причиной помех в делах и начинаниях.
59. Проявите выдержку и самообладание, так как старые противоречия внезапно вырвутся наружу.
60. Можете упустить шанс из-за собственного легкомыслия либо неверия в свои силы.
61. Исполнится желаемое или нет, зависит от вашей самодисциплины. Составьте план действий и следуйте графику.
62. Взгляните на свою жизнь как бы со стороны — благодаря этому вы обретете верный взгляд на многие вещи.
63. Измените себя, и изменится мир вокруг вас. У вас появится новый взгляд на жизнь.
64. Будете слишком зависимы в своих намерениях от других людей, особенно от тех, кто имеет власть.
65. Лишние тревоги и волнения из-за соблазнов, интриг, пустых разговоров и споров.
66. Положитесь на судьбу и уповайте на Бога. Доверьтесь естественному ходу жизни.
67. Вы тратите много энергии и сил впустую. Постарайтесь правильно распределять свою активность.
68. Ситуация сложится двояким образом. Попытайтесь правильно сориентироваться.
69. Есть повод задуматься о том, какие люди вас окружают. Будьте внимательны в делах и не рассказывайте никому о своих планах и успехах.
70. Не хитрите сами с собой: вы уверены, что то, что вы затеваете, действительно не причинит никому вреда? Если такой уверенности нет, ситуация обещает быть благополучной.
71. Хороший момент для укрепления вашего авторитета. Возможность получить поощрение или награду.
72. Вашим планам суждено сбыться, если вы не будете перекладывать свою ответственность на чужие плечи.
73. Возможность больших и маленьких побед. Вы будете довольны вкусом успеха.
74. Ваши затеи имеют мало шансов на исполнение, так как противоречат желанию других.
75. Ваши дела будут решаться легко и быстро, без больших усилий и затрат с вашей стороны.
76. Перемены неизбежно затронут, а может, и перевернут вашу жизнь. Грядущие события помогут начать новый этап жизни. Внутренние разногласия будут преодолены.
Читайте также: 10 вещей, которые меняются после смерти одного из родителей
77. Ваши заботы не займут в жизни большого места. Появятся новые увлечения и новые знакомства.
78. Больше доверяйте своему сердцу и интуиции — они подскажут вам нужные пути к заветной цели.
79. Предстоит полоса потерь и испытаний. Соберите свою волю в кулак и переждите разрушительный ветер.
80. Перспективы у вас самые радужные. Вы чувствуете вдохновение — и к вам приходит успех.
81. Ситуация стабильна. Вы на правильном пути. Доведите свои планы до конца и беритесь за новые.
82. Если ваши ум и душа действуют в согласии друг с другом, вы добьетесь многого.
83. Судьба любит время от времени устраивать испытания тем, кому она покровительствует. Настало ваше время.
84. Сумеете извлечь и сиюминутную, и долгосрочную выгоду. Удача в материальных делах.
85. Держите себя в руках и не позволяйте эмоциям захлестнуть вас — это главное условие благополучного завершения планов.
86. Перед вами откроются новые перспективы и новые горизонты, прежде невидимые и недостижимые.
87. Вас ожидает успех, обретенный легко и без усилий. Результат вас удивит и порадует.
88. Действуйте упорно, уверенно, настойчиво, и все преимущества будут на вашей стороне.
89. Вы живете в мире иллюзий и строите воздушные замки, но у судьбы не хватит материала для их возведения.
89. Правильно соизмеряйте свои надежды и свои возможности, тогда вы будете на правильном пути.
91. Если вы говорите то одно, то другое, а думаете третье — толку от этого не будет.
92. Обстоятельства введут вас в заблуждение. Перенесите свое внимание на светлые стороны жизaь достигнут совместными усилиями. Практикуйтесь в дипломатии и тактичности.
93. Успех сейчас маловероятен, в ближайшее время от вас потребуются мудрость, выдержка, терпение.
94. Затруднения, которые вы можете испытать, могут иметь благоприятные последствия. Гроза пройдет стороной.
95. Вас ожидает прибыль, появятся новые хорошие материальные перспективы.
96. Вам нужно больше уделять время для отдыха. Позвольте себе на время забыть о делах. Это поможет вам обрести душевный покой и ясность мысли.
Читайте также: Семь событий, которые предупреждают вас о переменах к лучшему
97. Через некоторое время ваши желания или цели потеряют для вас интерес и появятся новые возможности для творческого роста.
98. Успех может быть достигнут совместными усилиями. Практикуйтесь в дипломатии и тактичности.
99. Неожиданные события помешают в данный момент исполнению намеченных планов.
100. Судьба. Доля. Божья воля. По каким-то причинам для вас информация закрыта
Бесплатный генератор советов онлайн
Для того, что бы получить новый совет, нажмите кнопку генерации, которая распологается ниже
Когда кажется, что проблему невозможно решить, попробуйте посмотреть на нее с другой стороны, сделать так, как никто до вас не делал.
Бесплатный генератор советов – поможет Вам поднять настроение, повысить дух. Генератор просто даст дельный и полезный совет, который будет актуальным в любой ситуации. Так часто, не хватает совета от друзей и близких, либо просто от случайного человека. Так почему бы тогда не обратиться к генератору? Возможно, он скажет что-то действительное и полезное, с чем мы пойдем по жизни.
Бесплатный генератор разработан таким образом, что он берет случайный совет из обширной базы и выдает его Вам. Советы могут повторяться в некоторых случаях, потому как нет никакой логики. Просто берем, первое, что попалось и выдает. Однако, если Вам повторили совет, возможно, он действительно Вам нужен? Ведь так сложились звезды над головой! Кроме генератора советов, попробуйте наш генератор чисел онлайн
Онлайн генератор советов
Данный бесплатный генератор советов онлайн постоянно пополняется новыми советами на все случаи жизни. Что интересно, так то что этот онлайн генератор советов не раз проверялся автором данного генератора на себе. И почему то, именно первый спонтанный совет, который сразу открывается на этой странице на 99% почти всегда абсолютно уместен для того кто зашел на сайт генераторов советов онлайн.
Также, очень интересные ответы дает наш генератор онлайн советов. Перед тем, как нажать кнопку сгенерировать СОВЕТ, вы подумаете над вопросом или проблемой вас интересует. И как ни странно можно получить замечательный совет онлайн.
Генератор советов вслепую
Задумайтесь, наш генератор советов работает случайным образом и генерирует советы вслепую. Поэтому это по сути как онлайн гадание. Потому что, генератор ни как не может знать кто вы и поэтому вы получаете ценный совет без надобности спрашивать его в своих друзей. В этом есть своя польза, ведь вы зашли на этот сайт и именно этот совет был сгенерирован для вас. Может наш генератор и посоветует что-то не то что вы хотели. Но это вовсе не значит, что нужно придерживаться именно этого совета. Что делать решать только вам, но возможно, что наш генератор ответов онлайн посоветует что-то путное. Потому что во Вселенной случайностей не бывает, и всегда на каждое следствие есть своя причина. Поэтому если вы прочитали этот совет онлайн, значит он сгенерирован именно для Вас!
Каким образом можно угадать любое случайное число, которое было сгенериновано сайтом?
Раньше в качестве «генераторов случайных чисел» часто использовали компьютерные алгоритмы. Это не совсем корректно, потому что результаты, хоть и с большим трудом и с помощью вычислительных машин, было возможно предсказать. Так, например, один умник из США смог обмануть систему и просчитать алгоритм какой-то игры на деньги.
В настоящее время среди генераторов случайных чисел можно выделить два типа: генераторы псевдослучайных чисел, и генераторов настоящих случайных чисел (названия импровизированные).
Псевдослучайные числа, как видно из названия, не совсем случайны: для их генерации не используются физические источники. Их генерируют с помощью сугубо математического алгоритма. Например, берётся некоторое число (допустим то, которое выпало на кубике), затем перемножается с ещё одним числом (выпавшем при очередном подбрасывании кубика), затем возводится в куб, из результата вычитается ещё одно число, выпавшее на кубике, из получившегося числа извлекается корень третьей степени и из результата берется одиннадцатая цифра после запятой. На первый взгляд кажется, что такое число невозможно предсказать, но на самом деле, если идеально рассчитать траекторию кубика, то можно предсказать и результат. Именно такой алгоритм и описывает работу генераторов псевдослучайных чисел, только вместо кубика используется, например, количество пользователей сайта в данный момент времени.
С генераторами настоящих случайных чисел всё несколько сложнее. Для их работы необходимы физические источники, так как результаты должны быть детерминированы. Идеальным физическим источником является квантовая система: насколько известно современной науке, поведение квантовой системы абсолютно непредсказуемо и хаотично. Проблема такого источника, в первую очередь, заключается в дороговизне. Поэтому большинство сайтов, предоставляющих услуги генерации случайных чисел, в своих целях используют молнию: предсказать траекторию и место удара молнии практически невозможно. При большом желании и наличии мощных вычислительных машин, можно только распределить вероятность попадания молнии в то или иное место.
Таким образом, отвечая на вопрос, можно сказать, что для предсказания «случайного» числа, нужно понимать, с каким сайтом вы имеете дело. Если это очень старый сайт, то есть вариант понаблюдать за его поведением и результатами, и вывести алгоритм. Если это генератор псевдослучайных чисел, то можно попробовать понять, откуда сайт берёт первоначальные числа (как в примере с кубиком). Часто это количество запросов в каком-либо поисковике за единицу времени, либо количество посетителей сайта. Если речь о генераторе настоящих случайных чисел, то здесь с огромными усилиями можно лишь определить наиболее вероятный исход.
Как сделать рандом с процентами?
Всем привет!
Хочу реализовать рандом с шансом выпадения с процентами на основе
Простой 1 комментарий
Можно для каждого значения сделать вес, можете сделать так, чтобы сумма все х весов была 100,
но не обязательно — это могут быть произвольные значения. Главное, что доля веса от суммы всех весов — будет вероятностью данного элемента.
Такой способ делает ваши значения управляемыми буквально одним параметром веса.
И не нужно шатать код.
Обновление от 13.06.2020:
Так вышло, что мой тимлид математик и нашел интересное и эффективное решение этой задачи
Чем хорошо это решение — его можно использовать прямо в SQL запросе!
Чтобы в этом убедиться, повторите эксперимент, например, 1000 раз:
Если хотите эксплуатировать именно функцию array_rand(), то ей нужно предоставить такой массив:
Вес каждого элемента увеличивается путем его тиражирования пропорционально вероятности его выпадания.
Решение не будет отличаться от классики.
Заблуждения игроков при оценке рисков. Манипуляции с генератором случайных чисел при разработке игры
Человеческий мозг по своей природе очень плохо умеет оценивать вероятность срабатывания случайных событий, на основании выданной числовой оценки. И довольно хорошо на основании качественных оценок. А все потому, что человек мысленно делает конвертацию числовых вероятностей в качественные оценки, и делает это очень субъективно:
— 80% попадания выстрела в игре — ну это почти гарантированное попадание;
— 80% того, что ваш товарищ хоть когда-нибудь отдаст долг — не-не-не, так не пойдёт, это слишком большой риск;
— 5% получения критического урона он NPC врага — маловероятно, риск можно игнорировать;
— 1% риск падения сосульки, если пройти под крышей с капающими метровыми сосульками — ещё чего, лучше обойти с другой стороны тротуара;
— 51% вероятность выигрыша в мини-игре в большой РПГ — можно рассчитывать на то, что после 20 ставок я чуть-чуть выиграю или, как минимум, останусь при своих… через 20 ставок… как такое могло случиться, что я проиграл половину всего своего золота? Тут явно сломан генератор случайных чисел!
В статье будут рассмотрены следующие вопросы:
— ошибочные допущения в оценке вероятностей;
— конкретные примеры заблуждений игроков и фактические вероятности «редких» событий;
— генератор случайных чисел (вообще-то псевдослучайных);
— ранние простые генераторы псевдослучайных чисел на примере Final Fantasy I;
— подходы к реализации случайных событий с воспроизводимостью и без;
— примеры удачно внедренных разных подходов и манипуляции в Fire Emblem.
I. Ошибочные допущения в оценке вероятностей
В процессе эволюции человеческий мозг учился очень хорошо оперировать качественными оценками событий и образами своего опыта. А числа и абстрактную числовую оценку вероятности «случайных» событий человек придумал сравнительно недавно [1]. Тем не менее эти числа человек в своих оценках всё равно преобразует в качественные представления: чуть-чуть, мало, много, опасно, безопасно, достаточно. Оценки эти всегда зависят от контекста и субъективного отношения к этому контексту. Именно это и является основной причиной ошибочных числовых допущений.
В качестве примера будет рассмотрена пошаговая игра Disciples 2 [2]. В данной части статьи не будет рассматриваться качество генерации случайных чисел конкретно в этой игре. Про их генерацию будет достаточно данных во второй части статьи.
Disciples 2 — типичный промах [2]
Стандартная атака ближнего боя имеет шанс попадания 80%. Обычно этот шанс воспринимается игроком как «почти всегда», а риск промаха — «изредка / время от времени». Вероятность промахнуться 2 раза подряд при двух атаках равна 4%. Игрок этот риск воспринимает как «почти никогда / такое будет случаться крайне редко». И когда подобное случается, игроки возмущаются на «кривой рандом»: [3]; [4].
Но в ситуациях с двумя промахами подряд и оценкой риска в 4% беглая оценка игроком имеет несколько ошибочных допущений:
1. 4% это вовсе не «почти никогда». Это событие, которое будет случаться в каждом 25-ом независимом эксперименте (в среднем).
2. Оценка проводится на неправильном отрезке времени. Минимальным отрезком замера атак по 80% следует брать не 2 атаки, а все атаки одного класса (
80%) за время «настороженной» памяти игрока. Чаще всего за это время можно взять долгую игровую сессию или вообще всю игру, тут всё зависит от типа игры, памяти игрока и предпочтений считающего.
Так как настоящей статистики использования этой игры у меня нет, я буду исходить из предположения, что долгая игровая сессия в Disciples 2 длится 3 часа и за это время совершается около 250 атак с меткостью
80%. Стоит заметить, что промахи врагов следует игнорировать, т.к. их промахи игрока не злят, и он редко их запоминает.
Так вот, оценивать следует ситуацию: «За все 250 атак ни разу не произойдет 2 промахов подряд».
Для подсчета вероятности истинности данного события была использована рекуррентная формула: P1(n)=0.8*P1(n-1)+0.16*P1(n-2). В выведении этой формулы я воспользовался помощью сообщества, цитата вычислений, подробности и результат приведены ниже.
Можно попробовать применить индукцию. Введём несколько обозначений. Вероятность сохранить лапу после n-й вылазки обозначим P(n). Представим эту вероятность в виде суммы двух вероятностей
P(n) = P1(n)+P2(n), где P1(n) это вероятность, при которой крайняя n-ая вылазка оказалась удачной, а P2(n) — неудачной.
Может показаться что P1 и P2 пропорциональны 0.8 и 0.2, но это не так. Из-за того что мы рассматриваем не любые возможные исходы, а только те, которые сохранили лапу еноту.
Попробуем теперь вывести рекуррентную формулу
P1(n)=0.8*(P1(n-1)+P2(n-1))
P2(n)=0.2*P1(n-1)
Подставим P2 в формулу для P1 получим
P1(n)=0.8*P1(n-1)+0.16*P1(n-2)
Дальше Решение рекуррентных соотношений [5]
Цитата с решением задачи от пользователя Serbbit [6]
Для решения задачи вместо того, чтобы разбираться с методами решения рекуррентных соотношений, был написан маленький javascript код для консоли браузера и вычислен результат.
Рост вероятности хотя бы одного двойного промаха с ростом числа экспериментов
Про несовершенство и искажения человеческой памяти, кстати, вообще целые исследования и книги существуют: «Иллюзии мозга. Когнитивные искажения из-за переизбытка информации» [7]; «Не верьте своему мозгу» [8], если вас эта тема заинтересовала, рекомендую начать ознакомление с этих статей.
3. Третье неверное допущение — это ожидание зависимости во взаимно независимых экспериментах.
То есть после первого промаха игрок думает:
«Так, персонаж промахнулся с меткостью 80%. Теперь-то он точно попадёт, ведь риск двойного промаха равен всего 4%».
А вот и нет. После первого промаха риск очередного промаха будет так же равен 20%. Ведь прошлая атака уже случилась и никак не влияет на будущий выстрел. Более того, если до первой атаки вероятность двойного промаха была равна 4%, то после первого промаха вероятность двойного промаха становится уже 20%, то есть относительно ожиданий игрока риск только возрастает.
Эта особенность человеческого мозга особенно привлекательна для манипуляций со стороны казино (и им подобных) в азартных играх (подробнее об устройстве игровых автоматов от производителя [9]).
Ещё интересные примеры заблуждений человеческого мозга можно почерпнуть в статьях про баланс Яна Шрайбера «Level 5: Probability and Randomness Gone Horribly Wrong» (Уровень 5. Вероятность и случайность пошли вразнос) [10].
II. Генератор случайных чисел
Используемый в играх термин «Генератор случайных чисел» (RNG / random number generator) почти всегда в действительности означает «Генератор псевдослучайных чисел» [11]. Главной особенностью этого генератора является его воспроизводимость. Воспроизводимость означает то, что, зная изначальный порождающий элемент (или зерно / seed) всегда будет получена одна и та же последовательность случайных (псевдослучайных) чисел. В некоторых играх этот эффект проявляется в том, что после перезагрузки игры последовательность попаданий и промахов остается неизменной. А в других играх не остается той же самой.
А все дело в том, как применяется этот генератор псевдослучайных чисел и какие дизайнерские цели преследует разработчик.
Чтобы лучше понять принцип работы генератора псевдослучайных чисел, можно рассмотреть способ его реализации в первых классических играх, когда ресурсы компьютеров (и консолей) были особенно сильно ограниченны. (Углубленное описание примеров и их особенностей читайте в статье «How classic games make smart use of random number generation» [12].)
How classic games make smart use of random number generation [12]
В Final Fantasy I использовались несколько таблиц с заранее заданными фиксированными числами с 256 значениями в каждой таблице:
— для вычисления случайных сражений с каждым шагом в игровой карте алгоритм перемещался по таблице, изменяя индекс на 1 за раз, таким образом постепенно прокручивая все возможные значения — от этого зависел как сам факт столкновения, так и возможная группа противников;
— для вычисления результатов сражения тоже использовалась подобная таблица из 256 фиксированных значений, но перемещение по ней происходило не только с каждым очередным использованием псевдослучайного числа, но и каждые 2 кадра. То есть каждые 2 кадра алгоритм вхолостую прокручивал таблицу с числами, тем самым уменьшая риск прогнозируемых одинаковых последовательностей. Источником энтропии тут была неопределенность, сколько времени игрок будет думать до выбора очередной команды.
В качестве зерна (порождающего элемента) в Final Fantasy I используется порядковый номер (индекс) фиксированного значения в таблице. То есть, зная место, откуда будут дальше выбираться случайные числа, можно точно предсказать какое случайное число будет выдано после 1000 проверок. В более сложных алгоритмах генерации псевдослучайных чисел зерно используется не так просто, но основной принцип и эффект остаются.
Сейчас для генерации псевдослучайных чисел в основном используются стандартные библиотеки используемых языков программирования. В качестве источника энтропии чаще всего используется текущее системное время. Для нужд игровой индустрии характеристик стандартных библиотек обычно хватает. Недостатки генератора и источника энтропии используются игроками очень редко из-за сложности их вычисления и манипулирования. Обычно это остаётся уделом спидранеров-программистов (например, взламывающего логику Pokemon Colosseum [13]), а значит разработчикам такие тонкости чаще всего разумнее игнорировать.
III. Разные подходы к использованию генератора
1. Зерно фиксируется на момент старта миссии или игровой кампании.
Последствия для игрока: перезагрузка игры не изменит факт промаха персонажем (назовем его чокнутым Фиделем), даже если вероятность его попадания равна 99%. Однако, перед попыткой попасть игрок может совершить какое-либо другое действие, которое использует случайное число, например, походит другим персонажем — лысым Миком. В результате этого несчастливое случайное число будет использовано лысым Миком, а на чокнутого Фиделя будет использовано следующее случайное число в последовательности — тогда он, возможно, попадёт.
Как игрок может злоупотребить этим: если бросок с меткостью 50% приводит к промаху, то можно перезагрузиться и попробовать атаку с меткостью чуть-чуть повыше (55%), пока не попадёт. После попадания сохраниться и повторить это с другими бросками.
Положительные последствия для разработчика:
1) Игру можно воспроизвести пошагово, если хранить только начальное состояние, зерно и последовательность действий. Благодаря этому можно показывать повторы и даже очень компактно хранить файлы сохранений. Способ позволяет очень сильно сэкономить занимаемое место на диске/памяти.
2) Защита внутренних азартных игр, чтобы сохранение/загрузка не позволяла игроку обанкротить всех встречающихся NPC соперников.
Игра roguelike Brogue [14] использует этот способ, начиная с генерации игрового мира и заканчивая просчетом всех действий игрока. В результате этого в файле сохранения хранится только стартовое зерно и последовательность игровых команд. Дополнительный бонус этого эффекта в том, что игру можно начать с выбранным номером зерна, предварительно выбрав наиболее интересный мир в таблицах сгенерированных миров Brogue [15].
Brogue roguelike — официальный сайт [14]
2. Зерно не фиксируется или обновляется каждый раз после перезагрузки.
Последствия для игрока: любая перезагрузка изменяет все расчеты в шансах попаданий.
Как игрок может злоупотребить этим: очень просто — несколько перезагрузок и самый маловероятный сценарий попадания может стать реальностью.
Положительные последствия для разработчика:
1) Игроки воспринимают такую игру как более честную с настоящей случайностью, просто из-за отсутствия знаний внутренних механик.
2) Игроки получают неофициальный лёгкий режим, который при желании позволяет сильно облегчить сложные участки.
3) Разработчик может прикрыть халяву разными методами: одним автосохранением на игру (то есть перезаписывание сохранений и перманентная смерть) или запретом сохранения во время миссии (в разных вариациях). А наиболее чувствительные участки (азартные мини игры) можно просчитывать на основании отдельного неизменного зерна, хотя технически это значительно труднее.
Игра The Battle for Wesnoth [16] использует нефиксированное зерно с принципиально честной случайностью. Честность заключается в том, что иногда возможны совершенно маловероятные последовательности неудач, и движок игры их не корректирует. Результатом этого являются периодические гневные посты раздраженных игроков в адрес разработчиков игры.
Reddit — супер ловкая русалка в Wesnoth [17]
Также перед атакой игра предоставляет подробные расчеты вероятностей каждого из возможных исходов атаки: наносимый урон, получаемый урон и вероятность гибели одного из противников. Вывод этих вероятностей только накаляет гнев «неудачно походивших», т.к. уверившись в хороших шансах при атаке, сложно смириться с результатом, у которого была оценка 1 к 1000.
3. Зерно не фиксируется, а сами результаты подвергаются дополнительным манипуляциям.
Под манипуляциями я имею в виду такие динамические корректировки, в результате которых увеличивается ощущение правильной (справедливой) случайности за счёт потери настоящей псевдослучайности в получаемых числах.
Последствия для игрока: аналогично играм с нефиксированным зерном — перезагрузка позволяет пересчитать результаты.
Как игрок может злоупотребить этим: с помощью сейвскаминга можно подобрать выгодную комбинацию атак, но во многом зависит от способа реализации и наличия защитных механизмов со стороны разработчика.
Положительные последствия для разработчика: разработчик может контролировать редкость нежелательных исходов, делать видимость «честного рандома«, увеличивать и уменьшать сложность игры. Если разработчик при подсчете шанса на попадания хранит и раздельно учитывает срабатывания для каждой команды, то он может сильно уменьшить злоупотребления от сейвскаминга, гарантируя, что свою среднеарифметическую порцию урона игрок всё равно получит.
Разработчик Carsten Germer использует функцию контролируемой случайности для редких и не только событий [18]. Например, чтобы гарантировать периодическое выпадение особо редкого бонуса с шансом 1 к 10000, он после каждого «промаха» увеличивает шансы по порядку: 1 к 9900; 1 к 9800; 1 к 9700… и так до фиксации события. А чтобы гарантировать отсутствие частых редкостей, он ввел дополнительную переменную, блокирующую срабатывание на 100% в течение 10 следующих проверок после прошлого срабатывания.
В своем рогалике Grue the Monster [19] я также использовал манипуляции со случайностями. Обычно при преследовании жертв персонаж игрока должен прятаться за их спинами, поджидая, когда они сделают шаг назад и попадут к нему в лапы. Обычно такой шанс равен 1/6 в открытом пространстве (1/2 в коридорах и 1/1 в тупиках), но чтобы уменьшить раздражающий эффект особенно невезучих ситуаций, перед каждой проверкой направления хода жертвы в 15% случаев она гарантированно шла в направлении к Гру.
Fire Emblem: The Binding Blade [20]
В данной части была введена щадящая система: вместо одного случайного числа бралось среднее двух случайных чисел, и это среднее сравнивалось со значением меткости. То есть случайное число в большей степени стремится к значению 50. Это приводит к искажению линейного эффекта случайности попадания: бойцы с меткостью больше 50% попадают чаще, чем в 50% случаев, а с меткостью меньше 50% значительно реже. А так как в игре подавляющее большинство персонажей игрока имеют большую меткость, а большинство врагов меньшую, то игрок получает очень серьёзное скрытое преимущество [21]. Ниже показан график этого эффекта, где синей линий показана частота попаданий в старой системе, а красной частота попаданий в новой в зависимости процента меткости атакующего. Например, при показываемой вероятности попадания в 90%, фактическая вероятность будет равна 98,1%, при 80% — 92,2%, а при 10% — всего 1,9%!
Искажение шанса попадания. По оси Y фактическая вероятность, по оси X — показываемая игроку
Это, безусловно, не единственные примеры манипуляций со случайными числами и балансом, но найти их очень сложно. Поэтому помощь сообщества здесь будет особенно ценной.
Хочу отметить, что я не отношу к манипулируемой случайности процедурную генерацию, как таковую. Пример: рогалик сгенерировал случайный уровень со случайным набором врагов, ловушек, стен и тупиков. Если при этом был создан уровень, который невозможно пройти, то пример кривой разработки, недостаточно продуманного проектирования или слабого тестирования. Разработчик обязан процедурно проверять хотя бы базовые проблемы случайной генерации:
— проход к выходу всегда должен быть хотя бы в единственном числе. Тут помогают любые алгоритмы поиска пути;
— серия ловушек должна иметь возможность обхода, и если их создаётся слишком много в одном месте, то алгоритм должен вычислить их плотность и удалить лишние;
— слишком сильные враги должны предоставлять хотя бы один из доступных способов их «прохождения»: грубой силой; свитками и зельями; особыми артефактами или возможностью просто от них убежать;
Такое вмешательство в случайные результаты не являются манипуляцией, а являются просто правилом минимально грамотного подхода к разработке. Используются эти проверки во всех способах генерации псевдослучайных чисел.
4. Вообще убрать элемент случайности из механики игры.
То есть результаты каждой атаки всегда имеют 100% вероятность попадания и фиксированный урон, а также постоянные правила срабатывания дополнительных эффектов. Вместо этого можно использовать случайные вычисления для косметических целей: периодические «позёвывания» ожидающих своего хода персонажей; отлетание чисел нанесенного урона; эффекты столкновений и взрывов. Тут нет никакой разницы, как генерировать случайные числа и насколько равномерно распределение.
Хотя и в этом случае можно использовать первые три способа в расчетах искусственного интеллекта, когда вражеские персонажи могут в какой-либо степени случайно выбирать цели для атаки или ходить командой в случайном порядке. Но это уже будет менее заметно для игрока и раздражающих ситуаций будет значительно меньше.
Последствия для игрока: перезагрузка либо никак не влияет на результаты, либо влияет незначительно.
Как игрок может злоупотребить этим: игрок может вычислить или найти в сети стабильную доминирующую стратегию и использовать только её. Стоит отметить, что для определённых групп игроков это является основным интересом в игре.
Положительные последствия для разработчика: разработчику значительно легче сбалансировать такую игру. Как минус — при этом возникающие доминирующие стратегии становятся стабильными, а значит, даже невезение игрока не сможет привести его к поражению, а приводит к исчезновению всяких неожиданностей, скуке и удалению игры. Игроки высокого класса почти всегда будут выигрывать у игроков классом пониже, для различных типов игр это может быть как преимуществом, так и недостатком.
Любые шахматы с классическими правилами.
Также сюда подходят логические roguelike. Например, очень хорошо данный метод реализован в Desktop Dungeons Alpha [22].
Desktop Dungeons Alpha [22]
Здесь результаты последовательности атак всегда одинаковы и заранее просчитываемы. Однако за счет случайной (процедурной) генерации игровых подземелий и наличия тумана войны, игра приобретает свою уникальную реиграбельность лучших рогаликов.
Таким образом, в статье рассмотрены две подтемы случайности в играх:
— Ошибочные допущения в оценке вероятностей. Описаны интуитивные допущения, которые делает игрок, и которые часто оказываются неправильными из-за их субъективности. Основной вывод: настоящая случайность не только не гарантирует того, что пользователи останутся довольны, но даже может привести к обратному эффекту.
— Генерация псевдослучайных чисел. Описаны разные подходы к использованию случайности. Удачные примеры реализации показывают, что независимо от выбранного подхода игра может получится интересной, неожиданной и с хорошей степенью реиграбельности.
Осознанное последовательное использование выбранного подхода позволяет разработчикам подчеркнуть их положительные стороны и максимально нивелировать их отрицательные.