============
== ピントゥ ==
============
言語:デルフィ
バージョン: 0.02
著者:トニー(
[email protected])
日付: 2002.01.13
導入
============
これまで見たジグソーパズルは正方形のタイルが多く、2枚のタイルの位置を入れ替えないと動かせないものが多く、本物のジグソーパズルとは感覚が違いすぎてとても違和感がありました。
少し前に、『三国志 趙雲伝』に収録されているジグソーパズルを見たことがありますが、タイルのエッジが凹凸になっていて、ウィンドウ内で任意のタイルをドラッグすることができます。 ...似たようなソフトを自分で作ってみようと思いつきました。 (その後、bjig32 という外国のジグソーパズルを見ました。とても良かったです。このプログラムの開発を始める前にこれを見ていたら、おそらく自分で開発しようとは思わなかったでしょう。なぜなら、私の意見では、開発する方法はないからです。それと同じくらい素晴らしいパズルゲームです。)
どのように実装するか
==================
ゲームのシステム全体には、私が設計した 2 つのクラス、TTuObj と TTuMng が含まれています。
TTuObj - タイルを指します。タイルは、切り取られた後の小さな画像であり、不規則な境界を持ち、マウスのドラッグ イベントに応じて配置されているコンテナ内で移動できます。このクラスは TObject から継承し、コンストラクターで TPanel と TImage をそれぞれ生成するように設計しました (TControl から継承されない、または TPanel から直接継承されない理由は、vcl を使用してコントロールを作成することにあまり慣れていないためです)。可能であれば書き換えてください)、TPanelは、TImageにはハンドルがなく形状を変更できないため、不規則なエッジ形状を生成するために使用され(そうだと思います)、TImageは画像を表示し、マウスイベントを提供するために使用されます。さらに、各 TTuObj は、周囲の TTuObj のポインタと、接続が確立されているかどうかも記録します。これにより、2 つのタイルが互いに接近しているときにそれらが接続されているかどうかを判断し、タイルの後にタイルを移動することができます。接続されているタイルを移動できます。
TTuMng - ジグソーパズル ゲームのマネージャーです。全体の絵を個々のタイルに分割し、それらを一元的に管理し、すべてのタイルが接続されているかどうか (つまり、ゲームが終了したか) を判断します。
既知のバグ
==========
システム全体の効率はまだ非常に低く、特にタイルを移動するときのちらつきが非常に激しいです。これは、タイルを移動すると最初にタイル自体の PAINT イベントがトリガーされるためだと思います。その後、タイル自体の PAINT イベントが、そのタイルが配置されているコンテナの PAINT イベントがトリガーされます。これは、すべてのタイルが 1 回再描画されることを意味します。そのため、不規則なエッジ コントロールの再描画は本質的に非効率であるため、このようにちらつきます。 。 TTuObj の AImage の WM_PAINT メッセージ処理関数を自分で処理してみました (つまり、タイルをドラッグしているときに再描画は許可されません) が、タイルを移動した後、通過した場所に残像が残ることがわかりました。 「三国志 趙雲」のパズルゲームは DirectX で書かれていましたが、ちらつきは全くありませんでした。将来は DirectX で書いてみようと思います。
参加して改善できることを願っています!!!!!!