Pull to refresh

Comments 12

Разгадывать такие кроссворды и самому интересно. Но какой мегамозг их составляет?
Да, действительно. Порой и сам над ними зависаю в дороге, перед сном или просто когда надо убить время.
По поводу составления — есть некоторый платный редактор филиппинских кроссвордов (по определенным причинам не хочу упоминать его здесь — вы без труда можете найти в его поисковике). На вход он принимает черно-белую (или двуцветную) картинку и генерит по ней отдельно задание и решение.
Спасибо за статью, позволю себе немного покритиковать код.
#define LN_ONE          16  // 00010000 клетка закрашена, но линия ч/з нее не проходит. для клеток с числом 1

Перестаньте объявлять константы дефайнами. В С++ есть const, который нормально живёт в неймспейсах, имеет нормальные области видимости и права доступа и вообще является хорошим стилем против плохого препроцессора.
Флаги лучше объявлять через операторы побитовго сдвига или через литералы
Разнообразные объединения флагов лучше писать через побитовое или, например:
const size_t TOP_LEFT = TOP | LEFT;

У вас случай посложнее, но всё равно прослеживается логика. Не зря же написаны эти комментарии с бинарным представлением. Гораздо лучше чтобы вместо объяснений был код с подобным уровнем пояснений.
Спасибо за замечания. Намотаю на ус.

Плюсую. Вместо


#define BYTE_FLAG_PART    240 //  в двоичной системе 11110000

я б написал что-то вроде


const uint8_t BYTE_FLAG_PART = 0b11110000;

Отмечу, что легальным это стало в C++ только с 14 стандарта. Раньше было как расширение GNU.

Всегда было интересно, насколько много приходится писать специфичного для платформы кода, в частности в Marmalade SDK? К сожалению, про этот SDK пишут не часто.
Marmalade SDK как среда для разработки кроссплатформенных приложений предоставляет разработчику C++ API. По сути это набор расширений (Extensions), каждое из которых внутри себя содержит конкретную реализацию функционала (работа с графикой, файловой системой, сетью, UI, внутриигровые покупки, работа с аудио-видео и т. д.) под каждую отдельную платформу (Android, iOS, WinPhone и множество других платформ).

Поэтому разработчику в процессе написания практически нет необходимости завязываться на особенности той или иной платформы, за исключением некоторых случаев (возможно список неполный):
— некий функционал может не поддерживаться в определенной ОС;
— разработчик сам решил реализовать логику приложения по-разному в зависимости ОС.

Но вот в случае, если разработчику потребуется функционал, который отсутствует в стандартном дистрибутиве Marmalade SDK, ему может потребоваться самому собрать свой Extension со своей реализацией под каждую платформу — а значит писать платформозависимый код.

Лично мне для реализации данного приложения хватило стандартного набора расширений, поэтому платформозависимого кода у меня нет.
Большая часть тестирования и отладки (примерно 90%) была произведена на винде на симуляторе (остальные 10% — это отладка масштабирования на устройстве — так как для этого нужны zoom-жесты двумя пальцами). Билды под Android и iOS также собираются на винде (для этого нужно поставить соответствующие инструменты, описанное в доке мармелада). Мак нужен только для заливки ipa-файла в консоль iTunesConnect через эппловский ApplicationLoader.
unique_ak, спасибо за интересный вопрос. В связи с тем, что ответ получился развернутым и будет интересен тем, кто занимается кроссплатформенной разработкой — добавлю его в статью.
Sign up to leave a comment.

Articles