Привет, Друзья!
Недавно стал играть в шахматы с Другом. Занятие это настолько увлекательное, что начал решать шахматные задачки. Но вот беда - решаю я их на смартфоне (ну нету у меня ифона, нету), а поделиться интересной задачкой хочется. Как быть?
Как всегда, пошел в Google, в поисках подходящего сервиса, а там этих сервисов... что Кот наплакал. То, что удалось найти имело фантастически убогий интерфейс и потрясающее неудобство использования. Вобщем, почему бы не сделать свой сервис? - Сделал. О нем и речь в сегодняшней статье.
Недавно стал играть в шахматы с Другом. Занятие это настолько увлекательное, что начал решать шахматные задачки. Но вот беда - решаю я их на смартфоне (ну нету у меня ифона, нету), а поделиться интересной задачкой хочется. Как быть?
Как всегда, пошел в Google, в поисках подходящего сервиса, а там этих сервисов... что Кот наплакал. То, что удалось найти имело фантастически убогий интерфейс и потрясающее неудобство использования. Вобщем, почему бы не сделать свой сервис? - Сделал. О нем и речь в сегодняшней статье.
Знакомьтесь - Chess Url
Чешурл позволяет расставить фигуры на доске и получить URL к картинке,
которая соответствует расстановке. Например, в следующем примере у белых есть
прекрасный ход. Какой?
Эта картинка имеет следующий URL:
http://chessurl.appspot.com/?RA8,PA7,KB4,PC5,PF6/RA6,PB5,PC6,PD5,KF7
До слеша идут белые фигуры (RA8,PA7,KB4,PC5,PF6), после слеша - черные
(RA6,PB5,PC6,PD5,KF7). Фигура начинается с имени (K - King, Q - Queen, R
- Rook (ладья), B - Bishop, N - Knight (конь), P - Pawn). Следующие два символа
- координаты фигуры на доске.
Как делался Chess Url?
Программа состоит из двух частей: дизайнера и просмотрщика. Дизайнер написан на
Silverlight 4.0, просмотрщик на... Python в
Google App Engine.
Суть дизайнера - дать пользователю интерактивность при создании шахматной
комбинации. Просмотрщик отвечает за генерацию картинки по указанным параметрам
строки запроса.
Исходники дизайнера (Silverlight части) можно скачать здесь. Я решил открыть их под Microsoft Public License. Что касается исходников просмотрщика - позвольте оставить их за кулисами... Дело в том, что мои познания в Python настолько глубоки, что написанный код стыдно показывать . Отсутствие Python-исходников попробую компенсировать, поделившись полученным опытом.
Исходники дизайнера (Silverlight части) можно скачать здесь. Я решил открыть их под Microsoft Public License. Что касается исходников просмотрщика - позвольте оставить их за кулисами... Дело в том, что мои познания в Python настолько глубоки, что написанный код стыдно показывать . Отсутствие Python-исходников попробую компенсировать, поделившись полученным опытом.
-
Откуда картинки? - Изображения шахматных фигур я нашел на Википедии, в формате SVG.
- Как конвертировать SVG в XAML? - Нужно скачать последнюю версию Inkscape. Редактор позволяет экспортировать SVG в XAML, и является абсолютно бесплатным. Единственный минус, у меня некорректно обработалась одна трансформация в SVG файле. Пришлось дотачивать напильником, но процесс этот безболезненный, т.к. форматы очень похожи.
- Как происходит отрисовка картинки по строке запроса? - В состав Google App Engine входит Images API, который позволяет производить трансформации над картинками. Однако тут не без сюрпризов. Когда объединяешь .PNG файлы с прозрачностью, App Engine игнорирует прозрачность, заливая все белым цветом (как на эмуляторе сервера, так и на сервере). Решилась проблема использованием .GIF файлов. Благо Paint.NET легко конвертирует файлы.
- В чем разрабатывалось Python приложение? - Мне очень понравилась Aptana. Это IDE, с открытым исходным кодом. Для Python устанавливается плагин, и вы получаете хороший user experience, имея полноценный intellisense в Python. Кстати, этим же IDE я пользуюсь для создания JavaScript приложений (прости меня Студия, но ты и рядом не стояло).
- Сколько времени ушло на разработку? - около 4-х часов. Но я молчу о поиске изображений и их конвертировании. Так же промолчу и о поисках багов и их "конвертировании" :). Суммарных усилий хватило на два выходных дня.
Самым приятным сюрпризом был App Engine. Во-первых, очень либеральные квоты
(один гиг трафика на вход и один на выход... в день). Во-вторых, простота
программирования. Я заметил, что много потребляю ресурсов на конвертирование
изображений (а это тоже входит в квоту: 2 592 000 трансформаций в день). Решение
в три
строчки кода: прикрутил
Memcache. Теперь число трансформаций упало в разы.
Что вы думаете?
Буду очень рад услышать ваше мнение о сервисе,
коде и шахматной задаче
сверху :). Если у вас есть свои интересные задачки - пишите, вставляйте в блог,
пользуйтесь на здоровье :). Надеюсь, вам понравится.
Спасибо за ваше внимание! Отличного программирования :)!
Спасибо за ваше внимание! Отличного программирования :)!
Классный сервис и интересный пазл! Я поражаюсь твоей работоспособности и целеустремленности, честное слово! :)
ОтветитьУдалитьУ меня какой-то вариант решения есть. Но кто хочет порешать сам - не читайте его ниже, чтобы не испортить себе удовольствие.
---
Ладья в противоположный угол, "жертвуя" пешку. Черной ладье остается либо бить пешку, тогда белая ладья на шаг ниже (нет разметки - не могу точно сказать, кстати, можно добавить разметку, а то без нее сложно). Черный король уходит, скорее всего, беря белую пешку, и белая ладья берет черную. Но, должен сказать, не факт, что белые выиграют. У черных на 2 пешки больше и при помощи короля одну из них можно провести вниз. Конечно, ладья - это хорошо, но не уверен, что она решит судьбу поединка. Белый король не успеет перекрыть подходы черному к своим пешкам. Скорее всего, ничья.
Да, чтобы не допустить этой ситуации, черные могут попытаться не брать белую пешку ладьей, а взять другую королем, но ничего не меняется. Белая пешка -> белый ферзь, черная ладья берет ферзя, белая ладья берет черную. Результат тот же :)
---
Давай побольше пазлов! :)
Спасибо, Санек, за теплые слова и пожелания :)! Доску нумеровать хочу в следующих версиях.
ОтветитьУдалитьОтвет правильный :). Молодец, ты первый!
Я подсоберу интересные задачи и выложу к концу недели, чтобы было чем размяться на выходных :)
"То, что удалось найти имело фантастически убогий интерфейс и потрясающее неудобство использования"
ОтветитьУдалитьУжасно прекрасная фраза :))
Жаль что в комплекте нет исходников AppEngine части на пайтоне, интересно взглянуть и тем более, на код новичка в этом деле :) Ибо наверняка путь к решению проблемы он преодолевал по пути наименьшего сопротивления.. что весьма пригодится другому такому же новичку :)
PS. Я б долго не думая подвинул бы ладью на 2 клетки вправо. при любом раскладе должен остаться в плюсах.
хм. тут выше оказывается прозвучал вроде как правильный ответ - ладью в угол -> ничья.. имхо в моем варианте ферзь против ладью - шансы на исход поинтересней вышее :)
ОтветитьУдалитьВ качестве пожелания - осталось к этой апликухе прикрутить какой-нить движечек для сражений p2p и будет вообще цельная картинка :) Заодно бы и проверили чей ход сильнее ;)
Тоже вариант, но не уверен, что он не ведет к проигрышу.
ОтветитьУдалитьЛадья на две клетки вправо -> черная ладья съедает белую пешку (потому что остаться на месте - потерять ладью или получить под боком ферзя) -> белая съедает черную пешку, лишая две остальные защиты. После этого черный король не может съесть белую пешку и в то же время привязан к ней, а черной ладье нужно защищать хотя одну из оставшихся своих пешек (скорее всего, правую). Но дальше нужно смотреть, потому что теперь атакуют черные. При хорошем раскладе черные могут либо провести пешку в ферзя, либо разменять ее на белую ладью, оставив свою небитой.
Андрей, как ты считаешь? :)
:) Думаю, самый идеальный вариант - ладью на h8. Имея три пешки против ладьи - это нужно хорошо постараться, чтобы их довести до конца...
ОтветитьУдалить