Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2015, 04:22   #1
SaiLight
Форумчанин
 
Аватар для SaiLight
 
Регистрация: 10.01.2009
Сообщений: 132
Восклицание [Логическая игра] Crown, Perfect Light


Здравствуйте! Хотелось бы представить в данной теме интересную логическую игру Crown, написанную на Delphi и распространяемую с открытым исходным кодом. Для вывода графики в Crown используется графический движок Perfect Engine, информация о котором выложена в соседней теме, там же вы найдете и ее исходный код. Далее - немного о самой игре...

Идея: Основная идея игры принадлежала SpectreZ'у, и в дальнейшем была развита и усовершенствована нами. Все просто. Есть игровое поле, заполненное... коронами, есть возможность нанести 'удар' и несколько видов бонусных корон. Видов корон - три: зеленая, красная и синяя; ровно столько же и бонусных, каждая из которых может быть собрана в ряд с двумя или более совпадающими с нею по цвету коронами. Удар наносится в любой из пустых клеток поля, причем, осложняется тем, что бьет сразу в четырех направлениях, таким образом, одновременно собирая один ряд и разбивая другой. Но это маленькое неудобство при должном усердии может стать вашим спасением, ведь за 6 и за 8 одновременно собранных корон вам будет выдаваться серьезная премия!

Вот правила, по которым производится расчет взаимодействий при ударе:
  • Одиночная корона толкается через клетку
  • Две стоящих рядом короны толкаются лишь на одну клетку
Ну а в остальном, думаю, вы сможете легко разобраться, пройдя встроенное в игру обучение.

Настройки: В Crown поддерживаются расширенные настройки игровых параметров. Вы можете выбрать как размер поля и количество появляющихся за шаг корон, так и настроить процент появления бонуса и процент начального заполнения поля. Поэкспериментировав с настройками, можно сделать процесс игры намного интереснее!

Интерфейс: Если коснуться программной стороны проекта, то и здесь вас ждет много интересного. Интерфейс игры реализован с помощью двух внутренних классов - TDesignElement (элемент оформления) и TMovie (скриптовый ролик), - позволяющих добиться адаптивности к любому допустимому разрешению экрана. Таким образом, игра просто запускается с установленным на вашем компьютере резрешением, и изображения автоматически располагаются на экране, заполняя заданные для них области. Класс 'Скриптовый ролик' представляет собою нечто вроде презентации с заданным количеством слайдов, к каждом из которых может располагаться изображение или текст. Слайд может пропадать через определенный промежуток времени или вызывать событие 'ожидание действий пользователя', передавая необходимые для его переключения параметры. При помощи данного класса были реализованы отображение логотипов в начале игры и обучение. По окончании проигрывания слайдов игра переводит пользователя на страницу, указанную параметром 'Link' ролика.

Perfect Engine: В Crown, помимо всего прочего, очень хорошо показана реализация основной функции Perfect Engine, заключающейся в возможности подключения любого из существующих рендеров. При старте программы появляется окно с возможностью выбрать GDI или OpenGL-рендер, в результате чего программа загружает те или иные изображения из папки с ресурсами. При использовании GDI-рендера в качестве прозрачных загружаются bmp-изображения, OpenGL-рендер, напротив, берет изображения в формате png. Непрозрачные изображения хранятся в общей папке и загружаются обоими рендерами, что значительно сокращает размер программы. Несмотря на красивый дизайн игры, папка с изображениями весит всего 576 kb.

Алгоритмы: В исходном коде игры вы можете найти и некоторые интересные алгоритмы. При добавлении на карту новых корон часто (с определенной вероятностью) возникает ситуация автоматического сбора рядов, в результате чего игра значительно упрощается - ведь из пяти добавленных на поле корон 3 или даже 4 вполне могут тут же исчезнуть, при этом, освободив некоторый участок игрового поля... Для борьбы с этой проблемой был разработан специальный алгоритм, добавляющий короны только в те участки, где не произойдет автоматического сбора рядов (функция TGameField.pAddNewCrowns в модуле InnerClasses.pas). Также, интересны алгоритмы пересчета поля при перемещении корон (функция TGameField.pCastMovingBlow в модуле InnerClasses.pas) и проверки собранных рядов (функция TGameField.fAssembleGroups в модуле InnerClasses.pas).

Последний раз редактировалось SaiLight; 28.05.2015 в 11:14.
SaiLight вне форума Ответить с цитированием
Старый 28.05.2015, 11:14   #2
SaiLight
Форумчанин
 
Аватар для SaiLight
 
Регистрация: 10.01.2009
Сообщений: 132
По умолчанию

Благодарности и пожелания: Хотелось бы выразить благодарность SpectreZ'у за разработку прекрасного интерфейса для Crown, а также, реализацию сложного алгоритма проверки собранных рядов. Благодарим, также, и SaiDark за поддержку, оказанное понимание и тестирование игры. Заранее благодарим всех, протестировавших данную игру на своих компьютерах и сообщивших о любых найденных багах.

Хотелось бы, чтобы данная игра принесла пользу каждому желающему ознакомиться с возможной программной структурой подобных проектов. Я не утверждаю, что эта структура, а также, представленные алгоритмы и сам программный код являются наиболее верными из всех возможных, но, как видите, выбранный метод реализации дает довольно неплохие результаты - все хорошо структурировано и четко просматривается. И еще (во избежание ненужных споров), я понимаю, что простой движок на Delphi - не конкурент известным и профессионально проработанным движкам, а сама среда - одна из тех, что вызывает огромное количество споров, когда дело касается вопроса игростроения. Но Perfect Engine уже находит свою аудиторию, а исходный код, на любом языке, будет полезен тому, кто желает разобраться в структуре.

В заключение скажу: хотелось бы видеть среди начинающих проектов побольше самобытных игр, не гонящихся за славой уже существующих, но стремящихся к реализации и красивому отображению собственных идей. Красивая графика и интересная игра - не значит, 3D или Unity. Важна идея и ее реализация, а они могут быть показаны даже на самых простых инструментах.

Небольшой трейлер:

SaiLight вне форума Ответить с цитированием
Старый 04.06.2015, 22:22   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Сыграл.
Понравилось! Задумка и реализация - зачёт !

Но есть и замечания:
1. Как-то получилось так, что в вин7 на панели задач на процесс игры было 4 окна, 3 из которых какие-то пустые, и только одно нормальное с игрой, ещё раз появится такое - сообщу поподробнее.
2. Не понравилось оформление некоторых вещей, в первую очередь подсвечиваемой клетки - как просто в игре, так и в обучении. Разглядеть в обучении с канвасоренедерером ,куда просит тыкать игра - почти нереально. Я бы вообще в обучении сделал некие стрелочки иили яркую подсветку куда тыкать. Как-то вяло выглядит переключалка типов ударов, не очень понравилось то что тип удара показан мелкой отметкой на маркере количества доступных этих ударов, а простой удар вообще никак не отмечен, а текст при этом выглядит как-то чуждо.
К тому же в хелпе сказано о 4 ударах (кнопки 1-4), недогляд.
3. Вращалка колесом направления удара как-то видится корявым решением, может лучше разбить клетку на 4 зоны по треугольнику и при попадании в треугольник соответственно поворачивать курсор.
4. самое главное - очевидно, тестирования было немного, т.к. на моём компе выявился бажок. Срока версии опенгла у меня возвращает "4.4.0 NVidia blah-blah", из-за чего скомпиленная версия просто падает с АВ при выборе огл-рендерера, а через установку костыля вида
Код:
  if (StrToInt(routReplaceAllStr(Copy(vOpenGLVersion, 1, 5), '.', '')) < OGL_MINVER) then Result := ERROR_MINVER;
и перекомпиляции добился норм работы.
НО:
5. не предоставлена иконка или рес-файл для получения такого же по виду экзешника.

По самой игре нет нареканий, кроме одной непонятки-предложения: короны в мид-гейме постоянно рассасываются по краю поля, это коробит. Может сделать какой-то бонус чтобы эту ситуацию улучшить/исправить ?
Ну и чисто предложение: сделать некие предопределённые настройки, как в сапере, т.е. некий набор установок есть стандарт и позднее может вылиться в эталон прохождения игры. С чисто произвольными настройками можно долго провозиться пока подберёшь оптимум, да и не все захотят этого, да и всякого рода рейтинги проблемно составлять без стандартизации. А произвольные конечно оставить, даже можно сделать кнопочку "рандомные настройки".
phomm вне форума Ответить с цитированием
Старый 05.06.2015, 02:42   #4
SaiLight
Форумчанин
 
Аватар для SaiLight
 
Регистрация: 10.01.2009
Сообщений: 132
Сообщение

phomm, спасибо за оценку и критику. Сразу скажу насчет багов и некоторых недоработок - если честно, не хватило времени все как следует протестировать и отладить: игра делалась урывками, и под конец разработки еле успели ее завершить - тут же были заняты на работе серьезным проектом. Несмотря на это, мы сделали все возможное для отлова максимального количества багов: протестировали игру на нескольких компьютерах и ноутбуках, а также, на виртуальных системах (где и было принято решение ограничить версию OpenGL).

Игру выложил только сюда и еще на один форум - надеялся узнать результаты тестов, и только потом распространять ее далее, но откликов особо не получил. Единственное - в Контакте встретился один человек, уже некоторое время ожидавший выхода Perfect Engine 2, который протестировал и движок, и игру, после чего был исправлен целый ряд недочетов, а сам движок - оптимизирован для работы с более поздними версиями Delphi. Итак, об ошибках:

1. Не можешь вспомнить, в какой момент вылезло 4 окна? При стартовом окне выбора рендера или в самой игре? Пока даже представить себе не могу, откуда там могло взяться 4 окна, если в игре их всего 2.

2. Насчет того, что 'Сказано о 4 ударах' - проверил, у меня с этим все в порядке. Возможно, случайно мог выложить старую версию с ошибкой, хотя все равно странно - не помню, чтобы в этом была ошибка. Насчет незаметной клетки в обучении - да, проблема есть, странно, что ранее я ее не исправил.

Цитата:
не очень понравилось то что тип удара показан мелкой отметкой на маркере количества доступных этих ударов, а простой удар вообще никак не отмечен, а текст при этом выглядит как-то чуждо
Есть ли предложения по более удачной реализации отображения типов удара и текста при их смене?

3. Изначально вращение направленного удара было реализовано при помощи нажатия средней кнопки мышки, но в дальнейшем мы решили, что это неудобно и реализовали тот вариант, что теперь можно видеть в игре. Насчет идеи 'разбить клетку' - подумаю, как освободится время, возможно, и добавлю.

4. 'Бажок' с версией OpenGL - не от недостатка тестирования, но более - от недостатка свободного времени. Решение ограничить версию OpenGL было принято совсем недавно, уже после того, как я выложил эту игру на форум, и после многочасовой борьбы с отображением на OpenGL 1.1 (и такое бывает :D) мы решили это таким способом. Причем, у меня была мысль, что с этим могут быть проблемы, но, видимо, она куда-то отошла.

5. Обязательно выложу значок игры в папку с исходниками, а также, исправлю все найденные недочеты и перезалью архивы. Они будут доступны по тем же ссылкам, представленным в этой теме и в теме о Perfect Engine.

Теперь - о предложениях. Изначально в игре вместо слабого удара был реализован направленный, показавший себя для игрового процесса не с самой лучшей стороны (обладал тем же недостатком, что и обычный - движение через клетку). Вот как раз его-то мы и думали заменить на 'вытягивающий' удар, но впоследствии по нескольким весомым причинам отклонили это решение:
  • Подобный удар выбивается из общей игровой логики
  • Не было найдено приемлемого решения для управления этим типом удара
  • Спасением одной короны весь ряд не очистишь, да и, очистив, не избежишь его повторного заполнения.

Вместо этого направленный удар был объединен со слабым, из чего получился отличный и полезный бонус. Думаю, бонусами проблему заполнения краев не решишь, да и логика игры такова: добавляя новый бонус - добавляешь и новый тип короны, а с четырьмя видами исход игры предсказать не берусь.

Единственный вариант, который сейчас пришел в голову - сделать поле 'зацикленным', чтобы короны, проходя через верхний край поля попадали в нижний и так далее. Но кроме отсутствия уверенности в необходимости такого решения и серьезных изменений, которые нужно будет внести в код, могу точно сказать, что подобное нововведение сильно изменит весь игровой процесс. Возможно, даже не в лучшую сторону.

Насчет предопределенных настроек - уже думали, но, опять же, из-за нехватки времени оставили этот вопрос на потом, решив сделать лишь самое необходимое. Дело в том, что я пока не могу сказать, когда вернусь к программированию Crown и Perfect Engine, поэтому и выложил их, возможно, несколько поторопившись. Исправлять же найденные ошибки, разумеется, постараюсь своевременно.

__________________________

P.S. Перезалил архивы со следующими изменениями:

Crown.zip: игра перекомпилирована со всеми изменениями, ошибки с указанием четырех типов удара так и не нашел.
PerfectEngine.zip: исправлена ошибка с проверкой версии OpenGL. Единственное - пока оставил решение Phomm'а, потом подумаю над возможными проблемами.
PerfectEngine_demo.zip: добавлен значок игры в папку с ее исходниками.

Последний раз редактировалось SaiLight; 05.06.2015 в 03:07.
SaiLight вне форума Ответить с цитированием
Старый 05.06.2015, 06:39   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Про 4 удара - надо было сразу сказать, в подсказке это. Полагаю, по запарке забыл поправить на 1-3.

С коронами по краям каких-то особых предложений тоже не вижу, покамест для этого логично использовать взрыв, но вот только он великоват (по 3 клетки), может его тоже сделать направленным (как вариант, переключать одно из 4 направлений или текущую схему), и путь бьёт на 2 клетки вглубь допустим. Или вот идейка - включаешь одновременно 2 и 3 бонус, тратятся оба, и производится направленный взрыв. Для этого, кстати, можно и ослабить обычный взрыв, а то больно мощный, как по мне - 8 клеток, или сделать его с возможностью сноса только 1 клетки, но уже занятой короной, тогда двойной бонус будет эффективнее чем по отдельности, но для специфических случаев.

Левые окна нашёл когда были. Это были оставшиеся после АВ, когда я перезапускал экзешник, так что по идее не баг даже.
phomm вне форума Ответить с цитированием
Старый 05.06.2015, 10:30   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Проблема со шрифтами в игре. Текст отображается вопросами. У меня Windows 7 SP1 English Version

8Observer8 вне форума Ответить с цитированием
Старый 05.06.2015, 11:39   #7
SaiLight
Форумчанин
 
Аватар для SaiLight
 
Регистрация: 10.01.2009
Сообщений: 132
По умолчанию

phomm, все равно никак не найду проблему с 4 ударами. Возможно, уже исправлена? Насчет взрыва - в количестве затрагиваемых им ячеек исходили, прежде всего, из его полезности. Например, взрыв почти бесполезен на большом поле, при 20-30 создаваемых за шаг коронах. То есть, ты взорвешь 8, а он на их место поставит 30. Хотели в этом случае сделать 'остановку времени' после взрыва, но решили, что это было бы слишком. Насчет идеи с направленным взрывом при выборе нескольких бонусов - подумаю, потому что пока не очень вписывается в игровую логику, но идея мне понравилась. Кстати, насчет бонуса, останавливающего время - хотелось бы узнать у протестировавших, насколько им показалось полезным останавливать время именно на 1 ход и каким было бы оптимальное количество ходов для остановки.

8Observer8, спасибо за скриншот и данные о системе. Я проверю на виртуальной системе, когда будет время.

P.S. Вчера забыл исправить проблему с видимостью активных ячеек в режиме обучения, так что теперь исправил и перезалил архивы.

И еще:

Цитата:
Не понравилось оформление некоторых вещей, в первую очередь подсвечиваемой клетки - как просто в игре, так и в обучении.
Не очень понял, чем она не понравилась в обычной игре. Если речь о том, что она не слишком яркая - я специально делал ее такой, потому что она не столько указывает на выделенную ячейку, сколько подчеркивает факт выделения и возможность провести удар.

Цитата:
Это были оставшиеся после АВ
Про AB - не очень понял, что это такое.)

Последний раз редактировалось SaiLight; 05.06.2015 в 11:42.
SaiLight вне форума Ответить с цитированием
Старый 20.06.2015, 17:46   #8
SaiLight
Форумчанин
 
Аватар для SaiLight
 
Регистрация: 10.01.2009
Сообщений: 132
По умолчанию

Всем привет. Наконец, нашел время протестировать игру относительно неверного отображения символов в английских версиях Windows. Так и есть, проблема замечена, но не уверен в необходимости с нею бороться. Проблема появилась давно, и основным способом ее решения является установка русского языка в панели управления (язык и региональные стандарты). То есть, насколько я понимаю, это даже не является багом, но лишь несовместимость программы с некоторыми версиями Windows.
SaiLight вне форума Ответить с цитированием
Старый 20.06.2015, 18:41   #9
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Проблема появилась давно, и основным способом ее решения является установка русского языка в панели управления (язык и региональные стандарты). То есть, насколько я понимаю, это даже не является багом, но лишь несовместимость программы с некоторыми версиями Windows.
Согласен. Проблемы никакой нет. Просто несовместимость с английскими версиями Windows. Правда, у меня уже лет 7 английская Windows и проблем с русским шрифтом в русскоязычных приложениях не было. Русский язык установлен.

Последний раз редактировалось 8Observer8; 20.06.2015 в 19:18.
8Observer8 вне форума Ответить с цитированием
Старый 20.06.2015, 19:55   #10
SaiLight
Форумчанин
 
Аватар для SaiLight
 
Регистрация: 10.01.2009
Сообщений: 132
По умолчанию

8Observer8, я имитировал вашу ситуацию на стороннем компьютере с английской версией Windows 7 - те же самые вопросительные знаки, и все решилось после выполнения инструкции из этого блога.
SaiLight вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Perfect Light] Двадцатьпяшки SaiLight Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 23.01.2014 13:03
[Delphi] логическая игра точки Tomat92 Помощь студентам 1 04.06.2013 21:21
Логическая Игра kionec Общие вопросы C/C++ 0 18.02.2013 08:09
Лучшая логическая игра? NSvirus Свободное общение 17 11.01.2011 17:27
Clock by Perfect Light SaiLight Софт 2 28.07.2010 10:16