Pull to refresh

Шестиугольный тетрис

Reading time 4 min
Views 3.7K
Похоже, что это входит в привычку — раз в полгода я выкладываю в opensource какую-нибудь свою поделку.

В этот раз я представляю на суд и удовольствие общественности клон тетриса. Шестиугольный.

Идея игры, думаю, всем знакома. Я постарался придать ей вкусную реализацию. Это:

  • Предсказуемое поведение фигур. Что-то типа физики. На пример, если вы хотите повернуть фигуру, а стенка ей мешает, то фигура подвинется. В разумных, конечно, пределах.
  • Скины.
  • Регулируемый размер поля.
  • Просто постарался придать этому делу приятный вид


Написано это дело на Qt, без зависимостей от чего-либо ещё. Должно собираться везде. Я тестировал на Windows, Linux и FreeBSD; Qt от 4.4.1 (более старой под рукой не оказалось) до новенькой 4.7.0.

Захостил я всё это, традиционно, на googlecode. Там же лежит статическая сборка под Windows, не требующая для работы ничего (кроме Windows ,-)).

Процедура сборки и установки на любых UNIX-like системах — стандартная.

Вам потребуется Qt с девелоперской частью. А дальше забираете исходники с сайта проекта и собираете:

На некоторых системах qmake может назваться qmake-qt4, а вместо make потребуется написать gmake, nmake, mingw32-make или ещё что-то в этом духе.

Последний шаг (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 скачиваний только виндовой сборки и только с сайта проекта! Хабр — сила! :-)
Tags:
Hubs:
+119
Comments 102
Comments Comments 102

Articles