10 янв. 2012 г.

Программа для создания карточек настольной игры "Алиас"

Недавно, мне подарили настольную игру под названием "Алиас", суть которой заключается в угадывании слов и всяких "известных персонажей" по словесному описанию от партнера по команде.
Именно с угадыванием известных персонажей и возникли проблемы у компании из двух программистов и одного филолога. Если с такими людьми как Арнольд Шварценеггер или Уилл Смит не возникало никаких проблем, то попытки описать Колин Фарелл или Род Стюарта наталкивались на препятствие вида "эээ, а кто все эти люди?".
Тогда же, одному из двух программистов пришла в голову светлая идея - заменить всех этих "звезд эстрады и шоубизнеса" на таких привычных и понятных программистскому уху именах и фамилиях как: Линус Торвальдс, Ричард Столлман, Деннис Ритчи и так далее.
Естественно, рисовать карточки от руки было, что называется "не с руки", поэтому мною была написана простенькая программка, рисующая карточки автоматически.

Естественно, не стоит ждать от нее каких-то красивостей и прочего. Программа просто берет слова (для карточек со словами) и имена людей из файлов words.txt и people.txt соответственно и генерирует из них pdf с табличкой, ячейки которой и представляют собой искомые карточки. Размер таблицы - 3x3, а с учетом того, что в карточке должно быть 8 слов, нам необходимо иметь как минимум 72 слова в каждом из исходных TXT-файлов. Если слов меньше - таблички просто не будет. Если слов больше и их число кратно 72 - будет несколько страниц с таблицами 3x3.

Основную работу выполняет программа на Clojure, которая парсит TXT-файлы и выдает "на гора" соответствующим образом составленный LaTeX-овский исходник. Эта программа вызывается скриптом make-cards.sh, который сначала проверяет, чтобы в TXT-файлах было достаточно слов, затем запускает программу на Clojure, а после натравливает на получившийся TeX-файл pdflatex.

В итоге получается вот такая таблица. Таблицы с именами и фамилиями не будет, потому что в составленном мною файле people.txt недостаточно имен.

Репозиторий программы: https://github.com/eugeneandrienko/cs-alias-clj