Архитектура коллекционной карточной игры - PullRequest
3 голосов
/ 18 июля 2011

Я пытаюсь научиться программировать (виртуальную) игру для коллекционных карточных игр (похожую на Magic the Gathering) в Javascript. Я немного читал об архитектуре и контроллерах MVC, но это все у меня над головой (у меня нет никакого формального образования в области CS), и мне интересно, есть ли у кого-нибудь хорошие ссылки или советы о том, как я мог бы узнать больше о коде архитектура на уровне начинающего.

Будет ли каждая «карта» представлена ​​в виде объекта, и вся логика правил карт будет заключена в одну функцию большого игрового движка или множество мелких функций, связанных друг с другом?

Вот пример вопроса: Представьте, что есть карта с надписью: «Когда эта карта вступит в игру, возьмите карту». Как мне спроектировать игру, чтобы подготовиться к этой ситуации, и как она запускается (наиболее эффективно)? Карта запускает игровой движок, или игровой движок анализирует каждую сыгранную карту?

Вот еще один пример: Представьте, что есть карта, на которой написано: «Все ваши карты стоят на 1 меньше, чтобы играть». и он остается в игре постоянно. Как игра понимает, что она должна изменить свои правила в этом случае? Является ли эта функция прослушиванием карты, которая должна быть сыграна, и прерыванием стоимости? Как решается каждый ход, где хранится это правило? Существуют ли переменные, в которых хранятся основные правила игры (глобальный модификатор стоимости карты: 0; модификатор стоимости вашей карты: 0) и другие переменные, в которых хранятся те новые правила, которые вводят карты (модификатор стоимости вашей карты: -1), или переменные, динамически создаваемые игровым движком, когда карты меняют правила (ваш модификатор стоимости эльфа: -2)? И как правила узнают, как измениться, когда карта была уничтожена, таким образом, удалив модификацию правила карты?

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

Чтобы было ясно, я не пытаюсь сделать скучный запрос на людей, чтобы вручную Google для меня; Я слепо шариваю в темноте и спрашиваю, не подскажет ли кто-нибудь мне нужные слова или фразы для поиска. Спасибо!

Ответы [ 2 ]

1 голос
/ 18 февраля 2019

Вам нужно пройти уровень глубже и подумать о самой "игре".Игра, которую вы описываете, будет построена вокруг «конечного автомата», который является базовой концепцией CS, в которую вы должны погрузиться и понять, прежде чем начать строить.

Правила вашей игры станут состояниеммашина и события (карты), вызванные (будучи сыгранными) во время вашей игры, могут изменить эти правила.Вы захотите, чтобы какой-то переводчик «прочитал» карту и изменил либо правила, либо состояние игры.И тогда вам понадобится что-то, чтобы пройти игру по очереди и этапам, прочитать состояние и предпринять соответствующие действия.

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

1 голос
/ 16 июля 2018

Существует очень хороший блог о воссоздании похожей карточной игры: Hearthstone от Blizzard.Несмотря на то, что он написан на C # и использует Unity в качестве слоя представления, вы довольно хорошо понимаете, как можно создать подходящую архитектуру для такой игры.Справедливое предупреждение, однако, воссоздание Magic the Gathering в Javascript может оказаться невероятно сложным и сильно испортить вам голову (у меня есть опыт из первых рук).

...