Kaborator

Kaborator

На Пикабу
6873 рейтинг 497 подписчиков 16 подписок 29 постов 19 в горячем
Награды:
5 лет на Пикабу
83

Самоконтроль времени на самообразование и время на чтение книг

Работа программистом предполагает постоянное обязательное самообучение. Самообучение включает в себя, во-первых, углубление знаний в уже знакомых сферах, и, во-вторых, получение навыков в неизвестных и пропущенных областях. Это всё, конечно, красиво звучит на бумаге, но по факту мы ещё имеем приступы лени, застревания в стеке технологий и выгорание от рутины. Новые ощущения помогают в борьбе с тёмной стороной разработки. Вот только ощущения должны быть действительно новыми: разбираться в десятый раз с нюансами «новых» api от очередной социалки быстро становится завуалированной рутиной.

Самоконтроль времени на самообразование и время на чтение книг Самообучение, Самообразование, Книги, Учеба, Обучение, Тайм-менеджмент, Самоконтроль, Лень, Длиннопост

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


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


Основное решение тут простое и всем известное: самообразование. Оно может принимать разные формы: дополнительный проект для хобби; образовательные курсы и семинары (текст / аудио / видео); конкурсы и соревнования; книги. Для меня самыми полезными и эффективными стали книги, поэтому на их примерах и будут описаны применяемые мной методы контролируемого обучения.

В чём проблема? Бери и читай!


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


Вот с чем легче провести время отдыха: «Эгоистичный ген» Докинза или «Совершенный код» Макконелла; «Кровь, пот и пиксели» Шрайдера или «Паттерны проектирования» от Фрименов? (Хотя справедливости ради стоит добавить, что все эти книги были самыми увлекательными в списке)

Вот начал полезную книгу. Теперь всё хорошо?


А вот нет. За собой заметил, что впервые начав читать Совершенный код Макконнелла, замедлился в чтении где-то на середине. И как-то незаметно можно сделать перерыв в неделю, две недели… потом почитать часок… и опять пауза на неделю. Эдак одну книгу годами можно читать, но так и не закончить, но ложное чувство постепенного прогресса при этом всё равно присутствует. А чувство стыда за большие перерывы незаметно отбивает всякое желание возвращаться к предмету, который доставляет столько неприятных переживаний.

Так кто же враг?


Моим врагом было отсутствие наглядности. Когда не видишь постоянно насущную задачу, то её вроде как и нет. И можно отложить её в долгий ящик. Для решения этой проблемы у меня не было инструментов, но подходящий для себя я всё же нашёл. И это простая таблица карьерного капитала в Google Docs. Сойдёт вообще любая таблица, в том числе и в бумажном виде. Нашёл я эту методику в книге Нюпорта «В работу с головой». У него там несколько методик, но мне подошла именно эта.

Методика «Таблица карьерного капитала»

Самоконтроль времени на самообразование и время на чтение книг Самообучение, Самообразование, Книги, Учеба, Обучение, Тайм-менеджмент, Самоконтроль, Лень, Длиннопост

Базовые правила:

1) Создать таблицу с 3 столбцами: Дата; Затраченные часы; Выполняемые задачи.

2) В конце каждого дня заполнять очередную строку таблицы. В «Выполняемые задачи» вносится список значимых для самообразования задач и сколько часов в каждую из задач было инвестировано. В «Затраченные часы» сумма часов по задачам.

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

4) Включать в список только значимые для своего самообучения задачи. Ремонт в квартире часто может быть важнее самообразования, но включать его сюда не стоит. Впрочем, это правило очень размытое.

5) Задачи предпочтительнее ставить в формате SMART, то есть быть: конкретными (прочитать книгу А); измеримыми (прочитана и понята 1 книга); достижимыми (я уже читал подобные книги и эту осилю); актуальными (мои алгоритмы тормозят! С этим надо что-то делать); с указанием крайнего срока сдачи (максимум 2 месяца на прочтение).

6) Общее число текущих задач не должно быть слишком большим, чтобы не распыляться. Для меня это примерно 6 задач. При этом строго соблюдается правило, что единовременно нельзя читать больше 2 книг.

7) В конце месяца суммируются все часы и сравниваются со средним Вашим показателем. Если больше среднего — чувствуем себя очень хорошо; если ниже среднего — всё равно чувствуем себя хорошо; если ниже поставленного обязательного минуса — чувствуем себя нехорошо и либо корректируем своё поведение, либо снижаем минимальную планку.

Вот и всё — метод очень простой. За подробным описанием с примерами можно обратиться к одной из книг Нюпорта.


У себя я вношу часы с градацией 0,25 часов (15 минут).

В месяц у меня выходит от 30 до 120 часов.

Минимальная планка: 30 часов.

Средняя планка: 60 часов.

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


А бонус этого подхода в том, что Вы узнаёте, сколько же реального времени у Вас занимает чтение одной книги. Да и вообще, что именно Вы чаще читаете.

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

— [40,25 ч.] Совершенный код. Макконнелл.

— [1,75 ч.] Scrum гайд и стратегии.

— [34,50 ч.] Искусственный интеллект в компьютерных играх. Алекс Дж. Шампандар.

— [26,50 ч.] Паттерны проектирования. Фримен, Фримен, Сьерра.

— [24,75 ч.] (English) Шаблоны в игровом программировании. Робер Нистром.

— [17,50 ч.] Эгоистичный ген. Докинз.

— [5,50 ч.] Воспитание ребенка. Гипенрейтер.

— [8,00 ч.] В работу с головой. Нюпорт.

— [12,75 ч.] (English) Гарри Поттер 1.

— [9,75 ч.] (English) Гарри Поттер 2.

— [11,25 ч.] (English) Гарри Поттер 3.

— [22,75 ч.] (English) Гарри Поттер 4.

— [26,75 ч.] (English) Гарри Поттер 5.

— [18,25 ч.] (English) Гарри Поттер 6.

— [19,75 ч.] (English) Гарри Поттер 7.

— [5,50 ч.] Фрирайтинг. Марк Леви.

— [13,00 ч.] (English) How to win friends. Cornegey.

— [4,25 ч.] Макиавелли. Государь.

— [7,50 ч.] Кровь, пот и пиксели Шрайера.

— [23,75 ч.] Все о цвете. Линдси.

Заключение


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

Кстати, хочу заметить, что наличие некоторых книг в списке не означает, что они мне понравились и я бы их рекомендовал кому-то, кроме своих врагов. Поэтому рекомендательным списком его воспринимать никак нельзя.

Для игровой разработки я могу посоветовать: «Совершенный код»; «Паттерны проектирования»; «Шаблоны в игровом программировании»; «Кровь, пот и пиксели»; «Все о цвете».

В комментариях было бы замечательно увидеть и Ваши списки рекомендуемых книг.

Показать полностью 2
407

Хускарл довакина

19 Последнего зерна 4E201.

Сегодня сбылась моя голубая мечта. Я стала хускарлом героя, подобного Талосу. Мой тан - довакин. Он, хвала девяти, светловолосый рослый норд - настоящий сын нашей суровой земли. Он спасёт нас от драконов и алчной империи.

24 Последнего зерна 4E201.

Очень быстро я узнала, что мой герой - настоящий брутальный гений:

- Владеет любым оружием, которое попадает к нему в руки;

- Знакомы все профессии Скайрима: от посыльного и дровосека до алхимика и зачарователя;

- Готов помогать всем: и алкоголику достать бутылку редкого вина, и ярлу в зачистке лагеря бандитов;

- Не боится никого: гигантов он нашпиговывает стрелами; на бандитов насылает грохочущих элементалей; некромантов крошит своей стальной булавой.

27 Последнего зерна 4E201.

Мой герой был у седобородых, и они учили его тайнам использования туума. Они так кричали друг на друга, что я боялась оглохнуть. Седобородые неустанно хвалили его, удивляясь как быстро он учит новые крики, на которые уходят годы тренировок.

Это ещё что, видели бы они, как он всего за пять минут выковал 10 железных доспехов и столько же ювелирки. Меня распирает от гордости за своего тана.

Седобородые отправили довакина в пещеру за рогом Юргена, который поможет начать борьбу с драконами.

5 Огня очага 4E201.

За эти дни с довакином я обнаружила еще много его скрытых талантов:

- Его раны моментально заживляются от поедания сырой капусты и заячьих лап;

- В своих алхимических экспериментах он не брезгует съесть неизвестный ингредиент: от хвоста злокрыса и огненной соли до поганки и эктоплазмы;

- Занимается мародёрством и карманными кражами. Удивительно, что он ни разу не попался. Надеюсь, дело не в том, что ему благоволит богиня удачи Ноктюрнал;

- Он может скупить у кузнеца всю руду и слитки, смастерить из неё целую партию брони, продать её тому же кузнецу. В итоге монет у него остаётся меньше, чем было сначала, хотя уходит от кузнеца он довольным. Похоже у него очень плохо с арифметикой;

- У него есть проблемы с собирательством. Он не может пройти мимо бочки с ничейной морковью, чтобы не набить ею свой или мой рюкзак. А потом он тащит этот мусор купцам, чтобы продать его за копейки.

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

12 Огня очага 4E201.

Драконорожденный перестал помогать в борьбе с вампирами. Вместо этого он вступил в гильдию воров Рифтена, провернув несколько отвратительных делишек с подставой невинных.

Теперь он заставляет таскать меня нераспроданные ворованные драгоценности. Мне стыдно смотреть в глаза людям, которых мой тан обокрал. А он заглядывает в кошельки абсолютно всех прохожих, оказавшихся рядом с ним. Не обходит стороной даже нищих и ярлов. Периодически жалуется на бедность ярлов.

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

20 Огня очага 4E201.

Довакин забросил работу в гильдии воров и стал членом коллегии магов в Винтерхолда. Это уже гораздо лучше.

Я видела, как быстро он осваивает самые разные умения, я не удивлюсь, если всего за несколько месяцев он уже станет почётным магистром в этой гильдии.

23 Огня очага 4E201.

Довакин получил должность верховного архимага! Уже на четвертый день!

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

9 Начала морозов 4E201.

Мой тан покинул коллегию магов сразу же после получения своего титула. С тех пор я ни разу не видела, чтобы он отдавал своим подчинённым хоть одного приказа.

Вместо этого он вступил в Тёмное братство и уже совершил несколько бесчестных убийств.

С другой стороны, дружба с такой опасной организацией может помочь в борьбе с любым врагом, особенно с империей.

До задания седобородых дело пока не дошло. Мои вопросы он игнорирует.

28 Начала морозов 4E201.

Мой тан недолго был с Тёмным братством.

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

Я не знаю о чём он думает: в небе всё больше летает драконов, а ночью постоянно нападают кровососы. Последнее нападение вампира лишило Вайтран отличного кузнеца.

Я подозреваю, что он свихнулся из-за всей той дряни, которую он пихает в себя: поганки, паучьи яйца, скуму. А во время боя он успевает выпить по три бутылки вина, заедая яблочными пирогами и хоботами мамонтов.

Хм, я начинаю что-то подозревать.

15 Заката солнца 4E201.

Фу, какая мерзость!

Этот больной ублюдок сегодня сожрал жреца Акатоша в компании даэдрапоклонников-каннибалов.

Весь Скайрим ждёт героических свершений от "второго Талоса", а в это время их спаситель обворовывает их дома, обчищает их карманы, но теперь ещё и жрёт их потихоньку. Я так надеялась, что история с превращением в оборотня была досадной ошибкой. Похоже ему тогда понравилась человечина.

Самое ужасное, что остальной Скайрим до сих по видит в нём великого героя, ведь он уничтожил уже несметное число банд грабителей, некромантов и других тварей. О да, он это делал, но это всегда направлено на собственное обогащение. Если бы за плохие платили больше, он бы совершал их. А золото он спускает на новые дома и постоянные эксперименты в кузнице. Никаких намёков на сбор военных отрядов для борьбы с драконами я так и не увидела.

Я не понимаю, что творится в его больной голове.

11 Вечерней звезды 4E201.

Сегодня мерзавец выковал себе удивительную броню из костей дракона, которую потом зачаровал в Драконьем Пределе. Это выглядит эффектно. С этой бронёй он сможет победить кого угодно.

Теперь то он, должно быть, начнёт заниматься драконами...

Но нет, он пожаловался мне, что ему стало скучно. А потом пошёл на ближайшую ферму и перерезал там всех жителей. И сожрал их. А всё их окровавленное хламьё отдал мне для переноски, чтобы потом перепродать купцам.

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

Но этот драконоорущий мерзавец использовал все своё красноречие, связи в гильдии воров и титул тана. В итоге он просто отделался штрафом в 3000 монет. Ну да, бедность его многому научит, ведь теперь у него уже не 120 000 септимов, а всего лишь 117 000.

10 Утренней звезды 4E202.

Прошёл ещё месяц, а мой хозяин так и не приступил к борьбе с драконами или кровососами.

Теперь я не верю, что он когда-нибудь выполнит своё предназначение.

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

Уйти от него я тоже не могу. В какую бы задницу мира он бы не забрался, я всегда чувствую где он. И независимо от моего желания бегу к нему со всех ног. Я проклята.

16 Утренней звезды 4E202.

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

Пока мы шли, довакин рассказывал, как сильно он ценит меня и как я помогу в его великой миссии по освобождению Скайрима от всех ужасов.

Мы идём в какое-то древнюю часовню вечной ночи, где от моего хозяина потребуется маленькая жертва. И вот потом настанет время для великих дел.

Неужели мои молитвы были услышаны богами? Возможно, свет девяти богов излечил моего тана от безумия. Это воистину счастливый день.

Показать полностью
19

Башня древних

Рано утром меня растолкала тётка, напомнив, что пора уже в школу. Даже поесть не дала, хотя сама жевала сладкую булку. Ехидно пропищала, не кончилась ли вдруг моя амнезия?

Школа у меня стрёмная. Единственный учитель, он же директор, он же советник короля - старый бородатый дед. А учеников в школе всего четыре. Все они редкостные жизнерадостные уроды: карлик прогульщик с красным алкашным носом; конь, воняющий навозом; и форменная крыса в балахоне. Один я нормальный. У меня даже плащ есть. В школе нас учат немного истории, немного морали, короче всему понемногу. Но в основном это просто пустая трата времени, потому что дед постоянно в командировках, или сидит в своём заплесневелом подвале, или разводит демагогию на совещаниях у короля.

Вот и в этот раз в самом начале урока влетел задыхающийся стражник и позвал деда во дворец. Ну теперь снова весь день шляться по городу, пинать куриц и доставать просаленных матросов глупыми вопросами. Но тут одноклассницу распёрло от любопытства, и она потащила нас во дворец за дедом. Стражников она внаглую обманула, что мол дед нас ждёт внутри. Теперь стражников лишат месячного оклада, но этой крысе ведь плевать на чужие проблемы.

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

Тут наш тупой конь чихнул, и дед заметил неудобных свидетелей. Пытаясь заткнуть нам рот, он приказал бежать за ним в какую-то старую башню. Мол он боится, что случилось что-то страшное. Так как остальные тупые одноклассники сразу побежали, то и я побежал за ними. Ну а чё, я как все. По пути мы увидели несколько дохлых стражников. Неужели это наш дед так постарался? А ведь это настоящие ветераны...

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

А ведь эта хрень недавно расправилась со взрослыми мужиками в тяжелой броне и железными мечами! Я ему пытался сказать, что мы только дети, у нас с собой из оружия только деревянные детские игрушки: короткая палка вместо меча и длинные палки вместо посоха и копья. Но мои уроды-одноклассники с глупыми улыбками подчинились приказу и ринулись в бой. Призраки разорвали их с трёх ударов. А дед просто стоял и смотрел на это! Я видя, что теперь и до меня дойдёт очередь, быстро использовал единственное заклинание, которое смог выучить: "Трусливой телепортации".

Я тут же оказался в местной церквушке. Теперь главное действовать как можно быстрее. У меня есть фора, которая поможет мне сбежать от деда маньяка. Пусть он делает, что хочет в этом клоповнике. Я отсюда сваливаю. Осталось только купить настоящее оружие и сбежать из города, миновав слишком рьяного стражника-вахтёра. Надеюсь, эти жуткие призраки не сбросят весь остров Гранс Айленд в чёртову бездну.

Показать полностью
1514

Секреты лучшего алхимика

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

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

18 Последнего зерна 4E201.

Прибежал какой-то мужик с переполненным рюкзаком. Весь в крови и грязи, вонючий от застарелого пота. Носит доспехи, явно снятые с разных трупов. На поясе висит булава, за спиной необычный щит, на плече лук и стрелы. С этим надо быть поаккуратнее.

Обменялись приветствиями, имя его какое-то странное: длинное и с числами в конце. Сказал, что он путешественник, добрый малый и исследует мир в одиночку. Он меня напрягает.

Порасспрашивал про местные слухи, спросил, есть ли у меня для него работа, которая даст ему как можно больше опыта. С какой стати мне работать с каким-то проходимцем? Чтобы отвязаться от него, попросила принести мне 20 корней Нирна, мол они мне очень сильно нужны для экспериментов. Ха, ну пускай поищет их в грязи на берегах рек, вряд ли он теперь вернется: загрызут его дикие звери или прибьют мародёры и дезертиры.

Перед уходом облазил весь мой дом, даже зашел в спальню - беспардонная скотина. Прочитал мои книги, лапая своими грязными руками, пришлось следить, чтобы ничего не уволок. Наконец-то ушёл.

20 Последнего зерна 4E201.

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

Довольный собой вывалил мне на стол 20 грязных корней Нирна, сказал что выполнил мой квест и ждёт своей награды. Как он собрал их так быстро, и как он выжил в такие времена в дикой местности? И теперь требует награды... Что любопытно, ведь мы не оговаривали, какой будет эта награда.

Обычно такая поставка ресурсов стоит 400 монет, но с этим малым можно поторговаться. Для начала дала ему 50 монет. Он взял монеты и смотрит молча на меня. Я молча смотрю на него. Он на меня, я на него. И тут он спрашивает: "А сколько я получаю опыта?". И что мне на это отвечать? Отвечаю: "Много". Он расплывается в довольной улыбке и счастливый уходит. Что это вообще было?

20 Последнего зерна 4E201, Ночь.

Просыпаюсь от громыхания.

Рядом с моей кроватью на карачках сидит этот ненормальный. Я жутко испугалась. Ну всё, думаю, напоролась на психопата, и никто меня спасти не успеет, как бы я ни кричала. Вскакиваю с кровати, пытаюсь закричать, но от страха ничего не могу сказать.

Тут он начинает медленно ползти прочь, но при этом он жутко скрипит своей железной бронёй. Он что думает, что я его не вижу? И тут я говорю самую тупую фразу, которую можно было сказать в этой ситуации: "Тебе здесь нечего делать!". Тут он вскакивает со своих карачек, громыхая железными сапогами выбегает на балкон второго этажа, с разбегу спрыгивает вниз, бьётся башкой о камни на дороге, поднимается и скрывается в ночи.

Проверила все замки - один был вскрыт. Закрылась на засов.

Я так и не смогла сегодня заснуть.

21 Последнего зерна 4E201.

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

О, убереги меня, Талос.

Почти не спала всю ночь, снились кошмары и чудились скрипы железных сапог.

22 Последнего зерна 4E201.

Психопат пришёл ко мне днём, как ни в чём не бывало.

Даже не поздоровавшись, пошёл к моему алхимическому столику и начал варить зелья. Что же делать, стражники мне не помогут... Так как я тряслась от страха и думала как поступить, то не сразу заметила, что же именно он делал за моим столиком. Это же просто варварство: он смешивал два или три случайных ингредиента, внимательно смотрел на содержимое, а потом смешивал другие ингредиенты. Он же может нас так всех травануть каким-нибудь ядовитым облаком или угробить случайным взрывом.

На этот раз всё обошлось и ничего не взорвалось. Он сделал около 30 каких-то зелий и выставил их передо мной. И он начал мне их продавать, утверждая, что вон в той красной склянке зелье лечения, а вон в той зелёной очень полезный магический яд. Мне эта дрянь даже даром не нужна, но я боюсь его сердить. Может он так мстит за то, что я в самом начале обдурила его с оплатой за его корни Нирна? Я заплатила ему какую-то мелочь за каждую склянку, лишь бы отвязаться побыстрее от него.

После этого на вырученные деньги он выкупил у меня почти все ингредиенты, даже самые редкие: ноготь гиганта, сушеное сердце оленя и нос ведьмы-карги. А потом со словами: "Хм, я даже не знаю, какие эффекты они дают", он их съел! Он просто сожрал эту мерзость прямо стоя перед моим прилавком! Его начало корчить от боли, но он просто запил это эликсиром из красной бутылки: я в таких храню средства для притупления боли.

Потом он ещё немного похимичил за моим столом и ушёл. Наверное издохнет в какой-нибудь канаве от болезней и отравления.

25 Последнего зерна 4E201.

Психопат не приходил уже несколько дней, похоже его наконец-то кто-то прибил. Я могу теперь спать спокойно.

27 Последнего зерна 4E201.

Психопат опять пришёл. Опять в новой одежде, но в такой же грязной и вонючей, как раньше. Это уже не удивляет.

Он опять продал мне результаты своих алхимических опытов. Теперь мне опять придётся выливать эту дрянь в общую выгребную яму поздно ночью, чтобы никто из соседей не увидел. Надеюсь из-за этого не начнется какая-нибудь магическая чума.

И тут он сделал нечто совсем сумасшедшее: он достал из своего рюкзака корзину для фруктов и одел мне на голову! Я остолбенела от шока.

А он с хитрой улыбкой начал загребать к себе в рюкзак все мои выложенные на прилавке товары. Потом снял корзину и положил к себе обратно. Попрощался и ушёл.

Я сразу побежала к стражникам с жалобами. Но они мне снова ответили, что он герой и очень уважаемый человек. Ярл ему очень доверяет. А мне следовало сразу кричать: "Вор", тогда бы один из стражников прибежал бы ко мне на помощь. А так это всё выглядит как клевета. Потребовал, чтобы я перестала порочить доброе имя драконорожденного.

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

В этот же вечер в таверне я наняла местную банду наёмников, чтобы они избавили мир от этого гада. Мы подписали контракт, они взяли с меня 2000 монет и пообещали расправиться с ним в течение недели. Он заверил меня, что для надежности он всегда будет хранить свою копию контракта в кармане брони, похлопав по карману с глупым рисунком рыжего кабана.

В эту ночь я наконец-то смогла выспаться.

2 Огня очага 4E201.

Психопат опять вернулся. Он опять продал мне свои мерзкие эликсиры. Потом обокрал меня с помощью своего трюка с корзинкой и спокойно удалился.

Когда он уходил, я заметила, что теперь он носит потрепанную латную броню, а сбоку брони приделан карман с рисунком рыжего кабана.

Психопат знает, кто его заказал.

О, Талос, убереги меня от этого психопата.

4 Огня очага 4E201.

Психопат вернулся с идеей, что я должна учить его алхимии. Что-то поздновато он осознал свою никчёмность в этой науке.

Я начала объяснять ему основы, но уже через 5 минут он сказал, что многое узнал, заплатил мне за 5 уроков 2000 монет. Я сомневаюсь, что он усвоил даже то, что я ему успела рассказать за 5 минут. У него же даже рожа имбицила!

И тут он опять сел на карачки, как тогда ночью перед моей кроватью. Я сразу напряглась, это может очень плохо кончиться.

Вприсядку он заполз ко мне за прилавок. Сел за моей спиной. Подождал. А затем мерзко дыша полез своими лапами к моему поясу с кошельком.

Я что есть духу закричала: "Вор! Держи вора!".

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

Немая сцена.

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

А между тем психопат начал ползать на карачках за моим прилавком, внимательно на меня поглядывая. Я старалась делать вид, что его не замечаю. Боюсь, никто мне не поможет.

Он так ползал целых три часа, что я даже утомилась и перестала на него вообще смотреть. И тогда он опять пополз ко мне за спину. Он опять потянулся своими руками к моему кошельку, но теперь я просто молчала, будто ничего не происходило. Он целых пять минут копошился с поясом, весь меня облапал и забрал те 2000 монет, что недавно заплатил.

Затем, счастливый, попрощался и ушёл.

Я чувствую себя мерзко, испачканной. Эта грязная вонючая скотина меня оскорбила, обокрала, унизила. Мне никто не помогает. Я боюсь за свою жизнь. Я чувствую стыд и беспомощность. Что теперь будет?

4 Начала морозов 4E201.

Прошёл еще месяц.

Мерзкая скотина теперь приходит каждый третий день и поступает по стандартному сценарию: продаёт мне свои бесполезные эликсиры, скупает мои ингредиенты, сжирает при мне новые, потом надевает мне на голову корзинку и забирает всё, что открыто лежит на прилавке. Затем он берет у меня уроки алхимии, ползёт на карачках ко мне за спину, лапает и забирает заплаченную сумму за уроки.

Когда он уходит, меня трясет от ненависти, злости, слез, бессилия и стыда.

Я время от времени пытаюсь продавать ему редкие самые ядовитые ингредиенты. Обычно, если кто-то съест сердце даэдры, синюю морозную поганку или драконью плесень, то он просто обязательно издохнет самой мучительной и ужасной смертью. Но этот урод их съедает, немного кривится, идёт помолиться Талосу, и все болячки с него сходят, как и не было.

4 Заката солнца 4E201.

Прошёл ещё месяц. Мерзкая тварь не изменяет своим привычкам, а я перестала надеяться его отравить, хотя и стараюсь находить для него новые ингредиенты. Порой мне кажется, что только из-за них он ко мне до сих пор и ходит.

Но что удивительно, когда местные узнали, что их великий драконорожденный является моим постоянным покупателем, чтоб он сдох, то поток клиентов увеличился в четыре раза. Стали приходить даже из соседних городов. Мой бизнес процветает. А те мелочи, что уволакивает гадкий упырь, то они ничто по сравнению с возросшими прибылями.

Со стрессом я справляюсь с помощью черновереского мёда (что-то он стал очень популярен в последнее время). Я до сих пор боюсь за свою жизнь, но жизнь в Скайриме никогда не была простой. И из этой беды я тоже выйду победительницей!

Показать полностью
80

Срезатель риса - реальная история из RimWorld

Я счастливый сорокалетний мальчик на побегушках, срезатель риса весной и летом, и единственный уборщик мусора во всё остальное время.

И я самый ценный житель поселения. Ведь как ещё объяснить то, что я дольше всех живу здесь, только у меня есть домашнее животное, и у меня самая большая комната с деревянной отделкой, ковром и двуспальной кроватью?

[Метафизическая идея картинки ржавого меча RimWorld]

Началось всё с аварийной посадки наших капсул на эту негостеприимную планету. Со мной выжили моя жена и её подруга. Мне повезло, так как также выжила и моя собака хаски. Я не простой космический турист. Раньше, ещё до начала космического перелёта, я был отличным доктором: я лучше всех в городе знал, как делать кровопускание кашляющему кровью пациенту. А когда требовалась сложная операция, то моя анестезия свинцовой дубинкой почти никогда не приводила к негативным последствиям у выживших пациентов. Во всяком случае никто из них ко мне не приходил повторно на приём, чтобы пожаловаться.

Как очнулись, мы сразу начали строительные работы, засеяли небольшую полянку рисом, которым я и начал заниматься. Моя супруга с подругой в основном занимались строительством, а я помогал с перетаскиванием бревен, кирпичей и остального хлама.

Иногда на нас по одиночке нападали какие-то полуголые оборванцы, вооруженные дубинами и ножами. На что они надеялись - непонятно. Я сражаться не любил, но мне повезло, так как мои соплеменницы умели пользоваться огнестрельным оружием, и у нас как раз были две винтовки. Сам я вообще не умел стрелять, поэтому таскал с собой большую дубинку и бронированные штаны. Так, на всякий случай.

После нападения очередного оборванца мне удалось захватить его живьём, и я начал его выхаживать. Оказалось, что он нормальный парень, который просто очень долго голодал и был уже на грани. Я думал, что смогу завербовать его к нам в поселение, когда он наконец выздоровеет (а ведь в нём было 5 огнестрельных ранений!).

Видя, как мне нравится ухаживать за больным, моя жена приволокла в комнату для военнопленных ещё одного подстреленного ею пациента. Удивительно, но оказалось, что это был гениальный ученый с далёкой планеты. Его силком заставили напасть на нас полудикое новое племя злобных соседей. Я уверен, что и его я смогу со временем завербовать к нам.

Однажды с нами на радиосвязь вышла давняя знакомая, которая просила освободить её из походного лагеря каких-то бандитов. Она уверила нас, что их всего то двое и у них нет никакого опасного вооружения. Посовещавшись, мы решили, что с такой задачей легко справятся моя жена с подругой с нашими двумя винтовками, а я останусь сторожить лагерь и пленников. Тут всего-то 3 дня пути и жалких два оборванца с палками!

Через 3 дня я получил короткое радио послание, что бандитский лагерь и вправду состоял только из двух бандитов, но у них были миномёты и снайперские винтовки. Мою жену и подругу убили. Так быстро, так просто...

Я обезумел от горя. Всё пропало. Самые дорогие мне люди погибли, а я остался один в этом диком безумном мире. И я решил, что с этим надо кончать. Никакого будущего у меня здесь нет. Вооружившись здоровенным ржавым мечом я отправился в комнаты раненых пленников и очень быстро окончил их страдания. Они совсем не сопротивлялись - в наручниках и колодках особо не побегаешь.

Потом я набросился на свою собаку хаски, нанеся ей две смертельные раны. Но собака начала сопротивляться, оставляя на мне глубокие укусы. Мы долго сражались, оставляя друг другу рваные раны, пол и стены забрызгали кровью. И тут хаски, извернувшись, прокусила мой позвоночник, полностью меня парализовав. Я думал, что сейчас она меня добьёт. Но нет. Хаски осторожно доволокла меня за шкирку в больничную постель, а потом доплелась до своего коврика. Мы оба лежали и истекали кровью...

Как выяснилось потом, мимо проходил таинственный незнакомец в чёрном. Это он вылечил и выходил меня и мою собаку. А потом восстановил поселение. Сначала нас было всего 2 человека. Но постепенно нас стало 10, так как незнакомец в черном всем помогал, проявлял гостеприимство, развивал поселение, строил оборону и развивал технологии.

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

Поглядите, вот моя шикарная личная комната с двуспальной кроватью, которая осталась еще со времен старого поселенья, когда была ещё жива моя жена. Вот какая-то записка на прикроватном комоде... "Дорогой друг, в связи с преобразованиями нашего процветающего поселения мы подготовили тебе уютную комнату с земляным полом рядом с посадками риса. А эту старую комнату, которая наверняка навевает тебе неприятные воспоминания, мы переоборудуем в склад пиломатериалов. Прошу поторопиться, твой друг, таинственный Джо в чёрном"... Ах он наркоманская скотина, я видел, что это он в одиночку выпил все запасы пива в холодильнике, хотя было решено никому их не трогать. Как они могли, я же первый! Это всё, это конец. Тупик. Тааак, где там мой старый верный ржавый меч...

Показать полностью
471

Способы применения и искажения меткости в играх. Наглядные графики для сравнения

Вычислять факт попадания в играх на основе полученной меткости можно по разному:

— сравнивая с одним псевдослучайным числом (которое тоже можно получать по разному [1]);

— сравнивая с наибольшим или наименьшим из двух псевдослучайных чисел;

— сравнивая среднее из двух и более случайных чисел (среднее тоже можно считать по разному).

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

Бонусы к меткости тоже можно реализовать по разному, вызывая тем самым у игроков раздражение по разными причинам.

Точно также по разному можно рассчитывать наносимый урон, особенно на основе дайсов (кубиков).

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

В статье будут представлены наглядные графики изменения реальных вероятностей в разных подходах, что позволит быстрее в них сориентироваться и принять лучшее решение.

=== Манипуляции с меткостью ===

Обычно, когда игроку сообщается, что меткость у персонажа равна 60%, то он воспринимает эту информацию как: «из 10 выстрелов я могу рассчитывать на 6 попаданий». И если из 10 попаданий он будет наблюдать 1 попадание вместо 6, то он почти наверняка посчитает, что случайность в игре поломана. Особенно сильно он в этом уверится, если такое случится на отрезке из 100 выстрелов. Чтобы избежать таких неприятностей, разработчики часто скрытно манипулируют с реальной вероятностью попадания (либо вообще отказываются от элемента случайности).

Например, в игре Fire Emblem: The Binding Blade для определения попадания с меткостью сравнивалось не одно случайное число, а среднее из двух случайных чисел [2].

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

Результат этой манипуляции таков, что меткие атаки (>50%) попадают значительно чаще, чем им полагается при нормальном распределении, а неметкие (<50%) попадают значительно реже. Вот как меняется это распределение вероятностей:

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

Для примера, при 10% показываемой меткости фактическая при этом является 1.9%. А при 75% фактическая будет 87.24%.


Но, если уж на то пошло, то менять меткость можно и многими другими способами.

Например, можно взять среднее из 3 случайных чисел:

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

Искажение в результате этого становится еще более разительным: меткость 10% становится 0.41%; меткость 75% становится 92.69%.


Впрочем, среднее можно высчитывать и как среднее геометрическое. Вот какие изменения будут при среднем геометрическом из 2 случайных чисел:

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

Тут 10% превращаются в 4.83%, а 75% в 88.18%. Но, что самое интересное, переход происходит при 30%, а не при 50%, как в среднем арифметическом. Поэтому если Вам хочется уж точно быть уверенными, что у игрока всегда будет преимущество, то достаточно удостовериться, что его минимальная меткость никогда не будет ниже 30%, а у врагов она будет настолько низкой довольно часто (для врагов можно использовать и среднее арифметическое, или что-то еще более искаженное).


Среднее геометрическое из 3 чисел приводит примерно к тем же результатам, но только с большим разбросом:

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

Тут 10% превращаются в 1.95%, а 75% в 93.98%.


Часто для усиления или ослабления каких-то навыков вводится и более простая манипуляция, когда из двух случайных чисел выбирается одно наибольшее или одно наименьшее:

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

В результате этого вероятность попадания меняется очень сильно. Например, при выбирании наименьшего числа меткость в 10% преобразуется в 19.02%, а меткость в 75% — в 93.75%.

Такой способ, например, используется в игре Neverwinter Nights в навыке «Скользкий разум», при котором в случае провала проверки на спасение производится повторная проверка на силу воли [3].

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

Neverwinter Nights 2 — Pixie Warrior [4]


Ниже приводится таблица искажения меткости при разных способах вычислений.

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

В прошлой статье про манипуляции с вероятностями был показан метод для очень редких событий, где со временем увеличивалась вероятность события:

Разработчик Carsten Germer использует функцию контролируемой случайности для редких и не только событий [5]. Например, чтобы гарантировать периодическое выпадение особо редкого бонуса с шансом 1 к 10000, он после каждого «промаха» увеличивает шансы по порядку: 1 к 9900; 1 к 9800; 1 к 9700… и так до фиксации события. А чтобы гарантировать отсутствие частых редкостей, он ввел дополнительную переменную, блокирующую срабатывание на 100% в течение 10 следующих проверок после прошлого срабатывания.

Заблуждения игроков при оценке рисков [1]


Вот как изменяется вероятность этого редкого события при использовании этого способа:

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

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


Ниже я привожу также изменение 1% события, что оно произойдёт хотя бы раз по мере роста числа попыток. Алгоритм искажения: первые 10 попыток — гарантированный промах. Затем с каждым промахом вероятность повышается на 1% (0,1% и 0,01%) до попадания. Потом всё с начала.

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

Впрочем, если ваша основная цель, как разработчика, гарантировать то, что пользователь в 1% событии не попадёт на серию из 1000 промахов подряд, то легче и прозрачнее будет после 200 промахов подряд выставлять 100% попадание. Это избавит вас от редких недоумений игроков и позволит оставить программный код лаконичнее и дружелюбнее для будущих доработок.



=== Разные способы начисления бонусов к меткости ===


Если бонусов к меткости в игре немного и они легко контролируются разработчиком, то проще всего использовать самый простой подход с линейным увеличением меткости простым сложением с базовой величиной. Этот способ легче всего внедрить в игру и всегда понятен игрокам. При таком подходе возможно достижение 100% меткости, что не всегда соответствует планам разработчика.

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост
Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост
Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

Если в игре планируется множество значительных бонусов к меткости, то, чтобы не переваливать за гарантированные 100% меткости, можно вычислять окончательную меткость как серию дополнительных бросков (чаще всего маловероятных по отдельности). Например, при меткости 70% и бонусе 50% окончательная вероятность попадания будет равна 85%, как проверка двух последовательных бросков, когда достаточно хотя бы одного попадания.

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост
Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост
Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

Немного экзотическим является подход по изменению сути бонуса к меткости на бонус уменьшения вероятности промаха.

// newAccuracy - новая меткость в %
// baseAccuracy - изначальная меткость в %
// bonusAccuracy - бонус к меткости в %
let newAccuracy = 100 - ( (1 - baseAccuracy * 0.01) / (1 + bonusAccuracy * 0.01) ) * 100;

Гарантирует, что всегда будет вероятность промаха при любом бонусе. Благодаря этому игра может давать бонусы к «меткости» больше 100%, хоть 1000%. И всё равно будет оставаться вероятность промаха. Но игрока это скорее может запутать, а, значит, и разочаровать.

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост
Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост
Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

Чаще всего используется подход с простым суммированием бонусов, как наиболее понятный для игрока, и лёгкий для реализации разработчиком.



=== Распределение урона на основе дайсов ===


Данный пункт целиком основан на наглядных данных публикации «Probability and Games: Damage Rolls from Red Blob Games [6]». Здесь я кратко представляю некоторые примеры и выводы этой публикации. В оригинальной статье Вы получите более детальные выводы и интерактивные графики распределений, а также интерактивно настраиваемые функции для подбора разных уникальных комбинаций.


Самый наглядный (но не единственный) пример различного подсчета урона дайсами представлен на основе вычисления урон при максимальном значении, равном 12. Результат может быть получен с помощью разных кубиков (например, если вы играете в настольную игру и каких-то специальных кубиков у вас нет):

1d12 — одним кубиком с 12 гранями

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

2d6 — двумя кубиками с 6 разными гранями

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

3d4 — тремя кубиками с 4 разными гранями

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

4d3 — четырьмя кубиками с 3 разными гранями

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

6d2 — шестью кубиками с 2 разными гранями

Способы применения и искажения меткости в играх. Наглядные графики для сравнения Игровая механика, Разработка игр, Меткость, Случайность, Gamedev, Манипуляция, Программирование, Компьютерные игры, Длиннопост

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

Заключение


Таким образом, были рассмотрены следующие темы:

— манипуляции с меткостью с помощью разных способов её проверки;

— разные способы начисления бонусов к меткости;

— различное распределение урона на основе дайсов.

Каждый из способов может быть полезен разработчику. Для игр с более казуальной аудиторией чаще выбирают щадящие алгоритмы, в которых вероятность успеха игрока завышается, а чтобы поднять азарт создаётся иллюзия маловероятной победы (подробнее в одной из прошлых статей: [7]).

Список литературы


1. Заблуждения игроков при оценке рисков. Контроль генератора случайных чисел в разработке.

2. Fire Emblem Wiki — Random Number Generator.

3. Neverwinter Nights 2 — Class Abilities — Slippery Mind.

4. Neverwinter Nights 2 — Pixie Warrior.

5. «Not So Random Randomness» in Game Design and Programming.

6. Probability and Games: Damage Rolls from Red Blob Games.

7. Генерация Close call в играх: «На волосок от поражения» или «Чуть-чуть не победил».

Показать полностью 24
792

Заблуждения игроков при оценке рисков. Манипуляции с генератором случайных чисел при разработке игры

Человеческий мозг по своей природе очень плохо умеет оценивать вероятность срабатывания случайных событий, на основании выданной числовой оценки. И довольно хорошо на основании качественных оценок. А все потому, что человек мысленно делает конвертацию числовых вероятностей в качественные оценки, и делает это очень субъективно:

— 80% попадания выстрела в игре — ну это почти гарантированное попадание;

— 80% того, что ваш товарищ хоть когда-нибудь отдаст долг — не-не-не, так не пойдёт, это слишком большой риск;

— 5% получения критического урона он NPC врага — маловероятно, риск можно игнорировать;

— 1% риск падения сосульки, если пройти под крышей с капающими метровыми сосульками — ещё чего, лучше обойти с другой стороны тротуара;

— 51% вероятность выигрыша в мини-игре в большой РПГ — можно рассчитывать на то, что после 20 ставок я чуть-чуть выиграю или, как минимум, останусь при своих… через 20 ставок… как такое могло случиться, что я проиграл половину всего своего золота? Тут явно сломан генератор случайных чисел!

Заблуждения игроков при оценке рисков. Манипуляции с генератором случайных чисел при разработке игры Final Fantasy, Fire Emblem, Gamedev, Генератор случайных чисел, Вероятность, Риск, Заблуждение, Манипуляция, Гифка, Длиннопост

В статье будут рассмотрены следующие вопросы:

— ошибочные допущения в оценке вероятностей;

— конкретные примеры заблуждений игроков и фактические вероятности «редких» событий;

— генератор случайных чисел (вообще-то псевдослучайных);

— ранние простые генераторы псевдослучайных чисел на примере Final Fantasy I;

— подходы к реализации случайных событий с воспроизводимостью и без;

— примеры удачно внедренных разных подходов и манипуляции в Fire Emblem.

I. Ошибочные допущения в оценке вероятностей


В процессе эволюции человеческий мозг учился очень хорошо оперировать качественными оценками событий и образами своего опыта. А числа и абстрактную числовую оценку вероятности «случайных» событий человек придумал сравнительно недавно [1]. Тем не менее эти числа человек в своих оценках всё равно преобразует в качественные представления: чуть-чуть, мало, много, опасно, безопасно, достаточно. Оценки эти всегда зависят от контекста и субъективного отношения к этому контексту. Именно это и является основной причиной ошибочных числовых допущений.


В качестве примера будет рассмотрена пошаговая игра Disciples 2 [2]. В данной части статьи не будет рассматриваться качество генерации случайных чисел конкретно в этой игре. Про их генерацию будет достаточно данных во второй части статьи.

Заблуждения игроков при оценке рисков. Манипуляции с генератором случайных чисел при разработке игры Final Fantasy, Fire Emblem, Gamedev, Генератор случайных чисел, Вероятность, Риск, Заблуждение, Манипуляция, Гифка, Длиннопост

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 код для консоли браузера и вычислен результат.

var P1 = [];
P1[0] = 1;
P1[1] = 1;
for (var n=2; n<=250; n++) {
P1[n] = 0.8 * P1[n-1] + 0.16 * P1[n-2];
console.log(n + ') ' + P1[n]);
}
// ответ: 250) 0.0001666846271670716

В итоге ответ: 0.0001666846271670716

Или 0.0167%


Этот ответ совпадает с ответом другого автора Kojiec9: 0.000166684627177505 [6], который использовал свой выработанный метод с пятиричной системой счисления и вычислил результат по своей формуле в Паскале. Незначительные различия в ответах, объясняются, судя по всему, округлениями float чисел.


Так вот, за 3 часа игры в Disciples 2 игрок имеет шанс избежать двойного промаха при 80% меткости всего в 0.0167%. Вот это уже действительно очень маловероятно. (а вероятность хотя бы одного двойного промаха, соответственно равна 99.9833%).

Заблуждения игроков при оценке рисков. Манипуляции с генератором случайных чисел при разработке игры Final Fantasy, Fire Emblem, Gamedev, Генератор случайных чисел, Вероятность, Риск, Заблуждение, Манипуляция, Гифка, Длиннопост

Рост вероятности хотя бы одного двойного промаха с ростом числа экспериментов


Про несовершенство и искажения человеческой памяти, кстати, вообще целые исследования и книги существуют: «Иллюзии мозга. Когнитивные искажения из-за переизбытка информации» [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].)

Заблуждения игроков при оценке рисков. Манипуляции с генератором случайных чисел при разработке игры Final Fantasy, Fire Emblem, Gamedev, Генератор случайных чисел, Вероятность, Риск, Заблуждение, Манипуляция, Гифка, Длиннопост

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].

Заблуждения игроков при оценке рисков. Манипуляции с генератором случайных чисел при разработке игры Final Fantasy, Fire Emblem, Gamedev, Генератор случайных чисел, Вероятность, Риск, Заблуждение, Манипуляция, Гифка, Длиннопост

Brogue roguelike — официальный сайт [14]

2. Зерно не фиксируется или обновляется каждый раз после перезагрузки.

Последствия для игрока: любая перезагрузка изменяет все расчеты в шансах попаданий.

Как игрок может злоупотребить этим: очень просто — несколько перезагрузок и самый маловероятный сценарий попадания может стать реальностью.

Положительные последствия для разработчика:

1) Игроки воспринимают такую игру как более честную с настоящей случайностью, просто из-за отсутствия знаний внутренних механик.

2) Игроки получают неофициальный лёгкий режим, который при желании позволяет сильно облегчить сложные участки.

3) Разработчик может прикрыть халяву разными методами: одним автосохранением на игру (то есть перезаписывание сохранений и перманентная смерть) или запретом сохранения во время миссии (в разных вариациях). А наиболее чувствительные участки (азартные мини игры) можно просчитывать на основании отдельного неизменного зерна, хотя технически это значительно труднее.

Пример:

Игра The Battle for Wesnoth [16] использует нефиксированное зерно с принципиально честной случайностью. Честность заключается в том, что иногда возможны совершенно маловероятные последовательности неудач, и движок игры их не корректирует. Результатом этого являются периодические гневные посты раздраженных игроков в адрес разработчиков игры.

Заблуждения игроков при оценке рисков. Манипуляции с генератором случайных чисел при разработке игры Final Fantasy, Fire Emblem, Gamedev, Генератор случайных чисел, Вероятность, Риск, Заблуждение, Манипуляция, Гифка, Длиннопост

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% случаев она гарантированно шла в направлении к Гру.

Заблуждения игроков при оценке рисков. Манипуляции с генератором случайных чисел при разработке игры Final Fantasy, Fire Emblem, Gamedev, Генератор случайных чисел, Вероятность, Риск, Заблуждение, Манипуляция, Гифка, Длиннопост

Grue the Monster - рогалик на Андроиде [19]

Самый интересный случай: в игре Fire Emblem: The Binding Blade [20] была реализована скрытая механика определения попадания при атаках [21]. Традиционно для серии вероятность попадания показывается игрой в процентах от 0 до 100%. В более ранних играх серии факт попадания определялся одним случайным числом от 1 до 100: если выпадающее число (например, 61) меньше или равно вероятности попадания (например, 75), то засчитывается удар, если больше, то промах.

Заблуждения игроков при оценке рисков. Манипуляции с генератором случайных чисел при разработке игры Final Fantasy, Fire Emblem, Gamedev, Генератор случайных чисел, Вероятность, Риск, Заблуждение, Манипуляция, Гифка, Длиннопост

Fire Emblem: The Binding Blade [20]


В данной части была введена щадящая система: вместо одного случайного числа бралось среднее двух случайных чисел, и это среднее сравнивалось со значением меткости. То есть случайное число в большей степени стремится к значению 50. Это приводит к искажению линейного эффекта случайности попадания: бойцы с меткостью больше 50% попадают чаще, чем в 50% случаев, а с меткостью меньше 50% значительно реже. А так как в игре подавляющее большинство персонажей игрока имеют большую меткость, а большинство врагов меньшую, то игрок получает очень серьёзное скрытое преимущество [21]. Ниже показан график этого эффекта, где синей линий показана частота попаданий в старой системе, а красной частота попаданий в новой в зависимости процента меткости атакующего. Например, при показываемой вероятности попадания в 90%, фактическая вероятность будет равна 98,1%, при 80% — 92,2%, а при 10% — всего 1,9%!

Заблуждения игроков при оценке рисков. Манипуляции с генератором случайных чисел при разработке игры Final Fantasy, Fire Emblem, Gamedev, Генератор случайных чисел, Вероятность, Риск, Заблуждение, Манипуляция, Гифка, Длиннопост

Искажение шанса попадания. По оси Y фактическая вероятность, по оси X — показываемая игроку


Это, безусловно, не единственные примеры манипуляций со случайными числами и балансом, но найти их очень сложно. Поэтому помощь сообщества здесь будет особенно ценной.


Хочу отметить, что я не отношу к манипулируемой случайности процедурную генерацию, как таковую. Пример: рогалик сгенерировал случайный уровень со случайным набором врагов, ловушек, стен и тупиков. Если при этом был создан уровень, который невозможно пройти, то пример кривой разработки, недостаточно продуманного проектирования или слабого тестирования. Разработчик обязан процедурно проверять хотя бы базовые проблемы случайной генерации:

— проход к выходу всегда должен быть хотя бы в единственном числе. Тут помогают любые алгоритмы поиска пути;

— серия ловушек должна иметь возможность обхода, и если их создаётся слишком много в одном месте, то алгоритм должен вычислить их плотность и удалить лишние;

— слишком сильные враги должны предоставлять хотя бы один из доступных способов их «прохождения»: грубой силой; свитками и зельями; особыми артефактами или возможностью просто от них убежать;

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

4. Вообще убрать элемент случайности из механики игры.


То есть результаты каждой атаки всегда имеют 100% вероятность попадания и фиксированный урон, а также постоянные правила срабатывания дополнительных эффектов. Вместо этого можно использовать случайные вычисления для косметических целей: периодические «позёвывания» ожидающих своего хода персонажей; отлетание чисел нанесенного урона; эффекты столкновений и взрывов. Тут нет никакой разницы, как генерировать случайные числа и насколько равномерно распределение.

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

Последствия для игрока: перезагрузка либо никак не влияет на результаты, либо влияет незначительно.

Как игрок может злоупотребить этим: игрок может вычислить или найти в сети стабильную доминирующую стратегию и использовать только её. Стоит отметить, что для определённых групп игроков это является основным интересом в игре.

Положительные последствия для разработчика: разработчику значительно легче сбалансировать такую игру. Как минус — при этом возникающие доминирующие стратегии становятся стабильными, а значит, даже невезение игрока не сможет привести его к поражению, а приводит к исчезновению всяких неожиданностей, скуке и удалению игры. Игроки высокого класса почти всегда будут выигрывать у игроков классом пониже, для различных типов игр это может быть как преимуществом, так и недостатком.

Пример:

Любые шахматы с классическими правилами.

Также сюда подходят логические roguelike. Например, очень хорошо данный метод реализован в Desktop Dungeons Alpha [22].

Заблуждения игроков при оценке рисков. Манипуляции с генератором случайных чисел при разработке игры Final Fantasy, Fire Emblem, Gamedev, Генератор случайных чисел, Вероятность, Риск, Заблуждение, Манипуляция, Гифка, Длиннопост

Desktop Dungeons Alpha [22]


Здесь результаты последовательности атак всегда одинаковы и заранее просчитываемы. Однако за счет случайной (процедурной) генерации игровых подземелий и наличия тумана войны, игра приобретает свою уникальную реиграбельность лучших рогаликов.


Заключение


Таким образом, в статье рассмотрены две подтемы случайности в играх:

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

Генерация псевдослучайных чисел. Описаны разные подходы к использованию случайности. Удачные примеры реализации показывают, что независимо от выбранного подхода игра может получится интересной, неожиданной и с хорошей степенью реиграбельности.

Осознанное последовательное использование выбранного подхода позволяет разработчикам подчеркнуть их положительные стороны и максимально нивелировать их отрицательные.

Источники литературы

1. История математики, теория вероятностей — Википедия.

2. Disciples 2 — GOG Gold.

3. Disciples 2 — комментарий про кривой рандом №1.

4. Disciples 2 — комментарий про кривой рандом №2.

5. Решение рекуррентных соотношений.

6. Цитата с решением задачи от пользователя Serbbit.

7. Иллюзии мозга. Когнитивные искажения из-за переизбытка информации.

8. Не верьте своему мозгу.

9. Игровой аппарат изнутри и снаружи. Обзор от производителя.

10. Level 5: Probability and Randomness Gone Horribly Wrong.

11. Генератор псевдослучайных чисел — Википедия.

12. How classic games make smart use of random number generation.

13. Controlling luck in video games — Pokemon Colosseum and XD.

14. Brogue roguelike — официальный сайт.

15. The Brogue Seed Scummer.

16. The Battle for Wesnoth.

17. Супер ловкая русалка в Wesnoth.

18. «Not So Random Randomness» in Game Design and Programming.

19. Grue the Monster roguelike на Андроиде.

20. Fire Emblem: The Binding Blade.

21. Random Number Generator in Fire Emblem.

22. Desktop Dungeons Alpha roguelike.

Показать полностью 10
9

Математическая задача: Какая вероятность того, что к выходу на пенсию енот Михаил сохранит свою правую лапу?1

Енот Михаил за свою трудовую жизнь совершает 250 вылазок за мусором к соседу Бобролюдову.

Вероятность того, что енот Михаил найдёт еду, равна 80%.

Вероятность того, что не найдёт, равна 20%.

Если енот Михаил не найдёт еду 2 раза подряд, то ему от отчаяния придётся съесть свою правую лапу.

Вопрос: какая вероятность того, что к выходу на пенсию енот Михаил сохранит свою правую лапу?

Отличная работа, все прочитано!