============
== دبوس تو ==
============
اللغة: دلفي
الإصدار: 0.02
المؤلف: توني (
[email protected])
التاريخ: 2002.01.13
مقدمة
============
تحتوي معظم ألغاز الصور المقطوعة التي رأيتها من قبل على مربعات مربعة، ولا يمكن تحريك الكثير منها إلا عن طريق تبادل مواضع قطعتين. يبدو الأمر مختلفًا تمامًا عن ألغاز الصور المقطوعة الحقيقية لدرجة أنها غير مريحة للغاية.
منذ وقت ليس ببعيد، رأيت أحجية الصور المقطوعة متضمنة في "أسطورة تشاو يون للممالك الثلاث". تتميز بلاطاتها بحواف غير منتظمة (مع حواف مقعرة ومحدبة)، ويمكنك سحب أي بلاطة في النافذة. هذا ما جعلني أفكر ... خطرت لي فكرة صنع برنامج مماثل بنفسي. (ثم رأيت لغزا أجنبيا يسمى bjig32. كان جيدا جدا. لو رأيته قبل أن أبدأ في تطوير هذا البرنامج، ربما لم أفكر في تطويره بنفسي، لأنه في رأيي لا توجد طريقة للتطوير لعبة ألغاز جيدة مثلها.)
كيف أقوم بتنفيذه
============================================================
يتضمن نظام اللعبة بأكمله فئتين صممتهما بنفسي، TTuObj وTTuMng.
TTuObj - يشير إلى البلاط، وهو عبارة عن قطعة صغيرة من الصورة بعد قصها ولها حدود غير منتظمة ويمكن أن تتحرك في الحاوية التي توجد بها استجابة لأحداث السحب بالماوس. لقد صممت هذه الفئة لترث من TObject، ثم أنشئ TPanel و TImage على التوالي في المنشئ (السبب في عدم توريثها من TControl أو توريثها مباشرة من TPanel هو أنني لست على دراية باستخدام vcl لكتابة عناصر التحكم. إذا أمكن، أعد كتابتها)، يتم استخدام TPanel لإنشاء أشكال حواف غير منتظمة، لأن TImage لا يحتوي على مقبض ولا يمكنه تغيير شكله (أعتقد ذلك)، ويستخدم TImage لعرض الصور وتوفير أحداث الماوس. بالإضافة إلى ذلك، يقوم كل TTuObj أيضًا بتسجيل مؤشرات TTuObj حوله وما إذا كان قد تم إنشاء اتصال أم لا، مما يوفر القدرة على تحديد ما إذا كان البلاطان متصلان عندما يكونان قريبين من بعضهما البعض، وتحريك أي بلاط بعد البلاط متصلة ويمكنها تحريك البلاط المتصل به.
TTuMng - هو مدير لعبة ألغاز الصور المقطوعة، وهو مسؤول عن تقسيم الصورة الكاملة إلى مربعات فردية، وإدارتها مركزيًا، وتحديد ما إذا كانت جميع المربعات متصلة (أي أن اللعبة قد انتهت).
الأخطاء المعروفة
==========
لا تزال كفاءة النظام بأكمله منخفضة جدًا، خاصة عند تحريك البلاط، يكون الوميض شديدًا للغاية بعد الحكم الأولي، وأعتقد أن السبب هو أنه عند نقل البلاط، سيتم تشغيل حدث الطلاء الخاص بالبلاط نفسه أولاً. وبعد ذلك سيتم تشغيل حدث PAINT الخاص بالبلاط نفسه. حدث PAINT للحاوية التي يوجد بها البلاط، مما يعني أنه سيتم إعادة رسم جميع المربعات مرة واحدة. إن إعادة رسم عناصر التحكم في الحواف غير المنتظمة غير فعالة بطبيعتها، لذلك سوف تومض بهذه الطريقة . لقد حاولت التعامل مع وظيفة معالجة الرسائل WM_PAINT الخاصة بـ AImage في TTuObj بنفسي (أي أن إعادة الرسم غير مسموح بها عند سحب التجانب)، لكنني وجدت أنه بعد نقل التجانب، فإنه يترك صورة لاحقة أينما مرت. تمت كتابة لعبة الألغاز في "Three Kingdoms Zhao Yun" باستخدام DirectX، ولم يكن هناك وميض على الإطلاق، وربما سأحاول كتابتها في DirectX في المستقبل.
آمل أن تتمكن من الانضمام وتحسينه !!!!!!