============
== broche tu ==
============
langue:delphi
version : 0.02
auteur : tony (
[email protected])
date: 2002.01.13
introduction
============
La plupart des puzzles que j'ai vus auparavant comportent des tuiles carrées, et beaucoup d'entre elles ne peuvent être déplacées qu'en échangeant les positions de deux tuiles. C'est tellement différent des vrais puzzles que c'est très inconfortable.
Il n'y a pas si longtemps, j'ai vu un puzzle inclus dans "La Légende de Zhao Yun des Trois Royaumes". Ses tuiles ont des bords irréguliers (avec des bords concaves et convexes), et vous pouvez faire glisser n'importe quelle tuile dans la fenêtre. ... J'ai eu l'idée de créer moi-même un logiciel similaire. (Ensuite, j'ai vu un puzzle étranger appelé bjig32. C'était très bien. Si je l'avais vu avant de commencer à développer ce programme, je n'aurais peut-être pas pensé à le développer moi-même, car à mon avis, il n'y a aucun moyen de développer un jeu de réflexion aussi bon que lui.)
comment je le mets en œuvre
==================
L'ensemble du système du jeu comprend deux classes conçues par moi-même, TTuObj et TTuMng.
TTuObj - fait référence à une tuile, qui est un petit morceau d'image après avoir été coupée. Elle a des limites irrégulières et peut se déplacer dans le conteneur dans lequel elle se trouve en réponse aux événements de glissement de la souris. J'ai conçu cette classe pour hériter de TObject, puis générer respectivement un TPanel et un TImage dans le constructeur (la raison pour laquelle elle n'est pas héritée de TControl ou directement héritée de TPanel est que je ne suis pas très familier avec l'utilisation de vcl pour écrire des contrôles. Si vous le pouvez, réécrivez-le), TPanel est utilisé pour générer des formes de bords irrégulières, car TImage n'a pas de poignée et ne peut pas changer de forme (je pense que oui), et TImage est utilisé pour afficher des images et fournit des événements de souris. De plus, chaque TTuObj enregistre également les pointeurs du TTuObj autour de lui et si une connexion a été établie. Cela offre la possibilité de déterminer si les deux tuiles sont connectées lorsqu'elles sont proches l'une de l'autre, et de déplacer n'importe quelle tuile après les tuiles. sont connectés. Il peut déplacer les tuiles auxquelles il est connecté.
TTuMng - est le gestionnaire du jeu de puzzle. Il est chargé de diviser une image complète en tuiles individuelles, de les gérer de manière centralisée et de déterminer si toutes les tuiles sont connectées (c'est-à-dire que le jeu est terminé).
bugs connus
==========
L'efficacité de l'ensemble du système est encore très faible, surtout lors du déplacement d'une tuile, le scintillement est très important. Après jugement préliminaire, je pense que c'est parce que lorsqu'une tuile est déplacée, l'événement PAINT de la tuile elle-même sera d'abord déclenché, puis l'événement PAINT de la tuile elle-même sera déclenché. L'événement PAINT du conteneur où se trouve la tuile, ce qui signifie que toutes les tuiles seront redessinées une fois. Le redessin des contrôles de bord irréguliers est intrinsèquement inefficace, donc il scintillera comme ceci. . J'ai essayé de gérer moi-même la fonction de traitement des messages WM_PAINT de AImage dans TTuObj (c'est-à-dire que le redessin n'est pas autorisé lorsque la vignette est déplacée), mais j'ai constaté qu'après avoir déplacé la vignette, elle laissait une image rémanente partout où elle passait. Le jeu de puzzle dans "Three Kingdoms Zhao Yun" a été écrit en DirectX, et il n'y a eu aucun scintillement. Peut-être que j'essaierai de l'écrire en DirectX à l'avenir.
j'espère que vous pourrez nous rejoindre et l'améliorer !!!!!