Pull to refresh

«Третьим будешь?!» (с) Афоня или шахматы на ТРОИХ

Reading time3 min
Views1.7K
chess for three

Толчком к написанию статьи послужила статья habrahabr.ru/blogs/algorithm/105450 автора lightcaster, который занимается (похоже это интересное хобби) тем, что интересно моей команде в проекте foxyevents.de (не сочтите за рекламу) с предложением вступить к нам в команду разработчиков. Т.к. на Хабре нет способа написать этому человеку «извне», приходится написать свою собственную интересную (надеюсь) статью.

Прелюдия


Любой редкий выдающийся студент мечтает запрограммировать написать что-нибудь особенное…

Когда-то («в прошлой жизни, наверное») играя в шахматы отец пошутил, что было бы не плохо играть в шахматы троим, а не двоим, причём за одной доской. В те времена ещё не было интернета (помните такие!?) и нельзя было найти что-то подобное за считанные доли секунд. Эта «шутка» вспомнилась мне спустя почти 15 лет, когда мне нужно было искать проект для вуза, где я учил «программирование мультимедийных систем»…

Мысль показалась мне далеко не плохой и я с энтузиазмом испортил несколько листов, прежде чем я нарисовал нечто похожее на

image

Конечно же, как любой человек озарённый идеей, я не воспользовался поисковой машиной, чтоб найти уже давно изобретённое чудо…

Лопаты и грабли


Пожалуй, шаг программирования был самым тяжёлым в этой истории. Мало того, что мне пришлось прыгнуть из бейсика (БК > РК > Корвет > ZX Spectum 48 (бейсик) > Intel Pentium 4) сразу на Java 1.4 (прыжок через 8 лет компьютерной жизни), да ещё и математически столкнулся для себя с нерешаемым заданием. Дело в том, что «просчитывание по формуле» не было идентичным тому, что показывал монитор. Если считать по формуле при повороте, например, получаем дробные значения, т.к. на доске не прямоугольные клетки. Получая дробное значение по формуле, не возможно понять, находится ли, например, значение 0.33 на 0 или 1 пикселе. Просто округлять тут не решает проблему.

Получалось так, что нажимая на клетке 3 совсем близко к границе (или же щёлкая по границе), подсвечивалась не ожидаемая клетка, которая в свою очередь ещё и не совсем корректно обрисовывалась.

line trouble

Как видно на рисунке, линии не совпадают в нескольких пикселях, если протянуть наклонённые линии разной длинны (эксперимент можно провести, например, в MS Paint-e). В то время, я делал практический семестр в Испании и по вечерам в глухомани можно было заниматься только несколькими вещами: смотреть телевизор, программировать, купаться в море, рыбачить или собирать мандарины. Т.к. рыбу я так и не поймал, а телевизор возненавидел далеко до этого тысячелетия, то и занимался «тасками», программируя на фирму или решая эту задачу каждый вечер, «проводя у компьютера» по 15 часов в сутки. Шли дни, недели… прошло месяца два… задача не решалась, время сдачи приближалось. Конечно, я понимал, «коряво, но работает». Однако, меня это не устраивало и даже уже началось какое-то соревнование, кто кого. Я даже забросил само программирование шахмат и размышлял о способах решения этих «чёртовых пикселей»…

[ В этом месте, Вы можете попробовать отложить статью и порешать задачку самому. Нетерпеливые могут читать дальше… ]

Крепкий орешек


Меня всегда интересовало нестандартное решение задач и тут оно меня, к счастью, выручило. Посмотрите на следующий рисунок внимательно.

chess for three in 2D

Что вы видите? Доска… линии… клетки… цвета? Ага. А сколько цветов на доске? Посчитаем? Линии, клетки несколько цветов… 7… 8...? А вот и очень плохо Вы считали. Их 98! Каждая клетка — не различимый цвет для глаза, но не для компьютера! Презентируя проект в «школе» зал заапладировал. Волна в зале превзошла мои ожидания. Реакция, однако, была не только положительная. Мой профессор «залепил» мне оценку на 0.7 бала ниже, посчитав такое решение «грязным в мире программирования» и остальные профессора не смогли его переубедить. Решение было очень простое: я удалил почти всю математику и заменил её простой картинкой, просто считывая цвет под мышкой…

Хепи энд


Шахматы я ещё долго развивал дальше (тесты отображающие положение на доске, игра по сети, показывал в школе на «мультимедийных тусовках»), хотел даже запатентовать и говорил с адвокатом. Кстати, «пользуясь случаем, хочу передать привет моему брату» (украденная фраза из радио), за то, что нарисовал то, что Вы видите в 3D. Для тех, кому интересен source code может написать мне, возможно, я откопаю его где-нибудь на уже годами лежащем CD и, возможно, Вы сможете сделать с этим кодом нечто большее, нежели добился я. Было бы приятно увидеть «пылящиеся шахматы» на несколько ступенек выше, по сравнению с «начальными» ступеньками, где они задержались уже довольно долгое время…

Пс: layer на третью презентацию шахмат можно увидеть тут: www.hdm-stuttgart.de/multimedial/medianight/archiv_ss_06/medianightprojekt20060421141924/projektview

Ппс: Обладатели стерео очков могут насладится данным чудом в 3D.

chess for three 3D stereo
Tags:
Hubs:
+1
Comments5

Articles

Change theme settings