Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Yan_Shrayber_-_vse_3.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
8.77 Mб
Скачать

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

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

Да, кстати, надеюсь, вы дали игроку карту и предупредили его, как часто можно сохраняться в среднем, и указали на карте ОГРОМНЫМИ СТРЕЛКАМИ места, где должны случится ключевые битвы, чтобы игроку не приходилось перепроходить большие участки карты просто потому, что он не знал заранее, где лучше всего сохраниться. Но тогда ваши игроки будут жаловаться, что игра слишком простая, потому что выдаёт всю информацию о том, где именно будет сложно.

Выбирайте из множества зол

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

Когда псевдослучайные числа подводят

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

  1. Начать с нетасованной колоды.

  2. Сгенерировать псевдослучайное число, которое соответствует какой-либо карте в колоде (то есть, если колода из 52, нужно сгенерировать число от 1 до 52… или от 0 до 51, в зависимости от языка, который вы используете). Назовём это число А.

  3. Сгенерируйте второе псевдослучайное число, таким же образом. Назовём его числом Б.

  4. Поменяйте карты под номерами А и Б местами.

  5. Повторяйте шаги 2-4 много-много раз.

Проблема тут в том, что, во-первых, чтобы получить нечто, похожее на случайный порядок, у вас уйдёт неприлично много времени. Во-вторых, из-за того, что стартовые позиции карт фиксированы, и вы просто меняете местами случайные пары по одной за раз, неважно сколько раз вы это повторите – шанс получить тот же порядок, что и при старте, всегда будет выше. Представьте это так: если карта меняет своё место, она занимает случайную позицию, так что все позиции одинаково вероятны для каждой карты, если её вообще перемещали. Многократная перемена мест не меняет сути дела: карта перемещается с одного случайного места в другое, так что в конце концов, любая позиция карты равновероятна. То есть, каждая перемещённая карта с равной вероятностью может оказаться где угодно, с равной базовой частотой (и это хорошо). Однако есть некоторый ненулевой шанс, что карта не будет перемещена, и в этом случае она останется на своём изначальном месте, таким образом суммарный шанс того, что она останется там, где была, гораздо выше. Чем больше раз вы произвели замены, тем ниже шанс, что карта останется на своём месте, но сколько бы вы ни меняли карты местами, вы никогда не снизите эту вероятность до 0. Как это ни странно, но это значит, что самый вероятный расклад в этом алгоритме – это увидеть все карты на тех же местах, с которых они начинали!

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]