
В этот раз я представляю на суд и удовольствие общественности клон тетриса. Шестиугольный.
Идея игры, думаю, всем знакома. Я постарался придать ей вкусную реализацию. Это:
- Предсказуемое поведение фигур. Что-то типа физики. На пример, если вы хотите повернуть фигуру, а стенка ей мешает, то фигура подвинется. В разумных, конечно, пределах.
- Скины.
- Регулируемый размер поля.
- Просто постарался придать этому делу приятный вид
Написано это дело на Qt, без зависимостей от чего-либо ещё. Должно собираться везде. Я тестировал на Windows, Linux и FreeBSD; Qt от 4.4.1 (более старой под рукой не оказалось) до новенькой 4.7.0.
Захостил я всё это, традиционно, на googlecode. Там же лежит статическая сборка под Windows, не требующая для работы ничего (кроме Windows ,-)).
Процедура сборки и установки на любых UNIX-like системах — стандартная.
Вам потребуется Qt с девелоперской частью. А дальше забираете исходники с сайта проекта и собираете:
- wget http://hexglass.googlecode.com/files/hexglass-1.0.0.tar.gz
- tar xzf hexglass-1.0.0.tar.gz
- cd hexglass-1.0.0
- qmake
- make
- sudo make install
Последний шаг (install) не обязателен, приложение можно запускать и не устанавливая. Можно и удалить (make uninstall).
Собственно, те, кто просто хотят попробовать эту штуку, могут начинать :-) Дальше информация для тех, кто хочет что-нибудь улучшить.
Чего я ожидаю от сообщества
(i) Подготовка пакетов для разных дистрибутивов
Весь мой opensource опыт показывает, что я один не в состоянии поддерживать пакеты для разных дистрибутивов. Также, мне доподлинно известно, что на хабре тусуются весьма инициативные люди из ArchLinux и AltLinux ,-) наверняка есть представители и других дистрибутивов. Я запостил пакетик на AUR, но если кто-то возьмётся за его поддержку — передам с благодарностью.
Если кто-то займётся сборкой пакетов — три просьбы.
- Отпишите мне, если хотите, чтобы я держал вас в курсе обновлений. Кроме того, было бы полезно поставить ссылки на пакеты на сайте проекта.
- Отпишите сюда. Потому, что сейчас люди начнут просить deb, rpm...
- Сообщайте о всех затруднениях.
(ii) Предложения по дизайну, скинам, фичам, опечаткам...
Принимаются и приветствуются! Простые вещи будут сделаны быстро, сложные — учтены на будущее. Пишите в комментарии и/или почту.
(iii) Локализации
Если кто-то владеет неким языком и захочет сделать локализацию — я всегда «за». Пишите! Если вы ничего не понимаете в Qt и её средствах локализации — не беда; пишите; локализация — это просто. Никто из участников проекта не будет забыт!
Чего я не советую делать
Я не обещаю, что с радостью приму ваш код. Если вы найдёте и поправите мелкие баги — пожалуйста. Но если вы захотите редактировать всё вообще, то, могу и не согласиться принять ваши правки в проект. Желание редизайнить может возникнуть по нескольким причинам:
- дробление на классы может показаться кому-то слишком мелким,
- некоторые узлы могут показаться не достаточно оптимальными (на пример, отрисовка стакана),
- некоторые элементы могут показаться не достаточно академично выполнены (на пример, класс управления всем и вся).
Мелкое дробление возникло потому, что я занимаюсь этим проектом урывками по 15 минут. Поддерживать в таком режиме крупные куски кода просто невозможно. В ближайшем будущем я вряд-ли изменю стиль работы. Поэтому, мне удобен и симпатичен мелкодисперсный дизайн.
Не оптимальности. Иногда (ИМХО) полезней сохранить простоту, пусть даже ценой небольшой не-оптимальности.
Не академичность. Я понимаю, что где-то просится машина состояний, паттерн State и централизация эмиссии сигналов, где-то просится Mementor, где-то могут вызвать протест не константные итераторы и прямой доступ к свойствам (таковых только два на всю прогу, но они всё же есть, каюсь)… Я согласен, что код не везде выглядит так, как того требуют учебники. Но мне не хотелось бы торопиться с имплементацией строгих схем. Пусть сперва обычные пользователи выскажут свои хотелки; пусть станет ясно, в какую сторону это всё следует развивать, и уже тогда можно взяться за ортодоксальное кодирование.
Вы всё ещё читаете?
Мне сказать больше нечего, но, возможно, вы сможете удовлетворить свою жажду чтения и тетриса по следующим ссылкам:
- Тетрис меняет мозг с неизвестными последствиями для интеллекта http://www.membrana.ru/articles/health/2009/09/08/181600.html
- Аналогичный проект. Вполне работоспособен, но не развивается с 1993 года со всеми вытекающими. Похоже, под Windows оно не заработает. ftp://ibiblio.org/pub/Linux/games/arcade/tetris/cxhextris.tar.z
- Ещё один аналог, но я его не запускал. Написано оно на Python, но требует столько много всего, что у меня не установлено, что я решил не захламлять систему. http://mjr.iki.fi/software/ghextris
- Программа под винду… но выглядит стрёмно :-) Я не пробовал запускать. http://members.chello.at/theodor.lauppert/games/hextrisw.htm
- Частью моего проекта является прототип написанный на Tcl/Tk http://hexglass.googlecode.com/svn/tags/hexglass-1.0.0/prototype/xTetris.tcl
- Знаете ли вы, что Qt-приложения поддерживают опцию -style? Попробуйте -style plastique или -style motif; попробуйте значения cde, windows, cleanlook… Возможно, какие-то стили вам понравятся; но у вас могут работать не все (зависит от сборки Qt).
upd: cypok нашёл багу, которая выползает под Mac OS X. Если вы пользователь этой ОС, то вам необходимо последовать его рекомендации.
Проблему можно исправить ещё и другим способом: заменив ":/icon.xmp" на ":/about_icon.xmp".
upd2: Mezomish сделал PPA для Убунты. Спасибо ему!
upd3: 12:20:23 MSD — 1000 скачиваний только виндовой сборки и только с сайта проекта! Хабр — сила! :-)