بسم الله الرحمن الرحيم
السلام عليكم
مقدمة:
لقد توقفت عن كتابة المواضيع أو حتى الردود منذ مدة طويلة في هذا المنتدى نتيجة الظروف التي مرت بي ابتداءً من فترة التخرج من الجامعة إلى مرحلة العمل .. كان لدي افكار كثيرة اريد عملها في مجال الألعاب و كنت اقول لنفسي "لا يجب أن أتوقف عن ممارسة هذا النوع من البرمجة" .. و اكتشفت أنه لا يمكنني الدخول في مشروع كبير متكامل إلا اذا مررت بمراحل سابقة و اقصد تحديداً عمل لعبة بسيطة ثنائية الألعاب و بشكل كامل .
بدأت سابقاً بعمل محرك بسيط ثلاثي الأبعاد ( قمت بعرضه سابقاً هنا ) و لكن كما قلت لكم فلقد وجدت نفسي محتاجاً للدخول في مشروع كامل بسيط .. و كانت فكرة الاعمال ثلاثية الابعاد تحتاج الى وقت و جهد مضاعف .. بدأت أفكر بانواع الالعاب التي من الممكن ان ابدأ بها لكي تكون مرحلة تدريبية لي و عن طريقها استطيع انهاء مشروع كامل .
كان هناك خيارات كثيرة و لكني فضلت بالنهاية ان احاكي احد الالعاب و قد وقع اختياري على لعبة YuGiOh الخاصة بجهاز PC .. ربما ستقولون لي ان هذا المشروع صعب و ربما من المستحيل اكماله .. من الممكن أن يكون ذلك صحيحاً .. و لكني احببت ان اختبر نفسي في مدى امكانيتي لمحاكاة هذه اللعبة و لذلك باشرت في هذا العمل و توصلت إلى هذه الأمثلة التي أضعها الان بينكم .
اللغات المستخدمة:
Programming Language: C#.Net 2.0
Framework: XNA Refresh 1.0
شرح الأمثلة:
أولاً قمت بتسميت الأفكار التي قمت بمحاكاتها من اللعبة بالأمثلة و في النهاية الغرض منها هو العرض فقط .. ستلاحظون فكرة اساسية موجودة بالأمثلة و هي أن جميعها متكاملة و متراكبة بحيث يكون كل مثال يحتوي على نفس مزايا المثال الذي يسبقه مع إضافة فكرة محددة جديدة في كل واحد منها .. لقد قمت بصنع 9 امثلة قمت بإلغاء 2 منها لان النتيجة لم تعجبني فيهم و بالتالي اصبح العدد 7 .
المثال الأول
للتحميل - 1.98MB
هذا المثال يقوم برسم كرت واحد على الشاشة مع الامكانيات التالية:
1. تحريك الكرت إلى اي مكان تريد عن طريق Mouse-Left Click .
2. حمل الكرت بواسطة Mouse-Right Click .
3. سيضيء الكرت قليلاً عند الوقوف فوقه مع رسم اطار ازرق حوله .
4. تستطيع اعادة الكرت إلى المكان الافتراضي بالضغط على الزر D .
5. عند الضغط على Mouse-Right Click خارج الكرت فسينتقل تلقائياً إلى الزاوية اليمينية في الأعلى .
المثال الثاني
للتحميل - 1.98MB
اصبح المثال هنا يحتوي على 3 كروت و تستطيع به اختيار كرت محدد بواسطة Mouse-Left Click و من ثم تحريكه ( و أيضاً حمله ) إلى المكان الذي تريد .
المثال الثالث
للتحميل - 1.99MB
هنا قمت بصنع نظام سحب اوراق بحيث استطيع تحديد حدود الاوراق التي يجب ان يتم السحب اليها .. فإذا سحبنا مثلاً مجموعة من الأوراق و زاد عرض هذه الكروت عن العرض المحدد فستتحرك الأوراق تلقائياً لترتب نفسها بحيث تصبح الكروت مصفوفة بشكل مرتب و دقيق على الحدود التي قمتها بوضعها .
المثال الرابع
للتحميل - 1.99MB
هذا المثال مشابه تماماً للمثال السابق و لكن مع اضافة حركة بسيطة إلى الأعلى للكرت الذي تقف فوقه .
المثال الخامس
للتحميل - 2.43MB
هنا قمت بعمل بعض الحركة من خلال Sprites عن طريق جعل الكروت تنقلب أثناء سحبها و ذلك لكي احاكي اللعبة كما هي .
المثال السادس
للتحميل - 19.96MB
في هذا المثال قمت بصنع نظام لخلط الأوراق .. تستطيع الأن سحب أوراق متعددة مع امكانية خلط الأوراق .. حاول مثلاً سحب 10 اوراق و من ثم اضغط على الرقم 0 لاعادة الأوراق و خلطها و لاحظ ان ترتيب الاوراق اصبح مختلفاً .
المثال السابع
للتحميل - 3.27MB
هذا المثال مختلف قليلاً .. هنا قمت بمحاكاة Phases الموجودة في اللعبة بحيث كل دور لكل لاعب عبارة عن 6 اجزاء .. قمت أيضاً بإضافة حركة للانتقال إلى اللاعب الثاني عند انتهاء دور اللاعب الأول و العكس صحيح .. أزرار الماوس الأن أصبحت كالتالي:
1. Left-Click : للانتقال إلى Phase التالي للاعب الحالي.
2. Right-Click : للانتقال إلى دور اللاعب الآخر بشكل مباشر.
متطلبات التشغيل:
1.
Dot Net Framework 2.0
2.
XNA Redistributable 1.0 Refresh
3.
كرت شاشة يدعم Shaders 1.1
خاتمة:
كانت هذه الامثلة مفيدة جداً لي فلقد وجدت ان لكل مثال قمت بصنعه مجموعة من الافكار التي قد لا ينتبه لها عادة المبرمج في بادئ الامر و التي يتوجب معالجتها .. ترقبوا الجديد من الامثلة من خلال هذا الموضوع .. اتمنى ان تقيموا لي هذه الامثلة فهي للاختبار و بالتالي ربما تكون هناك بعض الاخطاء في احد منها .. اتمنى ان تخبروني بها ان وجدت أو حتى إذا لم يعمل احد منها .