Berradja Mohamed Toufik
بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته

عزيزي الزائر / عزيزتي الزائرة
يرجي التكرم بتسجبل الدخول اذا كنت عضو معنا
او التسجيل ان لم تكن عضو وترغب في الانضمام الي اسرة المنتدي
سنتشرف بتسجيلك في منتدى براجع محمد توفيق

شكرا


ادارة المنتدى

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

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

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

مُساهمة من طرف Admin في 12/10/2010, 00:03


السلام عليكم كيف الحال اخواني انشاء الله بخير اليوم انشاء الله راح نسوي لعبة snake بسيطه جدا بس من غير food وهذه اللعبه راح نسويها بلغة جافا 6 او J2SE 2....... بيني وبينكم النسخه مهي مهمه في حالتنا ذي لانه انا ما استخدمت كلاسات جديده زي مثلا كلاس Scanner اول حاجه لازم نعرف اش هي الفكره الي راح استخدمها هنا وهي عباره عن رسم مربعات لها نفس الابعاد ولكن الي يميزها انها في احداثيات مختلفه بس بشرط تكون وراء بعض يعني متسلسله بحيث انه المربع الاول لما يتغير مكانه لازم يجي بداله المربع الثاني والثاني اذا تغير مكانه لازم ياخذ مكانه القديم المربع الثالث وهلم جرا (طابور من المربعات) قبل لا نبدا في عملية الرسم خلوني اقلكك او اذكركم بانه لغة الجافا هي عباره عن لغة كلاسات او Class-Based Language يعني ما تقدر تسوي اي برنامج الا لازم يكون عباره عن كلاس بمعني اخر يعني مو زي لغة سي ++ الي عن طريقها تقدر تسوي برنامج بدون كلاس الجافا لازم يكون عندك كلاس يحتوي على ال main method وهذا الكلاس يسمى في الجافا Main Class الي عن طريقه راح نسوي run للـ application تبعنا ..... المهم خلونا نتعرف على الثلاثة كلاسات الي راح اسويها عشان نصمم اللعبه البسيطه وهي: 1) SnakeNode وهذا الكلاس هو اللبنه الاساسيه للعبتنا بحيث انه يحتوي على 3 متغيرات وهي متغيرين من نوع int وهما x و y الي راح استخدمهم عشان اعطي احداثيات لكل مربع او لكل instance انشئها من الكلاس SnakeNode اما المتغير الثالث هو عباره عن متغير من نوع SnakeNode من نفس نوع هذا الكلاس وراح اسميه child وراح استخدمه عشان اشير الى الـ instance الي لازم تجي بعد هذي الـ instance الي انا حاليا شغال فيها ملاحظه: لما انا اسوي او انشئ instance اول مره راح اخليها تأشر على ولا حاجه يعني تأشر على null ملاحظه: انا لما اقول تأشر ما اقصد بكلامي هذا انه نفس العملية الي تصير في لغة سي ++ الي يسمونها الـ pointers ....... الصوره الي تحت توضح العملية [/URL]http://www.geocities.com/psychic_mental/snakeTutorial/structure.jpg (http://www.geocities.com/psychic_mental/snakeTutorial/structure.jpg) 2) SnakeManager وهذا الكلاس هو الي مسؤول على تنظيم عملية خليني اقول سير المربعات او الـ instances المنشئه من الكلاس SnakeNode وهي عبارة عن اضافة مربع جديد وتنسيق اماكنهم بالطريقه المذكوره فوق وهذا الكلا يحتوي على متغير واحد من نوع SnakeNode اسمه head راح استخدمه كدليل او index في عملية الرسم يعني هو الي راح اغير مكانه اما باقي المربعات راح تتغير اماكنها حسب ما ذكر اعلاه اوتوماتيكيا. وكمان راح اعرف في هذا الكلاس ثلاثه methods وهي اولا getLastChild وهذي هي الي راح ترجعلي اخر مربع موجود في الطابور, ثانيا addChild ومن اسمها هذي راح استخدمها لإضافة مربع جديد, ثالثا updateXY وهذي هي الي راح تساعدني على تنظيم حركة سير المربع بحيث انه كل واحد لازم يجي في مكان المربع الي قبله اما المربع الي انا سميته head هو الي راح ياخذ مكان جديد ولكن بقية المربعات راح تاخذ مكان الي قبلها (يعني من جد طابور ولكن بحسب الاتجاه) الصوره الي تحت تبين العملية كلها http://www.geocities.com/psychic_mental/snakeTutorial/linked.jpg (http://www.geocities.com/psychic_mental/snakeTutorial/linked.jpg) 3) SnakeRun وهذا الكلاس هو الكل في الكل يعني main Class هو الي عن طريقه راح اشغل برنامجي وفيه راح يصير الانتراكشن ما بين المستخدم والكمبيوتر وفيه راح يتم الرسم ااو حاجه لازم اسوي فروم زي اي فورم في لغة فيجوال بيسك ولكن هنا انا ما اقدر اسويه بالماوس يعني لازم اكتب الكود كامل من وإلى بس بصراحة الكود مره بسيط وكل الي ابغاه منكم شوية تركيز وانشاء الله نستفيد من بعض بس قبل كل شيء خولني اشرح الكد حق الكلاسين الي فوق وهما بالترتيب SnakeNode and then SnakeManager اول حاجه خلونا نشوف الكود حق SnakeNode http://www.geocities.com/psychic_mental/snakeTutorial/snakeNode.jpg (http://www.geocities.com/psychic_mental/snakeTutorial/snakeNode.jpg) زي ما انتوا شايفين الكلاس هذا مره بسيط وما يلزمه شرح عباره عن تعريف متغيرات واعطاء قيم لها واخذ قيمها حب ما نحتاج ب الي ابغى انبه عليه هو الموجود في سطر رقم 5 انا معرف constructor ياخذ قيمتين الي هي عباره عن مكان المربع الي راح انشئه بس لو تلاحظوا هنا انا بشكر افتراضي خليت الـ child هنا يساوي null لانه انا راح اعطيه قيمه بعدين عن طريق الكلاس SnakeManager الي راح يديرلي الموضوع كله ...... خلونا نشوف الكود حق كلاس SnakeManager http://www.geocities.com/psychic_mental/snakeTutorial/snakeManager.jpg (http://www.geocities.com/psychic_mental/snakeTutorial/snakeManager.jpg) وهنا زي مانتوا شايفين انا معرف head من نوع SnakeNode في السطر الثاني وهذا راح اعتبره مربع خاص راح يفيدني ويريحني في عملية اعطاء اماكن لكل المربعات يعني تخيلوا لو ان مجموع المربعات 5000 مربع ولكل مربع لازم اعطي قيمه للـ x & y يعني لازم لعطي قيمه لـ 10000 وهذه عملية مزعجه لانه لا ننسى انه الكمبيوتر صنع عشان يسهل علينا العمليات الحسايبه لو تلاحظوا في الـ constructor لهذا الكلاس الي موجود في السطر الرابع انا اعطيت قيمه ابتدائيه للـ x& y للـ head وهي 50 عشان المربع يظهر في النقطه (50,50) من الفروم الي راح انشئه في الكلا الاخير الي هو SnakeRun .... في السطر رقم 8 انا سويت method اسمها getLastChild وهذه الميثود راح ترجعلي refrence لآخر مربع موجود عندي ممكن يكون المربع رقم 1000 او المربع رقم 1 المهم هذا راح يفيدنا في اضافة مربع جديد ب هنا الرفرنس مش زي الـ pointer الي في لغة سي++ لا تلخبطوا .... في سطر 17 انا مسوي ميثود الي راح تضيفلي مربع فعليا وراح ارلها x & y لهذا المربع الجديد ولو تلاحظوا في سطر رقم 18 انا استخدمت الميثود getLastChild الي راح ترجعلي اخر مربع وراح يكون نوعه من كلاس SnakeNode وعن طريقه راح نخلي الـ child له يأشر على المربع الجديد بدل ما يأشر على null وهذا المربع الجديد الـ child له راح ياشر بشكل افتراضي على null زي ما شفنا في كود SnakeNode في سطر رقم 8 من الـ constructor ....... في سطر 21 في ميثود اسمها updateXY وهي الي راح تساعدني في تغير الـ x & y لكل المربعات وانا هنا راح ارسلها الموقع الي هو عباره عن نقطه رفرنس للمربع الحالي الي انا ابغى اغير مكانه بنائا على المربع الي قبله يعن اول مربع راح ارسله لها الي هو الـ head والاحداثيات الي تبعه بس المشكله الكمبيوتر ما يفهم لا ننسى انه لسا ما زال مجرد آله كيف هو راح يعرف انه هذا المربع هو الـ head ولا لا ؟! هنا تخدمنا الـ IF Statement وطريقة عمل الميثود هذه عباره عن تخزين مكان المربع الحالي عشان نعطيه للمربع الي بعده وبعدين نشوف هل هذا المربع هو الـ head ؟ اذا كان نعم غير الرفرنس وخليها يأشر على الـ child تبع الـ head وكمان لازم نفحص يمكن يكون احنا وصلنا للـ child تبع اخر مربع الي هو عباره عن null وهذه مشكله بحد ذاتها وعشان كذا لازم استخدم if ثانيه واشوف اذا انا فعلا وصلت لآخر شيءاوقف, اذا لا اول شيء اخزن مكان المربع الحالي زي ما هو موجود في السطرين 30 و 31 وبعدين اغير مكان المربع الحالي بمكان المربع الي كان قبله والي انا ارسلت مكانه للميثود كـ parameter (سطر 33 و 34) وبعدين استدعي نفس الميثود updateXY ولكن بدل ما ارسلها الـ head وموقعه ارسلها الـ child حق المربع الحالي والموقع القديم حق المربع الحالي.... الصور الي تحت تبين عملية اضافة مربع جديد في حالةه اذا كان الـ head هو المربع الوحيد او اذا كان هناك اكثر من مربع غير الـ head لو تلاحظوا انا هنا بدل ما استخدم for loop في الميثود updateXY استخدمت الـ recursion technique مع انه الـ recursion يستهلك الذاكره اكثر من الـ for loop ولكن بعض الاحيان يكون افضل من الـ for loop وفي حالتنا هذه انا ماني عارف كم مربع موجود حاليا في الطابور (queue) ولكن كل الي اعرفه انه الـ child لآخر مربع يأشر على null فلما اوصله اوقف العمليه وبإمكانك تحل المشكله هذي بإستخدام while loop بس يبغالك تتنبه لأول مربع الي الـ head ... http://www.geocities.com/psychic_mental/snakeTutorial/add.jpg (http://www.geocities.com/psychic_mental/snakeTutorial/add.jpg)http://www.geocities.com/psychic_mental/snakeTutorial/add2.jpg (http://www.geocities.com/psychic_mental/snakeTutorial/add2.jpg) واخر شيء الي هو الـ SnakeRun كود وهو تقريبا اصعب كود في هذا الدرس وهذا الكلاس هو المسؤول عن تحويل الكلام الي قلناه فوق الي مربعات وكمان هو الي راح اسوي فيه الانتراكشن ما بين المستخدم والكمبيوتر وعشان اشرحه لازم ندخل مواضيع كثيره في الجافا الي هي event handling و creating forms و using Timer class وميثودز كثيره جدا وانشاء الله راح اشرحها بالتفصيل الممل بإذن واحد احد وانشاء الله نستفيد من بعض ولا تبخلوا علينا يا شباب وبنات... و الكود حق SnakeRun موجود في الصوره تحت http://www.geocities.com/psychic_mental/snakeTutorial/srun.jpg (http://www.geocities.com/psychic_mental/snakeTutorial/srun.jpg) بس الفت انتباهكم الى انه الاسطر من 1 الى 3 مش ظاهره في الصوره الي فوق وهذه الاسطر مهمه عشان كذا راح اكتبلكم ايها تحت بالترتيب: import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
وهذي الصوره الي تحت هي الناتج الاخير لهذه الثلاث كلاسات http://www.geocities.com/psychic_mental/snakeTutorial/run.jpg (http://www.geocities.com/psychic_mental/snakeTutorial/run.jpg) هذا الخط الاخضر الي فوق هو عباره عن مربعات كثيره بس لو تلاحظوا من الشكل الي فوق كل مربع ياخذ مكان المربع الي قبله وإلى الان اللعبه ماهي كامله لانه ناقصها شيء وحد ناقصها كلاس نسويه ونسميه Food وهو راح يكون مسؤول عن النقاط او الطعم الي لازم نصيده وراح يكون سهل جدا وانشاء الله في الدرس الجاي راح نكمل البرنامج ملاحظه: لازم نخزن كل الكلاسات في نفس الفلودر او الـ path يعني مثلا ما يصير نخزن كود كلاس SnakeNode في الـ D وكود كلاس SnakeRun في الـ C لازم يكونوا في نفس المكان. اخوكم Robatic .....

تحياتي:
fox_brain http://www.geocities.com/psychic_mental/snakeTutorial/tutorial2.html:[URL="http://www.dorarr.ws/forum/images/smilies/s1.gif"]http://www.dorarr.ws/forum/images/smilies/s1.gif

Admin
Admin
Admin

عدد المساهمات : 844
تاريخ التسجيل : 01/09/2010
العمر : 23

http://berradja-m-toufik.online-talk.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى