Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.03.2015, 13:36
Аватар для ined
ined ined вне форума
Начинающий
 
Регистрация: 16.11.2008
Адрес: Российская Федерация!! :)
Сообщения: 165
Версия Delphi: Delphi 2010
Репутация: 1272
По умолчанию Алгоритм

Здравствуйте всем. У меня проблема я не понимаю как сделать алгоритм который будет формировать список Фигур полимино, чтобы заполнить карту без лишних или недостающих полиминошек. Посоветуйте куда копать, или где можно прочитать что-то подобное и похожее?

На данный момент список формируется с помощью Random() и их 50 поли.

Собственно моё творение -Полимино

Если обнаружите ошибки в работе программы напишите тут.
__________________
11011111 INED Home code
VK
Ответить с цитированием
Этот пользователь сказал Спасибо ined за это полезное сообщение:
phomm (06.04.2015)
  #2  
Старый 18.03.2015, 17:00
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

А поворачивать фигуры как?
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #3  
Старый 18.03.2015, 21:00
Аватар для ined
ined ined вне форума
Начинающий
 
Регистрация: 16.11.2008
Адрес: Российская Федерация!! :)
Сообщения: 165
Версия Delphi: Delphi 2010
Репутация: 1272
По умолчанию

Управление простое. Выбрав левой клавишей мыши фигуру удерживая её нажимаем на правую клавишу мыши фигура начнёт переворачиваться.
__________________
11011111 INED Home code
VK
Ответить с цитированием
Этот пользователь сказал Спасибо ined за это полезное сообщение:
Freeman (18.03.2015)
  #4  
Старый 18.03.2015, 21:21
Аватар для ined
ined ined вне форума
Начинающий
 
Регистрация: 16.11.2008
Адрес: Российская Федерация!! :)
Сообщения: 165
Версия Delphi: Delphi 2010
Репутация: 1272
По умолчанию

Разве нету ни у кого конструктивных предложений?
__________________
11011111 INED Home code
VK
Ответить с цитированием
  #5  
Старый 18.03.2015, 22:52
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от ined
Разве нету ни у кого конструктивных предложений?
Вспомнил свой опыт "Дос Навигатора" и собрал-таки одну карту. Теперь могу говорить.

Замечания по интерфейсу:
  • Карта должна помещаться в видимую область со всеми кубиками без прокрутки. Сейчас нет обзорности, поэтому играть сложнее и глупее.
  • Возможность крутить фигуру на месте правой кнопкой без захвата.
  • Вероятно, полезна будет также возможность захвата с поворотом правой кнопкой, не знаю. Надо добавить и протестировать.
  • По аналогии с пасьянсами:
    • По однократному нажатию левой кнопкой подсвечивать место, куда может быть поставлена фигура на карте.
    • Несколько однократных нажатий подряд циклически перещелкивают все возможные места. Так будет проще учиться тем, кто не играл в "Пентикс".
    • Двойной клик левой кнопкой перемещает фигуру в подсвеченное место.
Реализация пасьянсного интерфейса даст возможность играть чисто кликами, без таскания фигур, что проще и быстрее.

По геймплею и математике игры советую посмотреть встроенную игру "Дос Навигатора" в режиме "Пентикс". Она есть в DN/2 под Windows, вызывается по Alt+F9, далее кнопка "Уст." в русском переводе.

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

А в целом игра хорошая, хвалю.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
Этот пользователь сказал Спасибо Freeman за это полезное сообщение:
ined (18.03.2015)
  #6  
Старый 18.03.2015, 23:14
Аватар для ined
ined ined вне форума
Начинающий
 
Регистрация: 16.11.2008
Адрес: Российская Федерация!! :)
Сообщения: 165
Версия Delphi: Delphi 2010
Репутация: 1272
По умолчанию

Спасибо за предложения по интерфейсу, но мой вопрос остался без внимания.

В дальнейшем я собирался сделать различные варианты интерфейса, но принцип пасьянса я думаю тут неуместен.... посмотрим.
Цитата:
Карта должна помещаться в видимую область со всеми кубиками без прокрутки. Сейчас нет обзорности, поэтому играть сложнее и глупее.
Игра сделана для широкоэкранных мониторов, поэтому у меня реализовано сдвиг камеры. Если окно растянуть в ширь вы заметите что перемещение камеры постепенно затормаживается пока не достигнет 16:9 соотношение сторон области видимости.
__________________
11011111 INED Home code
VK
Ответить с цитированием
  #7  
Старый 18.03.2015, 23:38
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от ined
Игра сделана для широкоэкранных мониторов, поэтому у меня реализовано сдвиг камеры.
Сдвиг камеры -- это хорошо для самолюбия программиста, но неудобно для игры. Я играю в окне, и при попытке растянуть окно программы не понял, что она отключает прокрутку при достижении пропорции 16:9. На мониторе 1280×1024 после запуска игра выглядит так, как на скриншоте.



После вашего объяснения попробовал тянуть смелее, и да, после достижения определенной ширины прокрутка прекратилась. Мое мнение о прокрутке в логической игре осталось прежним.

А над кликовым интерфейсом вы все же подумайте. Это здорово расширит возможную аудиторию игры.
__________________
Не стоит путать форумы с богадельнями. © Bargest

Последний раз редактировалось Freeman, 18.03.2015 в 23:40.
Ответить с цитированием
  #8  
Старый 18.03.2015, 23:56
Аватар для ined
ined ined вне форума
Начинающий
 
Регистрация: 16.11.2008
Адрес: Российская Федерация!! :)
Сообщения: 165
Версия Delphi: Delphi 2010
Репутация: 1272
По умолчанию

Хорошо. Сделаю переработку расположений карты и полимино.
Freeman, можешь что-то посоветовать по алгоритму, ТЕ по основному вопросу темы?
__________________
11011111 INED Home code
VK
Ответить с цитированием
  #9  
Старый 19.03.2015, 00:36
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от ined
Freeman, можешь что-то посоветовать по алгоритму, ТЕ по основному вопросу темы?
Алгоритма не знаю. "Дос Навигатор", который я советовал посмотреть, предлагает малые фигуры (вплоть до точки) тоже потому что не знает, видимо. Этот алгоритм существует вообще?
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #10  
Старый 19.03.2015, 20:19
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Вчера прошел все карты по второму разу. Игра конкретно нравится. Нужны новые карты либо случайная их генерация после нахождения алгоритма... Но!

Пасьянсное управление просто обязательно! После нескольких сеансов рука устает и начинаешь банально ронять фигуры. Нужно управление кликами!

Еще нужно сделать так, чтобы фигуры не падали друг на друга, а то случайно уроненные фигуры не с первого раза найдешь.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #11  
Старый 20.03.2015, 09:59
Аватар для ined
ined ined вне форума
Начинающий
 
Регистрация: 16.11.2008
Адрес: Российская Федерация!! :)
Сообщения: 165
Версия Delphi: Delphi 2010
Репутация: 1272
По умолчанию

Решил переработать интерфейс в корне. Надеюсь это не займёт много времени у меня.
__________________
11011111 INED Home code
VK
Ответить с цитированием
  #12  
Старый 20.03.2015, 11:34
phomm phomm вне форума
Новичок
 
Регистрация: 07.10.2013
Адрес: Тюмень
Сообщения: 50
Версия Delphi: 7/2007/XE+/FPC
Репутация: 22
По умолчанию

Игра, конечно, очень занятная ! Говорю как обладатель советского пентамино в коробочке и играмши в него немало.

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

По интерфейсу - не знаю, вроде ничего так, может пасьянсовый будет действительно удобнее, насчёт поворота - может продублировать на что-то кроме мышки (пробел наверное). Сделать подсветку границ фигур для более удобного поиска на поле, ну и конечно в банке фигур как-то сделать чтобы наложение фигур не убивало глаза. Прокрутка имхо вообще лишняя - сделать просто более норм банк, и помельче, да и колво фигур в банке будет меньше при экономном алгоритме.
А вот что реально меня раздосадовало, так это бесконечность игры, я бы хотел видеть, что вот такие-то уровни я уже прошёл, а ещё если уже фигуры наставлены - то спрашивать о переключении уровня. Ну и переиграть уровень при этом отдельной опцией тогда сделать.
Ну и озвученные уровни сложности, которые можно и при нынешнем рандоме сделать, просто уменьшив набор генерируемых фигур, для самого сложного оставляя, например, 110% кубиков в сумме по фигурам по отношению к клеткам поля.

Есть ещё такой вопрос, думаю, исходник без озвученного алгоритма несложный, планируете ли открывать общественности ?
Ответить с цитированием
  #13  
Старый 20.03.2015, 16:15
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

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

Фигуры пентамино ведь покрывают определенные квадраты, если их объединить. Вот и нужно посчитать площадь в покрываемых квадратах, а затем нагенерить случайных комбинаций комплементарных фигур, плюс уголки на обрезки, как сейчас. И всё. Даже мелкие фигуры "Дос Навигатора" не понадобятся, достаточно будет сегодняшних уголков.

Если комплементарные комбинации заранее известны и прописаны в программе, карту можно генерить сразу в единицах покрываемых квадратов, добавляя или вырезая уголки для красоты и/или сложности.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter