Вы думали как устроена игра пак ман? Я нет. Мне всегда казалось что все враги в каком-то хаотичном порядке двигаются, пока не начал изучать. Подписывайтесь на тг канал а мы начинаем разбирать.
Мне кажется правильным начать этот блог с темы, которая вдохновила меня в первую очередь. Не так давно я наткнулся на статью Jamey Pittman «Pac-Man Dossier», в которой приводилось очень детальное описание механики игры Pac-Man. Она показалась мне очень интересной, поэтому этот сайт — попытка собрать такую же детальную информацию об остальных играх. Но в дань уважения я все же начну с Pac-Man, а в частности, с описания алгоритма поведения привидений. Это очень интересная тема и, надеюсь, мое объяснение будет немного более понятным и доступным, чем у Джейми, потому что я сосредоточусь лишь на поведении.
Об игре:
«В то время все доступные игры были очень жестокими — игры о войне и космических захватчиках. Не было ни одной игры для всех сразу, а особенно, которые понравились бы девушкам. Я хотел придумать «комическую» игру, которой могли бы наслаждаться даже девушки»
— Toru Iwatani, создатель Pac-Man
Pac-Man — одна из самых культовых видеоигр всех времен, знакомая большинству людей, даже тем, кто не увлекается играми. Суть игры предельно проста: игроку предстоит перемещаться по лабиринту, заполненному точками («едой»), которые необходимо собрать, чтобы перейти на новый уровень. Задача усложняется четырьмя привидениями, которые постоянно охотятся на главного героя. Встреча с любым из них приводит к потере жизни и возвращению на стартовую позицию, а также исчезновению собранных ранее точек. Единственная защита игрока — четыре энергетических пилюли, расположенные в углах лабиринта. После употребления одной из них привидения временно становятся уязвимыми, позволяя Пэкмену избежать опасности или даже съесть одного из врагов ради дополнительных очков. Стоит отметить, что после поглощения привидение не исчезает навсегда, оно лишь возвращается на исходную позицию, готовое снова вступить в игру. Помимо сбора точек и борьбы с привидениями, есть ещё один способ заработать бонусы — фрукты, появляющиеся в центре лабиринта. Первый фрукт появляется, когда Пэкмен собирает 70 точек, а второй — после 170.
На каждом уровне Pac-Man используется один и тот же лабиринт, содержащий 240 точек («еды») и 4 энергетических пилюли. Игрок и привидения могут воспользоваться туннелями, ведущими из левой и правой сторон экрана, чтобы мгновенно переместиться на другую сторону, однако стоит учесть, что скорость привидений в этих туннелях заметно снижается. Хотя сам лабиринт остается неизменным, сложность уровней возрастает благодаря увеличению скорости как Пэкмена, так и его противников-привидений. После достижения 21-го уровня игра перестает становиться труднее, и все последующие уровни остаются такими же сложными, как и этот.
Общие элементы поведения всех привидений
«Ну, игра про еду — не такое уж большое развлечение, поэтому мы решили вдохнуть немного волнения и напряжения и добавили врагов. Игрок должен был бороться с ними, чтобы получить пищу. Каждый из врагов имеет собственный характер. Враги — это четыре маленьких монстра по форме напоминающих привидений, каждый своего цвета — синего, оранжевого, розового и красного. Я использовал четыре разных цвета в основном для того, чтобы привлечь к игре девочек, я думал им понравятся разные цвета»
— Toru Iwatani, создатель Pac-Man
Все привидения обладают уникальными особенностями и используют разные алгоритмы для выбора пути преследования. Чтобы успешно избегать встреч с ними, важно понимать поведение каждого из них. Но прежде чем углубляться в индивидуальные черты, рассмотрим общие аспекты их действий.
Домик привидений
Когда игра стартует, Пэкмен не сталкивается сразу с нападением всех четырёх привидений. Как видно на схеме начальной расстановки, только одно из них начинает охоту, тогда как остальные находятся в центральной части лабиринта, известной как «дом призраков». За исключением уровня для новичков, после того как Пэкмен съест привидение, воспользовавшись энергетической пилюлей, или потеряет жизнь, эти привидения вернутся обратно в свой «дом». В остальных ситуациях ни Пэкмен, ни сами привидения не могут попасть внутрь этого укрытия. При выходе из «дома» привидения обычно движутся влево, за исключением некоторых особых случаев, которые будут рассмотрены позже.
Условия, определяющие, когда три оставшихся призрака покидают свой дом, на самом деле достаточно сложны. Поэтому я оставлю их описание за пределами этой статьи, тем более они перестают быть актуальны после первых нескольких уровней. Если вам все же интересно, то «Pac-Man Dossier», упомянутое в начале статьи, охватывает и их.
Целевая клетка
Большая часть игровой механики Pac-Man основывается на делении лабиринта на клетки размером 8x8 пикселей. Общий экран оригинальной игры имел разрешение 224x288 пикселей, что соответствует сетке из 28x36 клеток, хотя доступными для передвижения являются далеко не все из них. Например, считается, что привидение поймало Пакмена, если оба персонажа оказываются в одной и той же клетке. Каждая точка еды в лабиринте расположена точно в центре своей клетки. Важно отметить, что размеры спрайтов персонажей больше одной клетки, поэтому они занимают несколько клеток одновременно. В игре учитывается, что персонаж находится в определенной клетке, если её центр совпадает с центром спрайта. Это имеет значение при попытке уйти от привидений, поскольку Пакмен будет пойман только в случае, если привидение перенесёт свою центральную точку в ту же клетку, где находится главный герой.
Понимание алгоритмов поведения привидений основано на концепции «целевой клетки». Большую часть времени каждое привидение стремится достичь определённой клетки, и именно это стремление определяет его маршрут. Все привидения используют один и тот же метод для достижения цели, но их уникальность проявляется в выборе самой целевой клетки. Важно отметить, что целевая клетка не обязательно должна быть доступной для привидения — зачастую она оказывается недостижима, и именно это обстоятельство объясняет многие особенности их поведения. Позже мы подробнее остановимся на клетках, а пока следует помнить, что привидения практически всегда целенаправленно стремятся достигнуть своей текущей целевой клетки.
Режимы передвижения призраков
Привидения могут находиться в одном из трёх режимов: преследовании (Chase), разбегании (Scatter) или страхе (Frightened). Нормальный режим — это преследование, в котором привидения проводят большую часть времени, стараясь настичь Пакмена, ориентируясь на его местоположение при выборе своей целевой клетки. В режиме разбегания каждый привидение направляется к своей фиксированной клетке, расположенной вблизи углов лабиринта, что заставляет их рассеиваться по углам. Режим страха отличается отсутствием у привидений целевой клетки. Вместо этого они случайным образом выбирают направление на каждом перекрёстке. В этом режиме привидения становятся тёмно-синими, замедляются и могут быть съедены Пэкменом. Однако длительность этого состояния сокращается с повышением уровня и полностью исчезает на 19-м уровне.
«Чтобы внести в игру некоторое напряжение, я хотел, чтобы монстры могли окружить пэкмена на определенном этапе игры. Но я чувствовал, что это создавало бы стресс для игрока, если бы он постоянно был окружен призраками. Поэтому я сделал, чтобы монстры окружали его волнами: сначала атака, потом отступление. Когда они перегруппировывались, атака начиналась снова. Мне показалось это натуральнее, чем постоянное нападение»
— Toru Iwatani, создатель Pac-Man
Переходы между режимами преследования и разбегания регулируются фиксированным таймером, вызывающим так называемые «волны», описанные Iwatani. Таймер сбрасывается в начале каждого уровня или после гибели Пакмена. Также он останавливается, когда привидения входят в режим страха, что случается после того, как Пакмен съедает энергетический шар. Затем привидения возвращаются в прежний режим, и таймер продолжает отсчёт. Игра начинается с режима разбегания, и существует четыре цикла переключения между преследованием и разбеганием, после которых привидения остаются в режиме преследования неограниченно долго (до следующего сброса таймера). Продолжительность этих циклов на первом уровне следующая:
1. Разбегание длится 7 секунд, затем 20 секунд погони.
2. Разбегание продолжается 7 секунд, затем 20 секунд погони.
3. Разбегание длится 5 секунд, затем 20 секунд погони.
4. Разбегание длится 5 секунд, после чего наступает бесконечная погоня.
Эти фазы немного меняются на втором уровне, а затем снова на пятом. Со второго уровня третья фаза погони существенно продлевается до 1033 секунд (17 минут 13 секунд), а фаза разбегания сокращается до 1/60 секунды, после чего привидения вновь переходят в постоянный режим преследования. Начиная с пятого уровня, первые две фазы разбегания уменьшаются до 5 секунд, а третья фаза погони дополнительно продлевается на 4 секунды, достигая 1037 секунд. Хотя фаза разбегания длительностью 1/60 секунды на всех уровнях, кроме первого, кажется незначительной, её влияние на игровой процесс будет объяснено позже.
Основные правила поведения призраков
Чтобы лучше понять поведение привидений, важно разобраться, каким образом они пытаются достичь своей целевой клетки. Искусственный интеллект привидений довольно прост и прямолинеен, что делает его ещё более интересным. Они принимают решения, опираясь только на ближайший шаг. Каждый раз, когда привидение попадает на новую клетку, оно просматривает возможные направления движения и выбирает следующее. Есть одно ключевое правило: привидения никогда не могут развернуться и пойти назад. Другими словами, если привидение вошло в клетку с одной стороны, оно не может тут же развернуться и выйти с той же стороны. Это означает, что если привидение попадает в клетку с двумя возможными путями, оно продолжит движение вперёд, исключив путь возврата.
Однако есть одно исключение из этого правила: когда привидения меняют режим с преследования или разбегания на любой другой, они обязаны сменить направление движения при переходе на следующую клетку. Это требование аннулирует любые предыдущие решения относительно направления. Такое поведение служит сигналом для игрока о смене режима, ведь это единственное условие, при котором возможен разворот. Примечательно, что при выходе из режима страха привидения не меняют направление. Таким образом, 1/60-секундный режим на каждом уровне после первого вынуждает привидений пересматривать свои маршруты, даже если их цель остаётся прежней. Интересно, что аналогичное поведение запрограммировано для привидений внутри «домика»: если привидение не успело покинуть домик во время первого переключения режимов, оно выходит из него задом наперёд. Это заставляет их сначала двигаться влево, а затем немедленно менять направление и идти вправо.
На приведённом выше рисунке представлен упрощённый вариант лабиринта. Клетки, требующие принятия решения, выделены зелёным цветом.
При необходимости выбора направления привидение оценивает ближайшие клетки и выбирает ту, которая приблизит его к цели по кратчайшему расстоянию. Для этого измеряется дистанция от каждой потенциальной клетки до целевой, и предпочтение отдаётся ближайшей. На следующей схеме показано, что на перекрёстке привидение выберет верхний путь, если два варианта находятся на равном расстоянии от цели. Если варианты равноценны, выбор осуществляется согласно следующим приоритетам: верх > лево > низ. Таким способом выбор движения направо невозможен, так как другие варианты всегда будут предпочтительнее.
Поскольку выбор направления основан на минимальном прямом расстоянии до цели, привидение иногда может совершить неверный манёвр, выбрав путь, который короче по прямой, но длиннее в пределах лабиринта. Пример такой ситуации представлен ниже: измерение по прямой указывает на левый поворот, хотя это не самый оптимальный выбор. Такой путь потребует прохождения 28 клеток до цели, в то время как правый поворот сократил бы маршрут до 8 клеток.
Последний частный случай касается клеток, выделенных жёлтым на схеме. Эти пересечения имеют особые ограничения: привидения не могут выбирать путь вверх, находясь в этих клетках. Если они попадают сюда справа или слева, они могут продолжить движение только вперёд (за исключением ситуаций, когда смена режима требует обязательного поворота). Однако это ограничение не действует в режиме страха, так как в нём привидения случайно выбирают направление на каждом пересечении. Также, если привидение входит в эту клетку сверху при переключении режимов, оно может двигаться вверх. Поэтому данное ограничение актуально только при обычном движении, без исключений. Если Пэкмен убегает от привидений поблизости от этих клеток, он может получить преимущество, свернув вверх, так как привидениям придётся выбирать более длинный обходной путь.
Индивидуальные аспекты поведения врагов
«Это сердце игры. Я хотел, чтобы каждый враг имел свой специфичный характер собственных движений, поэтому они не преследуют пэкмена по одному и тому же пути, это было бы утомительно и не интересно»
— Toru Iwatani, создатель Pac-Man
Как уже отмечалось, единственным различием между привидениями является их методика выбора целевых клеток в режимах преследования и разбегания. Начнем с рассмотрения поведения привидений в режиме разбегания, так как это достаточно простой механизм, а затем проанализируем их стратегию в режиме преследования.
Режим разбегания
В этом режиме каждый привидение имеет заранее установленную целевую клетку, находящуюся за пределами лабиринта возле одного из углов. Когда активируется данный режим, привидения поворачиваются лицом к своему углу и начинают двигаться по стандартному алгоритму поиска пути. Поскольку их цели недоступны, а привидения не могут остановиться или развернуться, они продолжают попытки достичь своей цели, делая развороты и возвращаясь к ней снова. В итоге траектория каждого привидения принимает форму петли вокруг соответствующего угла. Если бы режим разбегания продолжался бесконечно, привидения продолжали бы кружить по своим петлям тоже бесконечно. Однако на практике этот режим настолько короткий, что привидения редко успевают достичь своих углов или завершить полный круг. На нижней схеме показаны целевые клетки для каждого персонажа и петли, которые они могли бы описать.
Красное привидение
Красное привидение, известное как «Блинки», начинает игру вне «дома привидений» и представляет собой первую серьёзную угрозу для Пакмена, так как оно незамедлительно прокладывает кратчайший путь к нему. Личность Блинки описывают как «тень» (shadow), а японское название oikake переводится как «преследователь» или «охотник». Оба описания весьма точны, поскольку в режиме преследования целевая клетка Блинки совпадает с текущим положением Пакмена. Это значит, что Блинки непрерывно преследует Пакмена, за исключением моментов, когда его ограниченная логика приводит к выбору менее эффективного маршрута.
Хотя метод выбора цели у Блинки довольно прост, у него есть уникальная особенность, отсутствующая у других привидений: на определённых координатах в каждом уровне (зависящих от количества оставшихся точек) его скорость увеличивается на 5%, а поведение в режиме разбегания меняется. Время активации этого эффекта варьируется в зависимости от уровня и наступает всё раньше по мере продвижения игрока.
Изменения в поведении Блинки в режиме разбегания, вероятно, более значимы, чем увеличение скорости. Теперь его целевая клетка всегда совпадает с позицией Пакмена, независимо от режима, вместо фиксированной клетки в верхнем правом углу. Это фактически удерживает Блинки в постоянном режиме преследования, хотя он обязан развернуться при смене режима. В этом особом состоянии Блинки часто называют «Cruise Elroy», хотя происхождение данного термина остаётся загадкой. Даже знаменитый гайд «Pac-Man Dossier» не даёт точного объяснения. Если Пакмен погибает, когда Блинки находится в режиме Cruise Elroy, он временно возвращается к обычному поведению до тех пор, пока другие привидения не покинут «дом привидений».
Розовое привидение
Розовое привидение, известное как «Пинки», начинает игру в «доме привидений», но сразу же покидает его, даже на первом уровне. Его личность описывают как «быструю» (speedy), что заметно отличается от японского описания — machibuse, что переводится как «засадный». Японский термин точнее отражает суть, так как Пинки не движется быстрее других привидений (даже медленнее, чем Блинки в режиме Cruise Elroy), а его система поиска цели направлена на перемещение туда, куда Пэкмен собирается отправиться, а не на его текущее местоположение. Целевая клетка Пинки определяется исходя из текущего положения и направления Пэкмена и устанавливается на четыре клетки впереди него. Эта задумка работала корректно, когда Пэкмен двигался влево, вниз или вправо. Однако, когда Пакмен шёл вверх, из-за ошибки переполнения в коде целевая клетка Пинки смещалась на четыре клетки вперёд и четыре клетки влево от Пакмена. Я не собираюсь пугать людей, незнакомых с программированием, но если вас интересуют технические подробности этого бага, Дон Ходжес написал отличное объяснение , включающее оригинальный код для поиска цели Пинки и исправленную версию.
Одним из ключевых следствий метода выбора цели у Пинки является то, что Пакмен часто может обыграть его в «куриной» игре (термин взят из Википедии, где описан сценарий, когда два водителя едут навстречу друг другу, и один из них в последнюю секунду сворачивает).
Поскольку целевая клетка Пинки располагается на четыре клетки впереди Пакмена, если Пакмен движется прямо на него и они находятся на расстоянии менее четырёх клеток друг от друга, целевая клетка Пинки оказывается позади него. Это заставляет Пинки совершать обходной манёвр, чтобы достичь своей цели. Поэтому стандартной стратегией против приближающегося Пинки было резкое изменение курса, чтобы запутать его. Часто это заставляло Пинки двигаться в совершенно другом направлении.
Синее привидение
Привидение по имени Инки некоторое время остаётся в «домике» на первом уровне и не начинает преследование, пока Пэкмен не съест как минимум 30 точек. На английском его характеризуют как «застенчивого» или «робкого» (bashful), а на японском — kimagure, что означает «капризный» или «причудливый». Поведение Инки трудно предсказуемо, так как это единственное привидение, которое в своём преследовании учитывает не только положение Пакмена, но и положение и направление Блинки (красного привидения). Метод выбора цели у Инки выглядит так: он выбирает клетку на две клетки впереди Пакмена (как Пинки), затем мысленно создаёт вектор от Блинки до этой точки и удваивает его длину. Конечная точка этого вектора и становится целью Инки.
Таким образом, цель Инки может находиться где угодно, пока Блинки не подходит близко к Пакмену. Но если Блинки удаётся приблизиться, Инки последует его примеру. Стоит отметить, что расчёт «двух клеток впереди Пакмена» подвержен той же ошибке переполнения, что и у Пинки, поэтому, если Пакмен движется вверх, конечная точка вектора (до удвоения) окажется на две клетки слева от Пакмена.
Оранжевое привидение
Оранжевое привидение, известное как «Клайд», остаётся в «доме» дольше всех и не покидает его, пока не будет съедена как минимум треть точек. На английском его личность описывают как «тюремщика» (pokey), в то время как японское слово otoboke переводится как «притворяться, что игнорируешь». Последний вариант более точно отражает суть, так как метод выбора цели Клайдом создаёт впечатление, будто он просто «делает своё дело», никак не связанное с Пакменом. Уникальной особенностью Клайда является наличие двух режимов, которые переключаются в зависимости от расстояния до Пакмена. Каждый раз, когда Клайд рассчитывает свою целевую клетку, он вначале проверяет расстояние до Пакмена. Если оно превышает восемь клеток, он ведёт себя как Блинки, то есть его целью становится сам Пакмен. Однако, как только расстояние до Пакмена сокращается до восьми клеток или меньше, его целевая клетка переносится туда, где она находилась бы в режиме разбегания, неподалёку от левого нижнего угла лабиринта.
Комбинация этих двух подходов приводит к тому, что Клайд постоянно меняет направление, то приближаясь к Пакмену, то уходя в противоположную сторону. На схеме выше крестиками помечены точки, в которых происходит переключение режимов. Следовательно, если Пакмену удастся остаться на месте, Клайд будет бесконечно вращаться по этой петле. Пока игрок не находится в левом нижнем углу лабиринта, есть уверенность, что Клайда можно обойти, если оставить свободным путь к его углу. Пока Пакмен находится на расстоянии восьми клеток от левого нижнего угла, петля Клайда будет иметь такую же траекторию, как и в режиме разбегания.
Заключение
Если вы дочитать до этого момента, то теперь должны обладать полным пониманием логики движения привидений в Pac-Man. Осознание их поведения, скорее всего, ключевой шаг на пути к тому, чтобы стать хорошим игроком в Pac-Man. Сам я никогда не был особенно силён в этой игре, но, проводя исследования для статьи и проверяя различные моменты, я заметил, что стал успешнее избегать привидений, чем раньше. Даже минимальное знание помогает в игре, например, осознание того, что в режиме разбегания у вас есть несколько секунд, когда привидения не пытаются вас догнать.
Pac-Man — замечательный пример сложной системы, построенной на основе нескольких хитроумно разработанных правил, создающих невероятно захватывающий геймплей, который привлекает игроков даже спустя 55 лет после выпуска.
Если хотите поиграть в пакман ,то вот подобная игра (механика вроде одинаковая, но графика точно не оригинальная)
Также есть в честь 30-летия компания Гугл выпустила игру Pac-Man Doodle (эта игра более оригинальная по графике, но карта от Гугл)
Подписывайся на тг канал чтоб узнать интересной информации, и также желательно на этот канал тоже чтобы была мотивация делать для вас такой контент
Источники
The Pac-Man Dossier, Jamey Pittman — практически единственный источник, который пригодится вам для собственных исследований. Честно говоря, большая часть это статьи является перефразированием The Pac-Man Dossier. Настоятельно рекомендую к прочтению, если вам понравилась эта статья.
Pac-Man’s Ghost Behaviour Analyzed and Fixed, Don Hodges — объяснение бага в поведении Пинки и Инки.