Комментарии 12
Разгадывать такие кроссворды и самому интересно. Но какой мегамозг их составляет?
0
Да, действительно. Порой и сам над ними зависаю в дороге, перед сном или просто когда надо убить время.
По поводу составления — есть некоторый платный редактор филиппинских кроссвордов (по определенным причинам не хочу упоминать его здесь — вы без труда можете найти в его поисковике). На вход он принимает черно-белую (или двуцветную) картинку и генерит по ней отдельно задание и решение.
По поводу составления — есть некоторый платный редактор филиппинских кроссвордов (по определенным причинам не хочу упоминать его здесь — вы без труда можете найти в его поисковике). На вход он принимает черно-белую (или двуцветную) картинку и генерит по ней отдельно задание и решение.
0
Спасибо за статью, позволю себе немного покритиковать код.
Перестаньте объявлять константы дефайнами. В С++ есть const, который нормально живёт в неймспейсах, имеет нормальные области видимости и права доступа и вообще является хорошим стилем против плохого препроцессора.
Флаги лучше объявлять через операторы побитовго сдвига или через литералы
Разнообразные объединения флагов лучше писать через побитовое или, например:
У вас случай посложнее, но всё равно прослеживается логика. Не зря же написаны эти комментарии с бинарным представлением. Гораздо лучше чтобы вместо объяснений был код с подобным уровнем пояснений.
#define LN_ONE 16 // 00010000 клетка закрашена, но линия ч/з нее не проходит. для клеток с числом 1
Перестаньте объявлять константы дефайнами. В С++ есть const, который нормально живёт в неймспейсах, имеет нормальные области видимости и права доступа и вообще является хорошим стилем против плохого препроцессора.
Флаги лучше объявлять через операторы побитовго сдвига или через литералы
Разнообразные объединения флагов лучше писать через побитовое или, например:
const size_t TOP_LEFT = TOP | LEFT;
У вас случай посложнее, но всё равно прослеживается логика. Не зря же написаны эти комментарии с бинарным представлением. Гораздо лучше чтобы вместо объяснений был код с подобным уровнем пояснений.
+1
Спасибо за замечания. Намотаю на ус.
0
Плюсую. Вместо
#define BYTE_FLAG_PART 240 // в двоичной системе 11110000
я б написал что-то вроде
const uint8_t BYTE_FLAG_PART = 0b11110000;
0
Да, теперь буду знать.
0
Отмечу, что легальным это стало в C++ только с 14 стандарта. Раньше было как расширение GNU.
+1
Судя по всему Marmalade SDK недавно вышел на поддержку 11 стандарта, и то в beta-версии. А по факту C++03.
beta of the Marmalade SDK with support for C++11.
C++11 support — BETA
beta of the Marmalade SDK with support for C++11.
C++11 support — BETA
0
Расширение GNU: http://htrd.su/wiki/zhurnal/2009-10-02_13.44_0b00100100
0
Всегда было интересно, насколько много приходится писать специфичного для платформы кода, в частности в Marmalade SDK? К сожалению, про этот SDK пишут не часто.
0
Marmalade SDK как среда для разработки кроссплатформенных приложений предоставляет разработчику C++ API. По сути это набор расширений (Extensions), каждое из которых внутри себя содержит конкретную реализацию функционала (работа с графикой, файловой системой, сетью, UI, внутриигровые покупки, работа с аудио-видео и т. д.) под каждую отдельную платформу (Android, iOS, WinPhone и множество других платформ).
Поэтому разработчику в процессе написания практически нет необходимости завязываться на особенности той или иной платформы, за исключением некоторых случаев (возможно список неполный):
— некий функционал может не поддерживаться в определенной ОС;
— разработчик сам решил реализовать логику приложения по-разному в зависимости ОС.
Но вот в случае, если разработчику потребуется функционал, который отсутствует в стандартном дистрибутиве Marmalade SDK, ему может потребоваться самому собрать свой Extension со своей реализацией под каждую платформу — а значит писать платформозависимый код.
Лично мне для реализации данного приложения хватило стандартного набора расширений, поэтому платформозависимого кода у меня нет.
Большая часть тестирования и отладки (примерно 90%) была произведена на винде на симуляторе (остальные 10% — это отладка масштабирования на устройстве — так как для этого нужны zoom-жесты двумя пальцами). Билды под Android и iOS также собираются на винде (для этого нужно поставить соответствующие инструменты, описанное в доке мармелада). Мак нужен только для заливки ipa-файла в консоль iTunesConnect через эппловский ApplicationLoader.
Поэтому разработчику в процессе написания практически нет необходимости завязываться на особенности той или иной платформы, за исключением некоторых случаев (возможно список неполный):
— некий функционал может не поддерживаться в определенной ОС;
— разработчик сам решил реализовать логику приложения по-разному в зависимости ОС.
Но вот в случае, если разработчику потребуется функционал, который отсутствует в стандартном дистрибутиве Marmalade SDK, ему может потребоваться самому собрать свой Extension со своей реализацией под каждую платформу — а значит писать платформозависимый код.
Лично мне для реализации данного приложения хватило стандартного набора расширений, поэтому платформозависимого кода у меня нет.
Большая часть тестирования и отладки (примерно 90%) была произведена на винде на симуляторе (остальные 10% — это отладка масштабирования на устройстве — так как для этого нужны zoom-жесты двумя пальцами). Билды под Android и iOS также собираются на винде (для этого нужно поставить соответствующие инструменты, описанное в доке мармелада). Мак нужен только для заливки ipa-файла в консоль iTunesConnect через эппловский ApplicationLoader.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Разработка приложения для разгадывания филиппинских кроссвордов на C++ в среде Marmalade SDK