вторник, 23 октября 2012 г.

Прокси карт

     Привет всем кто давно меня не читал. Год назад я начал увлекаться настольными играми, в частности коллекционной карточной игрой Magic the Gathering. Недавно готовясь к выходу нового сэта по этой игре, я решил создать генератор прокси карт, чтобы протестировать сэт до его выхода.
     Как это работает? Внесите информацию обо всех картах в таблицу Excel. Чтобы считать эту информацию я  использовал библиотеку CSharpJExcel - очень мощная вещь в сравнении с MyXls которую я использовал раньше. Кроме того MyXls не умеет читать xls файлы, а только записывать. Хотя конечно вы можете использовать более продвинутые технологии для хранения информации в том числе и базы данных.
     Изготовьте шаблон для карт на векторном редакторе. Мой шаблон вы можете видеть ниже, я использовал редактор Inkscape. Пространство использовано так, чтобы разместить на одном листе А4 15 карт (как раз 1 бустер). 


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

    <text
       SpecialID="Name1"
       xml:space="preserve"
       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
       x="852.19617"
       y="-233.12511"
       id="text3769"
       sodipodi:linespacing="125%"
       transform="matrix(0,1,-1,0,0,0)"><tspan
         sodipodi:role="line"
         id="tspan3773"
         x="852.19617"
         y="-233.12511">ABRA-KADABRA</tspan></text>

     Здесь красным выделен узнаваемый текст, синим - свойство идентификатор, которое нужно дописать.
     С помощью LinqToXML (System.Xml.Linq) можно легко открыть шаблон найти теги содержащие идентификаторы и изменить их содержании, затем сохранить шаблон в новом файле, так и сделайте. Вот и всё, карты готовы к печати. Вырежьте распечатанные карты и вставьте их в протекторы вместе со старыми картами для жёсткости. Осталось только заметить, что формат оказался пробелозависимым, открывайте файл с использованием модификатора PreserveWhitespace:

XDocument doc = XDocument.Load("Sample.svg", LoadOptions.PreserveWhitespace);

     Теперь, когда технология отработана я могу изготовить прокси и для UselessWars.