Читаем без скачивания Математическое руководство по созданию компьютерных игр. Справочник - Алексей Патрашов
Шрифт:
Интервал:
Закладка:
В двухмерных и трёхмерных мирах для расчёта экскурсионного времени введём понятие радиуса обзора, то есть радиуса в котором игрок увидит все подробности устройства мира независимо от расстояния, если оно меньше радиуса обзора. Таким образом игровое пространство будет открываться либо полосой определённой ширины, либо сферой определённого радиуса и определённой площадью проекции. В таком случае экскурсионное время в зависимости от размерности игрового мира будет определяться по формулам.
для двухмерного и
для трёхмерного мира.
В трёхмерном мире приходится вводить сложные коэффициенты заполнения для того, чтобы охватить каждую точку пространства потому, что ближайшей по форме к окружности, которой является проекция сферы на плоскость, фигурой с полным заполнением плоскости является правильный шестиугольник. Краевые неточности заполнения при вычислении экскурсионного времени не учитываются и считаются допустимой погрешностью.
Влияние числа игроков или мало нас
Игра может быть предназначена для одного, нескольких или множества игроков. В зависимости от этого игру принято называть однопользовательской, многопользовательской или MMO. Многопользовательский режим может быть обязательным или необязательным. Чаще всего встречается необязательный многопользовательский режим при котором в игру можно играть как одному, так и вместе с другими игроками. Многопользовательский режим в игре может присутствовать, а может и отсутствовать. Способов применения многопользовательского режима может быть много.
Рассмотрим несколько способов применения многопользовательского режима. Первый режим предусматривает единое игровое пространство для всех игроков, что позволяет им непосредственно взаимодействовать друг с другом. Второй режим позволяет использовать по желанию общее или отдельное игровое пространство для одиночной игры. Третий режим позволяет играть только в отдельном игровом пространстве, но сохраняет возможность передачи предметов между игроками. В игре могут сочетаться несколько игровых режимов одновременно как для всей игры, так и для некоторых её мест. Порядок их сочетания может быть обязательным или необязательным.
В многопользовательском режиме игроки могут свободно перемещаться по игровому миру, что может приводить к их скоплениям в одних местах и отсутствию в других. Скапливаться игроки могут по уровням, заданиям, поиску ресурсов, местам наличия мобов и прочим признакам. Но если задаться некоторыми принципами распределения, а именно, чтобы игроки находились друг от друга на определённом расстоянии, то при заданных размерах игрового мира в нём при соблюдении заданного условия может поместиться ограниченное количество игроков при максимальном наполнении игры, то есть существует максимальная плотность игроков. Для удобства и определённости мы примем за минимальное расстояние радиус обзора.
К счастью для нас задачу с плотностью объектов и взаимным их расположением уже давно решили в другой области. Для кристаллических решеток давно придуманы понятия точечных групп, решеток Браве, пространственных групп и сингоний. Чтобы не запутаться в кристаллографии мы просто представим себе, что у нас игроки расположены в вершинах правильных треугольников для плоского случая задачи и в вершинах правильных тетраэдров для объёмного случая. Таким образом в плоском случае у нас получаются равные шаги трансляций под углом 120° и ромбовидная элементарная ячейка, а во втором случае мы не будем использовать углы, а просто сразу по характеристикам правильного тетраэдра вычислим объём элементарной ячейки. На рисунках 5а и 5б показаны примеры для обоих случаев размерностей задачи.
После того, как в многопользовательском режиме определены максимальные протяженность, площадь или объём на одного игрока, которые определяется отсутствием других игроков в радиусе обзора R мы можем получить формулы плотности игроков на единицу размерности игрового пространства. Для миров с разными размерностями формулы существенно различаются. Самая простая формула связывает радиус обзора и плотность в одномерном мире. В двухмерном мире мы применили построение игроков по треугольной решетке с ячейкой в виде ромба из двух равносторонних треугольников. Самый сложный случай представляет объёмная плотность с решеткой расстановки по вершинам тетраэдра. Её элементарная ячейка определяется равным шагом трансляций по трём направлениям и равными углами между направлениями. Ниже приведены формулы соответственно для линейной, распределённой и объёмной плотностей игроков.
линейная,
распределённая и
объёмная
Во всех случаях мы использовали наиболее плотные решетки размещения игроков по игровому пространству. Если бы мы применили прямоугольное размещение, то получили бы отличающиеся в какое-то число раз формулы соответственно для каждого случая, кроме первого.
линейная,
распределённая и
объёмная
Сам многопользовательский режим может влиять или не влиять на сложность игры. Решить этот вопрос достаточно сложно и решение получается неоднозначным. Также возможны и разные способы решения с разным объяснением каждого подхода. Простейший способ это просто никак не влиять на уровень сложности, а также на получаемый опыт, если таковой в игре имеется. Недостатки этого режима очевидны: или слишком легко всем, или слишком тяжело одному. Деление опыта и усиление противников по числу игроков в игре помогает, но порождает следующую проблему: десять игроков играют в игре и девять из них в одном месте, а один где-то далеко и получает он меньше опыта в десять раз, а играть ему тяжелее в десять раз.
Рисунок 5а. Элементарные ячейки для плоского случая.
Рисунок 5б. Элементарные ячейки для объёмного случая.
Если опыт можно привязать к нанесённому урону и в соответствии с ним поделить, то уровень сложности игры делить гораздо сложнее. Первое, что напрашивается, это вычислить плотность игроков и привязать уровень сложности к ней или вычислить количество игроков в определённом радиусе от каждого противника и привязаться к нему или к функции от их количества и уровня. Но при таком подходе мы не можем заметить разницу между одновременным боем всеми с одним противником или каждого с индивидуальным.
Хорошего решения можно достигнуть, если учитывать не просто всех игроков подряд, а только тех, кто ведёт бой с противником. Таким образом разделение и вычисление происходят автоматически по мере вступления в бой с каждым противником новых игроков. Чтобы окончательно выровнять баланс, надо вести учёт получаемого опыта для каждого отрезка боя между вступлением в него новых участников, иначе начинающие бой будут в проигрыше.
Всё вышеизложенное может касаться как всех находящихся в игре игроков, так и на объединённых в один отряд. Ведение боя отрядом порождает дополнительные трудности, если в отряде существует разделение выполняемых задач. Так некоторые участники боя могут вообще не наносить урона противнику, а другие просто сдерживать противника, но тогда опыт либо придётся делить между всеми равномерно, либо вводить зависимость от выполняемой задачи. Также надо учитывать уровни членов отряда иначе опыт может распределиться поровну на участников разных уровней или неравномерно на участников одного уровня.
На перечисленных примерах влияние многопользовательского режима не заканчивается. В некоторых случаях, когда игра заранее ориентирована на многопользовательский режим, особые ухищрения вообще могут оказаться не нужны и достаточно просто позаботиться о правильном распределении опыта и добычи.
Перезагрузки и переигрывания или прохождение перезагрузками
Игра тем и отличается от суровой действительности, что в ней всё можно переиграть столько раз, сколько захочется. Только способы переигрывания существенно различаются в разных играх в зависимости от способа сохранения игры. Если игра сохраняется на компьютере у игрока да ещё и в любой момент, то переигрывать можно хоть каждую минуту. Если игра может сохраняться только в определённых местах, то переигрывать становится сложнее, а если игра сохраняется только при выходе, то переигрывание с начала невозможно только формально потому, что файл сохранения можно скопировать и при необходимости восстановить. Это всё относится к локальному сохранению потому, что сохранение на сервере уже для копирования недоступно.