|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.04.2008, 14:19 | #1 |
Пользователь
Регистрация: 01.04.2008
Сообщений: 10
|
Puzzle... Помогите со склеиванием кусочков
Здравствуйте! Помогите пожалуйста в написании игры Puzzle.
Загвоздка в том, что я никак не могу додуматься, как склеивать между собой подходящие фрагменты изображения, т.е. если игрок соединяет два подходящих кусочка, то они склеиваются в один большой кусочек Заранее благодарна |
01.04.2008, 15:28 | #2 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
А Вы какими методами собираетесь отрисовывать частички пазла? ...логика в индексах конечно же, ...храним в памяти правильную карту индексов принадлежности кусочков с индексами поворотов, и соответственно, при установке в нужное место карты скелета при совпадении индексов делаем процедуру отрисовки кусочка в общую картинку пазла.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
01.04.2008, 18:45 | #3 | |||
Пользователь
Регистрация: 01.04.2008
Сообщений: 10
|
Большое спасибо за быстрый ответ
Цитата:
Открывается картинка и режется на 16 кусочков (4*4), каждый кусочек отрисовывается в Image (т.е. получается, что у меня 16 компонентов Image на форме). Возможно, есть какие-то более удобные способы сделать это Была б очень благодарна за подсказку. А теперь вновь возникшие вопросы... Цитата:
Цитата:
Последний раз редактировалось Пальмира; 01.04.2008 в 19:02. |
|||
01.04.2008, 19:52 | #4 | |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Цитата:
На поле сетка (невидимая). Фрагменты можно помещать только в ячейки сетки. Один массив [1..4,1..4] of TImage хранит правильное расположение фрагментов. Второй такой-же - текущее состояние. Незанятые клетки = nil. Очень легко рисовать. И даже если нужно будет переместить "склеенные" фрагменты, их легко вычислить просто просмотрев соседние ячейки. Если нужно будет усложнить в дальнейшем, можно сделать например фрагменты в виде шестиугольников или с вырезами (как в бумажном варианте). Структура программы практически не изменится. Разве что нужно будет хранить угол поворота фрагмента. |
|
01.04.2008, 20:57 | #5 | |
Пользователь
Регистрация: 01.04.2008
Сообщений: 10
|
To alexBlack, спасибо за внимание
Цитата:
Все же скланяюсь к индексации и даже попробовала кое-что. "Склеила" 2 фрагмента: проверила правильность положения по индексу, а после начала вместе их перемещать (т.е. при перемещении 1-го кусочка второй двигается рядышком как хвостик). Правда сразу возник вопрос: два то передвинуть не проблема, а как быть с большим числом? Вобщем мыслительный процесс в разгаре... Если есть идеи - высказывайте любые Даже если напрямую не поможет - возможно натолкнет на какую-нибудь интересную мыслю |
|
01.04.2008, 21:02 | #6 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
У каждого кусочка хранить по четыре ссылки - на то, что должно быть справа, снизу и т.д. Перед перемешиванием инициализировать, в процессе "работы" - проверять совпадает/не совпадает
|
01.04.2008, 22:51 | #7 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Подробнее...
Чтобы двигать и соединять части пазла в любом месте, нужно отказаться от создания множества объектов Image. Используйте PaintBox, отрисовывайте через Canvas кусочки в нужном положении.
Создайте сперва свой тип: Код:
Mas[i,j].IndexAttach Вам будет нужен для ссылки на другую картинку, к которой данная прикрепилась, если совпали индексы и координаты на плоскости. Сделайте флаг Drag: Boolean, в OnMouseDown PainBox'а придавайте ему истину, в OnMouseMove PainBox'а проверяйте флаг, если он истинный, то считывайте координаты мыши (Mouse.CursorPos.X и Mouse.CursorPos.Y) тот кусочек что попал координаты мыши должен сохранять в себе новые свои координаты в массиве пока мышь двигается, (а вместе с ним и те, что привязаны к нему) и клавиша нажата. В OnMouseUp PainBox'а пропишите ложь флага. Прорисовка через Canvas идет отдельной процедурой. В ней первым делом затирается поле, дальше просматриваются все ячейки в массиве, отображаются картинки с их координатами (PaintBox.Canvas.Draw(Mas[i,j].Top,Mas[i,j].Left,Mas[i,j].Map)); Вот в принципе, основа, остаются нюансы.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
01.04.2008, 23:34 | #8 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
По-моему, это не что иное, как разновидность известной игры в "пятнашки". И пронумеровать нужно всего лишь сами "кусочки", а кто сверху, снизу, сбоку - определяется исходной матрицей. Да и исходники для "пятнашек" и на форуме где-то были... |
|
01.04.2008, 23:40 | #9 | |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Цитата:
|
|
02.04.2008, 06:57 | #10 |
Пользователь
Регистрация: 01.04.2008
Сообщений: 10
|
Beermonza
Большое спасибо за подробный ответ Мне кажется это как раз то, что нужно! mihali4 Если бы все было так просто - я бы даже не стала создавать тему, потому что исходник пазлов-пятнашек у меня есть в книжке, а уж в интернете он выложен чуть ли не на каждом ресурсе, посвященном программированию |