الآن صارت لعبة Plane Fighter الشهيرة على مستوى منتدى جافا للأخ Final Heaven
متاحة على الجوالات ( تطبيق J2ME)
ومجربة على جوال 6600 ( أغبى انواع الأجهزة الذكية) وبالتالي ان اشتغلت عليه فستعمل على غيره
طبعا التصميم أولي .. وأولي جدا
وصراحة لم أعالج موضوع تحسين الأداء Optimization بالنسبة لسرعة المعالجة وادارة الذاكرة
واترك هذا الأمر لكم ..
حاولت قدر المستطاع مراعاة والتزام منطق اللعية ذاته الذي صممه الأخ Final Heaven
و بنفس الوقت الاستفادة من تقنيات برمجة الألعاب التي توفرها الحزمة javax.microedition.lcdui.game بدءا من MIDP 2.0 .
كاستخدام الصف Sprite ليغلف العناصر المتحركة كالطائره والصواريخ و القنبلة و الوحوش .
مما سهل عملية التحريك كما وفر لي الطريقة collidesWith التي يستدعيها غرض من الصف Sprite وتأخذ برامتر غرض من صف Sprite آخر للاستعلام عن تصادم هذين الصفين واذا كان الاجابة "نعم تصادما" تعيد الطريقة true ذلك سهل لي عملة كشف التصادم بين الصواريخ والوحوش وبين القنابل والطائرة بدل عملية مقارنة الPixel المعقدة .
وهذا مخطط UML لتسهيل فهم المكونات العامة للتطبيق ..
لأنه بالنسبة لي بصراحة اعتبر عملية قراءة كود تطبيق جافا بدون مخطط الصفوف الرئيسي هم بكبر الجبال ... حتى لوكان التطبيق بسيط !!

واجهتني بعض المشاكل التي اعطيتها حلول (ترقيعية)
أولا : عند رسم الطائرة أسفل الشاشة مثل لعبة الأخ Final Heaven استخدمت الكود التالي :
x = this.getWidth(); y = this.getWidth(); plane = new Plane(); plane.plane.setPosition(x / 2, y / 2 + 20);
ليعطي نتيجة صحيحة على الموبايل ... أي اظهار الطائرة أسفل الشاشة
بينما على المحاكي يؤدي الكود السابق الى اظهار الطائرة وسط الشاشة تقريبا .
لأن التعويض بـ x و y مباشرة .. يعطي نتيجة صحيحة على المحاكي ولكن لا تظهر الطائرة على الجوال .
ثانيا : لم اجد أي طريقة لرسم القنبلة بحيث يمكنني بعد ذلك كشف التصادم كما فهل الأخ Final Heaven
واضررت الى نمذجتها بصف Sprite عبر صورة PNG لدائرة ذات خلفية سوداء .
ثالثا : رسم الانفجار يتم في الزاوية العيا اليسرى للطائرة أو الوحوش ولم اجد طريقة لايجاد احداثيات التصادم
الموضوع الذي كاد يشيبني هو موضوع القيم العشوائية ..
الكود الذي استخدمه الأخ Final Heaven يعطي نتائج صحيحة على المحاكي
ولكن على الجوال يعطي Exception:
Random random=new Random(); int randomNum = random.nextInt (10);
بعد بحث طويل اكتشفت انه في الجوالات يستوجب ازالة الاشارة (موجب او سالب) بالشكل التالي :
int randomNum =(random.nextInt() >>>1) % 10;
