Коллекционная карточная игра (ККИ) — разновидность настольных и компьютерных игр. В отличие от традиционных карточных игр, коллекционные карточные игры используют специальные карты, схожие с коллекционными карточками. В крупных коллекционных карточных играх могут существовать тысячи различных карт. Нельзя приобрести все существующие карты одновременно; вместо этого от игроков ожидается, что они будут приобретать карты небольшими наборами и составлять свои индивидуальные колоды. Собственно игра между игроками ведётся с использованием различных правил, которые могут сильно различаться для разных игр.
В XIX веке в США появилось новое хобби — коллекционирование бейсбольных карточек. Именно оно и было началом ККИ. Но для ККИ им не хватало двух аспектов: особенностей каждой карточки и правил игры. В связи с этим в 1997 году математик Ричард Гарфилд разработал свою ККИ — Magic: The Gathering. Тысячи людей становились игроками, покупая, выигрывая и обменивая карты. Вскоре начали организовываться первые крупные игровые турниры, на которых собирались лучшие игроки, чтобы определить сильнейшего из них [2].
Существует большое количество ККИ разных издателей. Каждая ККИ имеет свою структуру, свои правила, свои карты. Тем не менее, у них есть общие черты:
- В подавляющем своём большинстве ККИ представляют собой стратегические игры с элементом случайности;
- Играющие сами составляют колоды карт. В ККИ имеется огромное количество карт — намного больше, чем может попасть в колоду;
- Карты продаются в виде случайных наборов. Поэтому, чтобы собрать конкурентоспособную колоду, приходится не только покупать эти наборы в магазине, но и покупать, продавать и менять карты «из рук в руки».
Именно этот аспект будет рассмотрен в данной статье, учитывая следующее:
- Игра ведется между двумя игроками;
- Для игры необходима колода, созданная игроком из игровых карт;
- Игровой процесс проходит на игровом поле, по которому происходит передвижение карт.
Проанализировав все имеющиеся варианты используемых компиляторов, было решено остановиться на компиляторе от компании Embarcadero — RAD Studio XE10.1 Berlin.
Embarcadero RAD Studio XE представляет собой полнофункциональный набор средств разработки приложений, который позволяет быстро и наглядно создавать приложения с графическим пользовательским интерфейсом для Windows, .NET, PHP и веб-решений [1].
Опираясь на вышеописанные положения, в приложении было реализовано:
- База данных имеющихся игровых карт;
- Редактор колоды, в котором каждый игрок создаст себе персональную колоду карт;
- Игровое поле, на котором и будет проходить сама игра;
- Онлайн-соединение, с помощью которого и будет выполняться связь игроков между собой;
- Чат для общения игроков;
- Лог действий, запоминающий все действия игроков и позволяющий решить возможные проблемные ситуации.
Были изучены структура и содержание игровой карты (Рис. 1), на основе которых была реализована база данных в СУБД SQLite.

Для хранения информации об одной карте будем использовать переменную Card заранее созданного типа-записи — TCard:
TCard = recordname, race, nation, clan: string;skill: array [1 .. 6] of string;trigger, cardtype, grade, power, def: integer;crit: byte;end;
Процедура ReadCard переписывает значения переменной Card, считывая данные из базы данным по номеру (id):
procedure ReadCard(id: integer);beginForm1.SQLQuery1.SQL.Clear;Form1.SQLQuery1.SQL.Add('SELECT CardName, CardRace, CardNation, CardClan, CardSkill_1, CardSkill_2, CardSkill_3, CardSkill_4, CardSkill_5, CardSkill_6, CardTrigger, CardType, CardGrade, CardPower, CardShield, CardCrit');Form1.SQLQuery1.SQL.Add('FROM CardStats INNER JOIN CardInfoEng ON CardStats.rowid = CardInfoEng.rowid WHERE CardStats.rowid = :id;');Form1.SQLQuery1.ParamByName('id').value := id;Form1.SQLQuery1.Open;with Card dobeginname := Form1.SQLQuery1.Fields[0].AsString;race := Form1.SQLQuery1.Fields[1].AsString;nation := Form1.SQLQuery1.Fields[2].AsString;clan := Form1.SQLQuery1.Fields[3].AsString;skill[1] := Form1.SQLQuery1.Fields[4].AsString;skill[2] := Form1.SQLQuery1.Fields[5].AsString;skill[3] := Form1.SQLQuery1.Fields[6].AsString;skill[4] := Form1.SQLQuery1.Fields[7].AsString;skill[5] := Form1.SQLQuery1.Fields[8].AsString;skill[6] := Form1.SQLQuery1.Fields[9].AsString;trigger := Form1.SQLQuery1.Fields[10].value;cardtype := Form1.SQLQuery1.Fields[11].value;grade := Form1.SQLQuery1.Fields[12].value;power := Form1.SQLQuery1.Fields[13].value;def := Form1.SQLQuery1.Fields[14].value;crit := Form1.SQLQuery1.Fields[15].value;end;end;
Для составления и редактирования колод был реализован Редактор колоды (Рис. 2), включающий в себя следующие функции:
- Вывод информации о карте;
- Поиск карт с определенными параметрами в базе данных;
- Добавление и удаление карт из колоды;
- Сохранение колоды для дальнейшего использования;
- Загрузка заранее собранной колоды для ее редактирования.

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

Представленные приложения позволяют игрокам всего мира играть между собой в коллекционную карточную игру «Cardfight!! Vanguard» без покупки реально существующих игровых карт на удаленном расстоянии друг от друга. Каждый игрок может воспользоваться приложением, создав свою виртуальную колоду карт, а также испытать ее в игре с другими людьми, находящимися в данный момент на игровом сервере. Кроме того, игровой сервер хранит в себе информацию о результатах игры — победах, поражениях и последних противников, что позволяет оценивать игроков по их умениям.