المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : اصنع اول لعبه لك باستخدام جافا



Robatic
15-03-2006, 05:14 PM
السلام عليكم
اخواني واخواتي واخيرا انشاء الله راح نتعلم كيف نسوي لعبة snake بسيطة زي الي في الجوال (مش زيها بالزبط) باستخدام لغة جافا J2SE 2 وفكرتها مره بسيطه وتعتمد اعتماد تام علي تركيب البيانات Data Structure وبالتحديد على موضوع الـ linked list
الشرح بالكامل موجود بالصور. موجود على هذا الويب سايت ----> http://www.geocities.com/psychic_mental/snakeTutorial/tutorial2.html
وانشاء الله نستفيد من بعض ولا تبخلوا علينا
اخوكم Robatic
ملاحظه: الموضوع غير كامل وناقصه حاجات بسيطه ولكن انشاء الله راح نتساعد مع بعض ونكلمه ونخلي اسم اللعبه Dorarr Snake

إبراهيم المحيا
16-03-2006, 11:30 AM
فكرة حلوة اخوي


مشكور على اللعبة


تحياتي

|85|

Robatic
17-03-2006, 01:54 AM
العفو اخوي وطاط هذا كله لانك مصدر الهامي :)

Robatic
20-03-2006, 08:11 PM
السلام عليكم
قبل كل حاجه لازم نفهم كيف احنا نقدر نسوي فورم بسيط بلغة جافا
اول حاجه خلوني اقلكم كيف احنا نسوي وراثه بالجافا inheritince
الجافا ماهي زي لغة سي في لغة سي احنا نقدر نخلي اي كلاس يورث اكثر من كلاس واحد
لكن في الجافا انت فعليا ما تقدر تخلي كلاس يورث اكثر من كلاس واحد
طيب هل هذي حسنه او سيئه للجافا ؟
في الجافا انت تقدر تورث اكثر من كلاس بس بطريقه غير مباشره
يعني لو عندنا 3 كلاسات A,B,C
وكلاس B ورث الكلاس A
وكلاس C ورث الكلاس B هنا نقددر نقول انه كلاس C ورث B فعليا وورث A ضمنيا.
عشان نسوي فورم بلغة جافا لازم نورث كلاس اسمه JFrame والي عن طريقه نقدر نستخدم مكوناته لتحرير هذا الفورم الي نبغى نسويه
مثلا الحجم او مكان ظهوره او اضافة زر او حقل او الى اخره

الكلاس JFrame وارث كلاس اسمه Frame وهذا الثاني كمان وارث كلاس
بس هذا مو موضوعنا هنا اهم شيء نعرفه انه عن طريق الوراثه احنا قدرنا نستخدم حاجات كثيره ماهي موجود في الكود تبعنا بس موجوده في كود اخر احنا ورثناه وهذا الكود الاخر ممكن يكون ورث حاجات كثيره وهلم جرا
وفي هذا الموضوع في ملف مرفق يوريك كيف تسوي فورم بسيط بالجافا.........
اخوكم Robatic


EOT

النسر الابيض
29-03-2006, 02:56 PM
شكرا اخي لكن ماكملت موضوعك





تحياتي

Robatic
01-04-2006, 07:33 PM
المهم شباب بعد ما عرفنا كيف الوراثه في الجافا واهميتها وعرفنا كيف نسوي فورم بسيط في الجافا ونعطيه ابعاد ونظهره, باقي نعرف كيف نظيف components في هذا الفورم يعني زر , حقل نصي, شريط
الي عنده خلفيه بسيطه في الفيجوال بيسك راح يفهم الي انا راح اقوله
المهم
في الجافا لما تسوي فروم في شيء يسموه الـ Layout
هذا الي انا اتكلم عليه هو عباره عن طريقة عرض الـ components في الفورم
لانه هنا ما تقدر تضيف زر باستخدام الماوس وتحطه في المكان الي تبغاه , هنا لازم تسوي كل شيء بنفسك
في الجافا اذا انت سويت فورم واضفت زر الي الفورم من غير ما تحدد اش نوع الـ Layout راح تلاحظ انه الزر حياخذ مساحة الفورم كامله يعن كانه الزر مسوي FILL لكل مساحة الفورم

انت عشان تحل هذي المشكله او اذا ما تبغى هذا يصير خليني اشرحلك كيف




اول حاجه:
الفور في الجافا يكون الـ layout بشكل افتراضي FILL (بصراحه انا ناسي اش يكون بالزبط الي اعرفه انه يكون مقسم الي جهات NORTH, SOUTH, EAST, WEST, CENTER ) راح يكون center بشكل افتراضي وبما انه center فقط فراح يسوي ازاحه لكل الجهات الباقيه وهذا يفسر ليه الزر ماخذ مساحت الفورم كامله

المهم انت عشان تتحكم بالـ layout فيه امر او function تجي مع الكلاس JForm لي لازم تورثه عشان تسوي اي فورم اسمها setLayout
ترسلها instance من نوع الـ layout الي انت تبغاه

في الملف الي مرفق مع هذا الشرح انا استخدمت النوع FlowLayout
الي يعطيني الخاصيه انه كل ما اضيف زر او اي شيء يحطه في السنتر في اول صف في الفورم وبعد كذا كل ما تضيف شيء ثاني يحطهم الاثنين سنتر واذا الفورم ما يكفي راح ينزل للسطر الي بعده وهلم جرا

ارجوا ان يكون الشرح وافي وانشاء الله ما اكون قصرت معاكم


الملف المرفق الي هنا انا عامل فورم بسيط ومعطيه ابعاد 400, 100 واضفت فيه زر واحد بس
وانشاء الله في الدرس الجاي راح نشوف كيف احنا نقدر نسوي event لهذا الزر يعني لما تضغط على هذا الزر يصير اكشن معين على حسب الي نبغاه مثلا يطلعلنا مسج بوكس او حاجه زي كذا

اخوكم روباتك..........EOT

Robatic
08-04-2006, 08:26 PM
سلااااام
كيف الحال
الحين شباب خلونا نشوف اش سوينا بالجافا الى الان:
1) انشاء فورم بسيط
2) تحديد الـ Layout للفورم
3)اضافة components للفورم

باقي بس نعرف كيف نضيف event , في الفجوال بيسك كنا نعمل event للزر عن طريق double click لهذا الزر وبعدين نكتب الكود , لكن هنا في الجافا لازم احنا نسوي كل حاجه

اول حاجه خلونا نراجع معلوماتنا في الجافا
اول حاجه الجافا لغه يسمونها Container-Based Language يعني انت ما تقدر تسوي اي برنامج الا لازم يكون داخل container
خليني اقول حاليا انه الـ container انه كلاس

في الجافا في شيء اسمه كلا وفي شيء اسمه interface
الكلاس انت تقدر تورثه لكن الانترفيس لا
المشكله انه احنا عشان نعطي event لزر معين لازم نستخدم inertface اسمه ActionListener يعين لازم نسوي اوبجكت من ActionListener

طيب المشكله هي :
1) اي InterFace ما تقدر تسوي منها اوبجكت
2) الـ InterFace ما تقدر تسويلها وراثه
3) انت اساسا لما تسوي فورم للجافا لازم تورث الكلاس JFrame والمعروف في الجافا انه الكلاس ما يقدر يورث الا كلاس واحد فكيف راح تسوي وراثه للـ JFrame وفي نفس الوقت تسوي وراثه للـ ActionListener ؟؟؟

اول حاجه خلوني اقلكم انه امر الوراثه او الـ Keyword للوراثه في الجافا هي extends لكن عشان تقدر توصل لاي InterFace ي كيورد ثانيه غير الاكستندز وهي implements هذي شبيهه بالوراثه
وبهذي الطريقه احنا نقدر نحل الثلاث المشاكل الي فوق

بس خلوني كمان اتكلم شويه عن الانترفيس ActionListener
هذا الانترفيس عباره عن Abstract Class (مش 100/100)
وفيه method وحده اسمها actionPerformed تاخذ ActionEvent
كــ parameter , بس هذي الميثود عباره عن تعريف فقط من غير كود
من شروط الانترفيس انه لما تعمله implements لازم تسوي override لكل ميثود معرفه فيه
يعني مثلا لو فيه انتر فيس معرف فيه 1000 ميثود وسطه وانت ما تبغى منه الا ميثود وحده لازم تسوي override لكل هذي الميثود
فعشان كذا لازم نختار الانترفيس المناسب

في هذا الموضوع في ملفق مرفق لكود جافا عباره فورم وسطه زر ولما تضغط على الزر يطلع مسج بوكس

انشاء الله تكونوا فهمتوا عليا , وبعدين يا شباب لا تبخلوا علينا بخبرتكم اعطونا من الي عندكم


اخوكم Robatic .............................. .
.
.
.
.
EOT

القاضي2002
10-04-2006, 10:28 AM
موضوع مميز وشيق جدا للغاية ....

نشكر الجميع على الطرح المميز والمفيد ...

النسر الابيض
10-04-2006, 02:19 PM
شكرا اخي روباتيك مجهود تشكر عليه ومميز بارك الله فيك

تحياتي

Robatic
11-04-2006, 07:13 AM
سلااااااااااام
كيف الحال شباب وبنات
خلاص باقي شويه ونفهم كيف كلاس SnakeRun يعمل
بس قبل كل حاجه خلوني اذكركم ببعض المشكلات الي ناقشناها في الدرس الي قبل هذا

الـ Interface
ي ما قلنا قبل كذا انه انت ما تقدر تورث الانترفيس بكلمة extends
لازم تستخدم كلمة implements
كمان المشكله انه ممكن احنا نكون في حاجة انترفيس زي مثلا KeyActionListener
الي فيع 4 او 5 methods واحنا ما راح نحتاج الا وحده منهم فلازم نعرفهم كلهم من جديد


طيب لو في انترفيس فيه 1000 methods واحنا ما نبغى الا واحده منهم, كيف نسوي ؟ مافي الا تعرف الالف methods كلهم , وهذي عملية مزعجه


الحل :
فيه شيء كمان غير الكلاس والانترفيس الي يسموه Adapter
هذا الادابتر هو عباره عن كلاس مسوي implements لأنترفيس معين ومعرف فيه كل الـ methods المتعلقه بهذا الانترفيس

كل الي عالينا نسويه انه نورث هذا الكلاس ونعيد كتابة ( Override ) للميثود الي نبغاها وبس

المشكله: انه احنا اساسا الكلاس الي راح نسويه راح يورث الكلاس JFrame فكيف راح نورث الجافا فريم وفي نفس الوقت نورث الـ Adapter المطلوب ؟؟

الحل / عن طريق اسخدام بما يعرف بالـ Anonymous Inner Class الي هو الكلاس الداخلي الغير المعروف او الذي لا يمتلك اسم

وهي العمليه سهله وراح نطبقها خطوه خطوه

السيناريو:
راح نسوي كلاس يحتوي على فروم ابعاده 400,200 وفيه Label وبمجرد ما تضغط اي زر راح يتغير الـ Label الى رمز الزر (والله ماني عارف هل هو ASCI Code ولا لا )
راح نسوي هذا السيناريوباستخدام الطريقه التقليديه وكمان باستخدام الـ Anonymous Inner Class وانا لما اقول الطريقه التقليديه اقصده انه راح نسوي Implemets للـ KeyListener وراح نعرف كل الميثودز الي موجوده فيه

وانشاء الله راح نستفيد من بعض

في هذا الموضوع ملفين مرفقين للحالات الي سبق ذكرها

ملاحظه: الـ ActionListener Interface ماله Adapter لانه ما فيه الا ميثود وحده فقط

اذا كان في شيء صعب فهمه لا تستحوا

اخوكم Robatic

Robatic
17-04-2006, 05:43 PM
سلام عليكم
كيف الحال
انشاء الله راح اشرح كود كلاس SnakeRun بس قبل كل حاجه خلوني اقلكم اش هذا الكلاس يسوي

الكلاس هذا ينشء اوبجكت من SnakeManager
ويتأكد اذا تم الضغط على زر Space بانه يضيف نود جديده وكمان يحدد اتجاه الحركه على حسب الاسهم
في الجافا زر Space ياخذ الرقم 32
اما بالنسبه للأسهم فهي 37, 38, 39 , 40 : يسار, فوق, يمين, تحت, على التوالي

في البدايه انا فرضت انه اتجاه الحركه على اليمين يعني 39

اوكي خلونا نبداء بالشرح

في البدايه انا عرفت اوبجكت من نوع SnakeManager وسميتها snake وبعد كذا انا عرفت int وسميته direction عشان احدد اتجاه الحركه (السطرين 6 و 7 )
وبعد كذا في الـ constructor تبع SnakeRun (سطر 9) انا قمت باضافة KeyListner عشان اعرف اش اسوي في حالة ضغط زر في الكيبورد (اسطر من 15 الى 27)
واستخدمت Anonymous Inner Class زي ما شفنا في الدرس السابق
والان ابغى اشوف اش هو الزر الي انضغط وراح اخزنه قيمته في المتغير direction بس ابغى اتاكد انه اما يكون 37او 38 او 39 او 40
(السطر 19) وبالاضافه الى ذلك ابغى اعرف انه هل الزر الي انضغط هو Space واذا كان Space راح اضيف نود جديده عن طريق ميثود اسمها addChild وجوده في الكلاس SnakeManager الي انا سويت منه اوبجكت اسمها snake (الاسطر 20-24)

الان انا تأكد من المدخلات (الزر الي تم ضغطه) باقي عملية تمثيل الكلام الي ذكر فوق الى رسمه بحيث انه المستخدم يشوف انه النود فعلا يتحرك كما لو كان لعبه, وعشان كذا يبغالي Timer يسويلي refresh للرسمه النهائيه الي راح تطلع كل 50 جزء من الثانيه لانه هذي السرعه ما تلاحظها عين الانسان فكل شيء راح يبدو وكانه يتحرك وهو اساسا ما يتحرك بس احنا اعدنا الرسم من جديد ولكن بموقع مختلف (احداثيات مختلفه)
وعشان اسوي الكلام هذا في كلاس اسمه Timer في الجافا يعطيني الميزه هذي

فعشان كذا انا سويت اوبجكت من نوع Timer واعطيتها الاسم t
ولو تلاحظوا انه الـ Constructor تبع الكلاس Timer ياخذ 2 parameters الاول من نوع int وهو يمثل الفتره التوقف بين كل مره يقومفيها بعمل وطبعا هي ممثله باجزاء الثانيه (duration) اما الثاني فهو ريفرنس لأوبجكت من نوع انترفيس ActionListener وانا سويتها هنا عن طريق anonymous inner class بس ياليت تلاحظوا انه مافي شيء اسمه ActionAdapter فورثت بسره الانترفيس ActionListener , المهم في كل 50 جزء من الثانيه انا راح استدعي 3 ميثودز الاولى هي updateXY وهذي الميثود راح تقوم بتغير احداثيات كل النودز الموجوده حاليا على حسب اتجاه الحركه وراح تكون العمليه كالتالي:
اولحاجه انت لما تضغط يمين او يسار اواي اتجاه انت بس تغير احداثيات الـ head node اما باقي النودز فراح تتغير على حسب النود الي قبلها بمعنى اخر كلنود Child يارح ياخذ مكان النود الـ Parent تبعه
المهم الميثود الثانيه هي mcveSnake وهي مسؤوله عن تغيير احداثيات الـ head node على حسب الاتجاه اما اخر ميثود وهي repaint والغرض منها فقط اعادة الرسم فقط
(اسطر 29-37)

وفي الاخير راح اعطي ابعاد للفورم تبعي وبعدين رساله ترحيبيه للمستخدم
وبعد كذا اهم شيء الي هو تشغيل الـ Timer الي سميته t عن طريق اسخدام ميثود اسمها start
(اسطر 39-42)

الحين خلونا نشوف الميثود paint
اول حاجه في هذي الميثود انا غيرت اللون للرسم الي اللون الاخضر
عن طريق ميثود اسمها setColor (سطر 47) وبعد كذا عرفت اوبجكت من نوع SnakeNode وسميتها temp وساويتها بالاوبجكت head الي هي من نوع SnakeNode بس يا ليت لو تلاحظوا انه الاوبجكت snake هي من نوع SnakeManager ولو ترجعوا لاول درس هنا وتشوفو كيف الكود تبع SnakeManager راح تلاحظواانه يحتوي على اوبجكت من نوع SnakeNode واسمه head , المهم راح استخدم while loop عشان ارسم كل نودموجوده مع الـ head والعملية راح تكون كالتالي:
طلما انه الاوبجكت temp لا يساوي null ارسم وعبيء لون مربعات في الاحداثيات (temp.getX , temp.getY) واعطيها الابعاد 10و 10 (طول وعرض) وبعد كذا روح للنود الإبن (temp = temp.getChild)
(اسطر 49-52)

باقي اخر شيء الي هو شرح الميثود mvceSnake الي عملها اعطاء الـ head احداثيات جديده على حسب الاتجاه وهي كالتالي
اذا كان الكود تبع الزر الي تم ضغطه 37 (يسار) فقوم بتنقيص المتغير x للـhead مع مراعاة انه الاكس لا يساوي 0 يعني اخر شيء في يسار الفورم
(ملاحظه: التنقيص والزياده يكون بمقدار 10) اما اذا كان الكود 39 (يمين) فقوم بزيادة الاكس مع مراعاة انه الاكس لا يساوي 390 اخر شيء في يمين الفورم اما لو كان الكود 38 (فوق) فقوم بتنقيص y مع م راعاة انه y لا يساوي 0 اخر شيء فوق الفورم اما اذا كان الكود 40 (تحت) فقوم بزيادة y مع مراعاة انه y لا يساوي 590 اخر شيء تحت الفورم
(اسطر 59-79)

(ملاحظه: الكلاس SnakeRun موجود في اول درس في هذا الموضوع)

وهذا شرح كود SnakeRun وانشاء الله يكون وافي و كافي ونكون استفدنا من بعض
والي عنده اي معلومه او تعليق فلا يبخل علينا وانشاء الله نشوفكم في فرصه
اخرى, اعذروني على التقصير والتأخير

اخوكم Robatic
.
.
.
.
.
.
EOT

آل جهينة
19-04-2006, 12:10 AM
***


عزيزي روباتيك

زادك الله علماً

يزيد في قربك من ربك


دمت بخير




***

the code
01-01-2007, 07:15 PM
جزاك اللله خير أخوي على الموضوع الرائع

عندي استفسار : عندما اقوم بترجمة الكود يعطيني هذا الخطأ

http://www.graaam.com/up/Pic-1/c466b5b36f.JPG


ماهو الملف الذي احتاجه لتنزيله من موقع سن يكون فيه package javax.swing
أريد رابط مباشر لو تكرمت.

وهناك استفسار اخر ( ولا عليك امر):
ما هو المترجم الذي استخدمه لاضع فيه الكود ( الكود الذي وضعته في المرفقات في الاعلى ، الذي هو frame) ، بحيث بعد الترجمة يظهر الفريم؟
وجزاك الله خيرا

the code
01-01-2007, 07:21 PM
اذا ما ظهرت الصورة التي فيها تقرير الخطأ ، فهذا محتواها:
package javax.swing not found in import

ألنشمي
01-01-2007, 11:04 PM
000
00
0


سلمت يمينك

ومشكور اخوي

the code
03-01-2007, 05:08 PM
الحل أخوي هو ان تنزل ملف اسمه
jdk-1_5_0_10

dantelllah
13-02-2007, 07:05 AM
يعطيك العااااااااااااااافيه روبوتيك..أنا مبتدئه بالجافا و بجد استفدت :mo13:

talalcer
19-04-2007, 06:28 AM
بارك الله فيك