مصدر المقال: csdn المؤلف: تشين وانفي
عن المؤلف
تشين وانفي، ذكر، حاصل على درجة البكالوريوس في الرياضيات والبرمجيات من جامعة سنترال ساوث. وكان أحد كبار المبرمجين ومحلل الأنظمة في شركة Beijing Great Wall Software. ويتمتع بخبرة واسعة في تطوير j2se وj2ee. تعمل حاليًا على بحث j2me. يمكن الاتصال به على [email protected]
ملخص
تقدم هذه المقالة خطة تصميم للعبة Tetris استنادًا إلى MIDP1.0، كما توفر الكود المصدري للتنفيذ الكامل. أكبر ميزة في اللعبة هي قابلية الشاشة للتكيف. بغض النظر عن حجم شاشة الهواتف المحمولة المختلفة وأجهزة المساعد الرقمي الشخصي، يمكن للعبة دائمًا الحصول على أفضل تأثير للعرض. تم اختبار اللعبة على أربعة محاكيات لمجموعة أدوات J2me اللاسلكية 2.1.
إخلاء المسؤولية: جاء رمز اللعبة هذا في الأصل من مشروع ياباني مفتوح المصدر (انظر المرجع 1)، وتم تعديله بشكل كبير بواسطة المؤلف.
فيما يلي بعض لقطات الشاشة للعبة:
تصميم
1. عملية التشغيل
عملية تشغيل هذه اللعبة بسيطة للغاية. بعد أن يقوم المستخدم بتشغيل MIDlet، يدخل إلى الشاشة الرئيسية للعبة وتبدأ الشاشة في عرض شاشة الترحيب. بعد أن يضغط المستخدم على زر [ابدأ]، يمكنه بدء تشغيل اللعبة. وعندما يريد المستخدم التوقف مؤقتًا، يضغط على زر [ابدأ] مرة أخرى، ويتم إيقاف اللعبة مؤقتًا إذا ضغط المستخدم على زر [ابدأ] مرة أخرى توقفت مؤقتًا، وتستمر اللعبة في التشغيل. في أي وقت يتم الضغط على زر [خروج]، سيتم إنهاء لعبة MIDlet.
مخطط تدفق شاشة اللعبة كما يلي:
2. الخوارزمية
يستخدم تصميم لعبة MIDP بشكل أساسي خيطًا أو مؤقتًا لإنشاء أحداث إعادة الرسم، ويستخدم سلاسل الرسائل وإدخال المستخدم لتغيير حالة اللعبة. هذه اللعبة ليست استثناءً. بعد بدء تشغيل MIDlet، يتم إنشاء مؤشر ترابط لإعادة الرسم على الفور، والذي يرسم الشاشة كل 50 مللي ثانية. بالطبع، هناك بعض إجراءات التحسين عند إعادة الرسم، لا يلزم إعادة رسم جميع وحدات البكسل الموجودة على الشاشة، ولكن هناك تحديدات، مثل تلك الكائنات المتساقطة التي تم إصلاحها على لوحة اللعبة (هناك 7 أنواع من الكائنات المتساقطة في المجموع. مكونة من 4 قطع من الطوب الصغير، كل جسم ساقط له لون ثابت ويمكن تدويره لأعلى ولأسفل ولليسار ولليمين، فلا داعي لإعادة رسمه. لوحة اللعبة عبارة عن CommandListener الذي يمكنه قبول أوامر لوحة مفاتيح المستخدم والتحكم في إجراءات اليسار واليمين والأسفل والتدوير للكائن الساقط. ينعكس التحكم في تدفق اللعبة بأكملها في طريقة الطلاء () لكائن لوحة اللعبة. يقوم Paint() برسم شاشة اللعبة الحالية بناءً على حالة اللعبة الحالية. من السهل جدًا رسم شاشة الترحيب وشاشة انتهاء اللعبة. يعد رسم شاشة الإيقاف المؤقت للعبة أمرًا سهلاً للغاية أيضًا، ما عليك سوى تعيين علامة بحيث لا تكون هناك حاجة إلى تنفيذ إجراء إعادة رسم فعليًا عند تنفيذ Paint(). لرسم الشاشة أثناء تشغيل اللعبة، يجب رسم الجسم الساقط في الموضع الحالي للجسم الساقط. قبل رسم الكائن الساقط، حدد ما إذا كان الكائن الساقط لا يزال من الممكن أن يسقط، اتركه يسقط مسافة واحدة ثم ارسمه إذا لم يعد من الممكن أن يسقط، حدد ما إذا كانت اللعبة في حالة انتهاء اللعبة إذا كانت اللعبة في حالة انتهت، فاضبط حالة اللعبة على حالة انتهاء اللعبة، بحيث ترسم اللوحة القماشية صورة انتهت اللعبة في المرة التالية التي يتم فيها إعادة رسمها إذا لم تكن اللعبة في حالة انتهاء اللعبة ، قم بإصلاح الكائنات المتساقطة وتحقق من الكائنات المتساقطة على لوحة اللعبة في نفس الوقت، وتحقق من جميع الصفوف الموجودة أسفل الصف الحالي لمعرفة ما إذا كان حذف الصف مطلوبًا. إذا كان حذف الصف مطلوبًا، فامسح بيانات الصف المحذوف في اللعبة Map، ثم ارسم الصف المحذوف بلون الخلفية. ثم قم بتهيئة جسم ساقط جديد وارسم هذا الكائن الساقط الجديد. الرسم البياني لطريقة الطلاء هو كما يلي:
3. بنية البيانات
تتضمن هذه اللعبة هياكل البيانات التالية.
منطقة اللعبة
منطقة اللعبة هي جزء من شاشة الهاتف المحمول أو المساعد الرقمي الشخصي، المنطقة عبارة عن مربع، ويجب أن يكون طول الجانب قابلاً للقسمة بالتساوي على 16 (لأن منطقة اللعبة الروسية هي بالضبط مربع يبلغ طوله 16 طوبة صغيرة و16 طوبة صغيرة). واسع). يجب أن تتمركز هذه المنطقة على الشاشة، أفقيًا وعموديًا. تنقسم منطقة اللعبة إلى جزأين أفقيًا، جزء واحد بعرض 12 قطعة طوب صغيرة لعرض حاوية اللعبة، والجزء الآخر بعرض 4 مكعبات صغيرة لعرض الجسم المتساقط التالي والنتيجة.
الطوب الصغير
تعتبر الطوب الصغيرة جزءًا من حاوية الإسقاط واللعبة. يظهر كمربع، حيث يبلغ طول ضلعه 1/16 من طول ضلع منطقة اللعبة. عند رسم كل لبنة صغيرة، سيتم ترك 1 بكسل على الجوانب الأربعة ورسمها باللون الأبيض أو الرمادي بحيث يكون هناك فجوة بين الطوب. كل لبنة صغيرة لها أيضًا معرف يتراوح من 1 إلى 8. يمكننا استخدام مصفوفة ألوان (تسمى BRICK_COLORS في البرنامج) لتخزين هذه الألوان الثمانية. إذا كان معرف لبنة صغيرة معينة هو 3، فإن لون الطوبة الصغيرة هو BRICK_COLORS[3-1].
كائن السقوط
القطرة عبارة عن مربع مصنوع من 16 طوبة صغيرة. هناك إجمالي 7 أنواع من الأجسام المتساقطة، مثل تلك التي على شكل "حقل"، وشكل "L"، وما إلى ذلك. هناك 4 اختلافات في الدوران لكل جسم ساقط. كل جسم ساقط له معرف يتراوح من 1 إلى 7. لأنه بالنسبة للجسم الساقط فإن لونه ثابت. يمكننا أيضًا استخدام القيمة المنخفضة لهذا اللون في مصفوفة BRICK_COLORS بالإضافة إلى 1 كمعرف للكائن الساقط.
على سبيل المثال، الجسم الساقط على شكل "L" له معرف 3، وتنوعه هو:
إذن ما هي بنية البيانات المستخدمة لتخزين جسم ساقط لنأخذ جسمًا ساقطًا على شكل حرف "L" كمثال للتوضيح:
نظرًا لأن كل جسم ساقط له أربع حالات، فيمكننا التفكير في استخدام مصفوفة بطول 4 لتخزين الحالات الأربع للجسم الساقط. يمثل كل عنصر في المصفوفة حالة الجسم الساقط. إذًا ما الذي يجب استخدامه لتمثيل حالة معينة من الجسم الساقط، كما يتبين من الشكل أعلاه، من الأنسب استخدام مصفوفة ثنائية الأبعاد 4X4 لتخزين حالة الجسم الساقط. عندما يظهر الطوب الملون، تكون القيمة 1، وحيثما يوجد لون الخلفية فقط ولا حاجة للرسم، تكون القيمة 0. لذلك، يمكن تمثيل الحالات الأربع للجسم الساقط على شكل حرف "L" بمصفوفة ثلاثية الأبعاد:
محمي int blockpattern3[][][] = {
{{0، 1، 0، 0}، {0، 1، 0، 0}، {0، 1، 1، 0}، {0، 0، 0، 0}}،
{{0، 0، 0، 0}، {0، 1، 1، 1}، {0، 1، 0، 0}، {0، 0، 0، 0}}،
{{0، 0، 0، 0}، {0، 1، 1، 0}، {0، 0، 1، 0}، {0، 0، 1، 0}}،
{{0، 0، 0، 0}، {0، 0، 1، 0}، {1، 1، 1، 0}، {0، 0، 0، 0}}
};
خريطة اللعبة
تُستخدم خريطة اللعبة لتخزين المربعات الثابتة في حاوية اللعبة. تتكون حاوية اللعبة من 12 وحدة طوب صغيرة عرضًا و16 وحدة طوب صغيرة ارتفاعًا، بما في ذلك الجداران الأيسر والأيمن وأسفل الحاوية أدناه. لذلك يتم استخدام مصفوفة ثنائية الأبعاد مقاس 16 × 12 (تسمى بيانات الخريطة في البرنامج) لتخزين الطوب الثابت. إذا كانت Mapdata[i][j]=k(k!=0) فهذا يعني أن هناك قالبًا صغيرًا ثابتًا في الصف i والعمود j في حاوية اللعبة، وقيمة اللون للطوب الصغير هي BRICK_COLORS[k). -1]. إذا كان k = 0، فهذا يعني أنه لا يوجد طوب في الصف i والعمود j.
ولذلك، بالنسبة لوقت تشغيل اللعبة التالي، فإن قيمة بيانات الخريطة هي {{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0 , 0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0 , 0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0 ، 0،0،0،0،0،0،8}
{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8} {}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0, 8}
{8,0,0,0,0,0,0,0,0,1,1,8}{8,0,0,0,0,0,0,0,0,1,1,8} {8,0,0,0,0,0,7,7,5,1,1,8}{8,0,5,0,0,7,2,5,5,1,1,8}
{8,8,8,8,8,8,8,8,8,8,8,8}}
كود المصدر والكود القابل للتنفيذ
هناك 3 ملفات في المجموع: src.rar، ketrisgame.jad، ketrisgame.jar ملاحظة: src.rar يحتوي على كافة رموز المصدر. هناك أيضًا ملفات موارد مطلوبة لتشغيل البرنامج في ketrisgame.jar بعد تثبيت wtk2.1، ضع ketrisgame.jad وketrisgame.jar في نفس الدليل (لاحظ أن مسار الدليل لا يمكن أن يحتوي على أحرف ومسافات صينية)، انقر نقرًا مزدوجًا فوق ملف ketrisgame.jad، يمكنك تشغيل اللعبة في المحاكي.
مراجع
http://www.javadrive.jp/j2me/game/3/index.html
<j2me باختصار>
<مقدمة إلى برمجة جافا للهاتف المحمول/المساعد الرقمي الشخصي>