============
== пин ту ==
============
язык:дельфи
версия: 0.02
автор: Тони (
[email protected])
дата: 2002.01.13
введение
============
Большинство головоломок, которые я видел раньше, состоят из квадратных плиток, и многие из них можно перемещать, только меняя местами две плитки. Это настолько отличается от настоящих головоломок, что это очень неудобно.
Недавно я увидел пазл из «Легенды о Чжао Юне из трех королевств». Его плитки имеют неровные края (с вогнутыми и выпуклыми краями), и любую плитку можно перетащить в окно. Это заставило меня задуматься. ... Мне самому пришла в голову идея сделать подобный софт. (Потом я увидел зарубежный пазл под названием bjig32. Он был очень хорош. Если бы я увидел его до того, как начал разрабатывать эту программу, возможно, я бы и не подумал о его разработке самостоятельно, потому что, по моему мнению, нет возможности разработать игра-головоломка, такая же хорошая.)
как я это реализую
==================
Вся система игры включает в себя два разработанных мной класса: TTuObj и TTuMng.
TTuObj — относится к тайлу, представляющему собой небольшой фрагмент изображения после вырезания. Он имеет неровные границы и может перемещаться в контейнере, в котором находится, в ответ на события перетаскивания мышью. Я разработал этот класс для наследования от TObject, а затем сгенерировал TPanel и TImage соответственно в конструкторе (причина, по которой он не наследуется от TControl или напрямую не наследуется от TPanel, заключается в том, что я не очень хорошо знаком с использованием vcl для записи элементов управления. Если можете, перепишите), TPanel используется для генерации неправильных форм краев, поскольку TImage не имеет Handle и не может менять свою форму (я так думаю), а TImage используется для отображения изображений и обеспечивает события мыши. Кроме того, каждый TTuObj также записывает указатели TTuObj вокруг него и установлено ли соединение. Это дает возможность определить, соединены ли два тайла, когда они находятся близко друг к другу, и переместить любой тайл после тайлов. соединены. Он может перемещать плитки, к которым он подключен.
TTuMng - менеджер игры-пазла. Он отвечает за разделение полной картинки на отдельные плитки, централизованное управление ими и определение того, все ли плитки соединены (то есть игра окончена).
известные ошибки
==========
Эффективность всей системы по-прежнему очень низкая, особенно при перемещении плитки, мерцание очень сильное. По предварительному мнению, я думаю, что это связано с тем, что при перемещении плитки сначала срабатывает событие PAINT самой плитки. и тогда сработает событие PAINT самого тайла. Событие PAINT контейнера, в котором находится тайл, означает, что все тайлы будут перерисованы один раз. Перерисовка элементов управления неровными краями по своей сути неэффективна, поэтому они будут мерцать вот так. . Я попробовал сам обработать функцию обработки сообщений WM_PAINT AImage в TTuObj (то есть перерисовка не допускается при перетаскивании тайла), но обнаружил, что после перемещения тайла он оставляет остаточное изображение везде, где бы он ни проходил. Игра-головоломка "Троецарствие Чжао Юнь" была написана в DirectX, и мерцания не было вообще. Возможно, я попробую написать ее в DirectX в будущем.
надеюсь, что вы сможете присоединиться и улучшить его!!!!!!