برامج

البدء في دورة صناعة الالعاب بلغة الc# [الأرشيف] - برامج نت

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

مشاهدة النسخة كاملة : البدء في دورة صناعة الالعاب بلغة الc#


GENERAL OF WORLD
12-22-2007, 02:29 PM
سبق و وضعت موضوع للبدأ في صناعة الالعاب و وضعت تصويت لمن يريد البدأ و جاء التصويت فوق ثلاثة و هذا ما كنت اريده فسنبدأ من اليوم
بسم الله الرحمن الرحيم
ابدأ فى Xna

التعرف علي مكتبة الXna و بعض الدوال الرئيسية

متطلبات البدأ بالعمل :
Visual studio professional edition او Express edition او ممكن Visual C#
و يستحسن Visual c# لأن حجموا صغير و لن تحتاج باقي اللغات
و يشترط النسخة 2005 لكي تعمل المكتبة
__________________________________________________ ______
اذا لم يكن لديك أي نسخة من هذه النسخ يمكنك التحميل من هنا :
http://msdn2.microsoft.com/en-us/express/aa975050.aspx
و حمل Visual C# 2005 Express

و الupdate في نفس الصفحة :
اضغط علي Download Visual C# 2005 Express SP1 »
لتحميلوا
و حمل الXna version 2.0
http://www.microsoft.com/downloads/details.aspx?FamilyId=DF80D533-BA87-40B4-ABE2-1EF12EA506B7&displaylang=en
اختار اللغة عند البرنامج المراد تحميله و سوف يبدأ التحميل اوتوماتيك
ملاحظة مهمة جدا : عند تحميلك الفيجوال استوديو و الXna عليك تنصيب الفيجوال استوديو قبل الxna و لو كنت فعلت العكس فأمسح الXna و الفيجوال استوديو و اعد تنصيبهم من اول و جديد بالطريقة الصحيحة
ملاحظة اخرى : لن اتناول فى هذا الموضوع تعليم لغة الC# فهناك عدد من الكتب العربية لذلك منها كتاب (الكامل فى السى شارب) و يمكن ان تجده فى هذا الموقع : http://www.mediafire.com/?6nn3hmxfo3j
طريقة البرمجة ستكون الoop يرجي ان يكون القاريء له معرفة جيدة بهذه اللغة:)

اولا نشوف ما هو الXna :
تم وقف دعم الدايركت اكس من قبل مايكروسوفت رسميا ده بالنسبة للغة C# فقد :(!!
و طلع شىء اخر يسمي الXna و هو بمثابة الدايركت اكس و هو يحتوى مكتبات لكل شىء مكتبة للصوت و للجرافيكس الخ…. يعني لن تحتاج لشيء من الخارج
طب ما هو الRun Time للxna يعني الدايركت اكس Sdk عندوا Run Time يعني عشان تشغل لعبة تم عملها بالدايركت اكس لازم يكون عندك دايركت اكس Run time و الXna يحتاج للدايركت اكس Run time !! يحتاج DirectX 9.0c

الان نبدأ بأذن الله


بعد تنصيب الxna و كل شىء نلقي نظرة علي الفيجوال استوديو
نقوم بالفتح سيأخد وقت طويل فى الفتح اول مرة
نضغط على File و New و Project
ستري هذه الصورة طبعا بعد المكونات متغيرة لأن البيئة الي عندي professional
http://img518.imageshack.us/img518/5994/clipimage002wq6.jpg
و لكن سنري خيار Xna game studio مؤكد موجود نضغط عليه و نختار Windows Game
نختار اسم للمشروع و ليكن FirstXna لا يحب ان يكون هناك فراغات 
و نضغط ok نجد Class يسمي Game1.cs (لأظهار الكلاسات اضغط علي View بعدها Solution Exploler)
http://img172.imageshack.us/img172/374/clipimage0302ki8.jpg
حاول الضغط على F5 لتري الDebug ماذا تتصور ان تري ؟؟
ستري شاشة كشاشة الالعاب لها لون جميل :) و يتم اخفاء الماوس توماتيكي :smailes27:
طبعا أي برنامج لازم يكون له Main method يعني دالة بيبدأ منها و بيأخذ منها اول حركة و لكن تفقد هذا الكود لن تجد Main method احنا عارفين ان دايما الMain Method بتكون متعرفة هكذا

static void Main(string[] args)
و لكنها غير موجودة فى هذا الكود و لكنها موجودة فى كلاس اخر :
تعالي عند الsolution exploler و اضغط مرتين على الكلاس Program.cs ليتم فتح الكود و ستري الكود الاتي :
using System;

namespace FirstXna
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main(string[] args)
{
using (Game1 game = new Game1())
{
game.Run();
}
}
}
}

في هذا الكود يتم تعريف الدالة Game1 و يتم تشغيل الدالة Run
نذهب الى الكلاس Game1 و لكن ليس هناك دالة تسمي Run :(
و لكن لو دققنا نري ان هذا الكلاس هو ابن ل Microsoft.Xna.Framework.Game
يعني مكتوب : public class Game1 : Microsoft.Xna.Framework.Game
و هذه تسمي عملية التوريث لو كنت تعرف الoop كويس و هو ان الكلاس الابن و هو Game1 يأخد جميع الدالات الموجودة داخلة المكتبة Microsoft.Xna.Framework.Gameو يأخد ايضا المتغيرات
الان انا عايز اشتغل على نظافة عشان نكون فاهمين حاجة من الكود الى مكتوب ده
نذهب الى class1 و نمسح اسمو و نضع بدالوا الاسم Engine
هل ما فعلناه صحيح ؟؟
اضغط الان علي F6 و ستجد بعض الاخطاء ظهرت و لكن لماذا ؟
نحن رأينا ان اسم الclass هذا (Game1) مستعمل فى اكثر من منطقة فعند تغييروا لازم نغيروا فى كل منطقة معرف فيها طب هل سنبحث فى كل منطقة و نفضل نعدل :( طبعا لا :) توفر لك بيئة فيجوال استوديو هذه الخاصية تعمل توماتيكي اضغط على Ctrl+z لكي يرجع الاسم الاول : Game1
و بعدها نذهب الى الكلاس Game1.cs و نأتي عند تعريف الكلاس و نضغط كليك يمين ثم refractor ثم Rename
http://img518.imageshack.us/img518/7757/clipimage002tq4.jpg
و سيظهر لك نافذة اكتب فيها الاسم Engine و اضغط ok
و ستظهر هذه النافذة
http://img530.imageshack.us/img530/9276/clipimage001dh5.gif
و نضغط على Apply
و لكن ما الذي فعلناه ؟؟
هذه الخاصية تجعل فيجوال استوديو يبحث فى كل مكان فى فيجوال استوديو عن الاسم Game1 لو كان موجود فيتم تغييره اوتوماتيكيا الى الاسم الجديد
نحاول ان نضغط f6 و الان سنري انه لا اخطاء ^_^
الان كل مكان فيه اسم الكلاس اتغير ما عدا في الsolution exploler
فالاسم class1.cs ما زال موجودا يا ريت تيجي عندوا و تدوس كليك يمين و rename او تضغط f2 و اكب اسمو Engine
هذا لن يحدث فرق فى الكود و لكن عشان تبقي عارف اسم الكلاس منغير ما تضطر انك تدخل فيه
الان نمسح الكود كلو عشان نعيد كتابتوا بفهم و لكن نترك تعريف الكلاس
اولا نعرف المكتبات التي سنعمل عليها :
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
و بعدها نكتب الname space :
namespace FirstXna و فى وسطة الكلاس يعني الكود كلو هيكون شكلوا :

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace FirstXna
{
public class Engine : Microsoft.Xna.Framework.Game
{
}
}

ملاحظة اهم من الاهتمام : يجب ان يكون الاسم بعد الnamespace هو اسم المشروع الحالي و الا سينتج عن هذا مشاكل فيما بعد
و الان نعرف اهم كائن من الى هنستعملهم و هو GraphicsDeviceManager
و الكائن ده هوا الي يظبط لنا اعدادات الشاشة الزرقاء الجميلة الى تظهر يعني هوا الى يقدر يحدد لونها و حجمها و اذا كان مثلا خيار الminimize مفتوح او لأ و هكذا
فنقوم بالتعريف :
GraphicsDeviceManager graphics;
و نقوم بكتابة اول دالة و تعتبر الدالة الرئيسية فى هذا الكلاس
و سيتم فيها تعريف اهم الدوال
و اسم الدالة public و بعدها اسم الكلاس
يعني : public Engine
و هذه الدالة لا تحتاج لأرجاع قيمة مع انها ليست من النوع void
فنقوم بكتابة الكود :
public Engine()
{
graphics = new GraphicsDeviceManager(this);
}
و كلمة This تعود الى اسم الكلاس الذي نحن فيه
اذا نظرنا الي الparamater الذي يحتاجة هذا الكائن فسترى انه يحتاج كائن من نوع game و ليس من نوع كلاس
فهل ما فعلناه صحيح ؟؟
جرب اضغط على f6 لا اخطاء يعني ما فعلناه صحيح
كيف ذلك ؟ :):):)
اوه … هل نسيت ان هذا الكلاس هوا ابن ل Microsoft.Xna.Framework.Game
حسنا لا تنسي ثانية ^_^
نحن ليس لدينا كائنات اخري فلقد انتهينا من هذه الدالة
نذهب لكتابة دالة اخري فنكتب protected override
فسنجد ان هناك بعد الخيارات ظهرت كل هذه الخيارات ظهرت لأن هذا الكلاس ابن لـ Microsoft.Xna.Framework.Game
فيحمل جميع خصائصة كدالات و متغيرات
نختار الخيار Initialize
فسنجد ان هذا الكود قد كتبا اتوماتيكيا
protected override void Initialize()
{
base.Initialize();
}
طب ما هذه الدالة ؟
سيتم في هذه الدالة اعطاء قيمة لكل متغير نقوم بتعريفه يعني لو عرفنا فى اول الclass متغير من نوع float مثلا فكتبنا:
Float general ;
فنكتب فى هذه الدالة general = 500f;
و هكذا
نأتي لدالة اخرى فنكتب protected override
فستظهر الدالة Draw
فنختارها فيتم كتابة هذا الكود اوتوماتيكيا

protected override void Draw(GameTime gameTime)
{
base.Draw(gameTime);
}سنرى الباراماتر Gametime
و هذا الباراميتر يقوم بتجديد اللعبة كل جزء من الثانية تقريبا يعني مثلا عندك مربع يمشي لليمين فيتغير الposition تبعوا مثلا يزيد قيمة 1 للX تقوم الدالة Draw بالتأكد كل ثانية من مكان هذا الصندوق لرسموا فى هذا المكان و كذلك لو حصل تغيير لحجموا او اى شىء
يمكنا تغيير لون الشاشة من الكائن ماذا ؟؟ اعتقد انك تعرف حسنا هل عرفت ؟








توقعك كان صحيحا الكائن Graphics الذي عرفناه فى اول الclass
فسنكتب
graphics.GraphicsDevice.Clear(Color.Black);
و ممكن نجحل الشاشة Full screen
هكذا :
graphics.IsFullScreen = true;
و لو لم تكتبها ستصبح false اوتوماتيك
بس طبعا انت هتغير اللون الاسود بس انا بحبوا :):)
خلص الدرس بتاع انهردة و يا رب اكون وفيت فى الشرح انا اعتقد اني شرحي ربما يكون سىء شوية 
الكود مرفق مع الدرس :)
للتواصل: Gindisgindis@hotmail.com
من يريد الدرس علي هيئة pdf مع السورس كود من هنا :
http://www.mediafire.com/?5xonojgetdk

Aboud Aboud
12-23-2007, 10:38 AM
شكرا لك اخي

imadin
12-23-2007, 05:45 PM
بارك الله فيك على الدروس
لكن ماهو المستوى المحدد لمتابعة هذه الدورة
فأنا جد مبتدأ في البرمجة

GENERAL OF WORLD
12-24-2007, 04:19 PM
بارك الله فيك على الدروس
لكن ماهو المستوى المحدد لمتابعة هذه الدورة
فأنا جد مبتدأ في البرمجة

اذا كان لديك فكرة بلغة سى شارب و لو حتي بسيطة يمكنك البدء معنا

GENERAL OF WORLD
12-24-2007, 04:44 PM
سأكتب ثاني محاضرة
هذه المحاضرة خاصة للذين وضعوا رد و عامة لأعضاء المنتدى كلهم :smailes100:
بسم الله الرحمن الرحيم
المحاضرة الثانية
سنقوم فى هذا المثال بتحميل Texture الى مثالنا
ملاحظة : لن يتم استعمال الoop فى هذه المحاضرة و لكن سنستعمله في المحاضرة التالية :)
نبدأ بأذن الله :
اول شىء يجب ان تعرف ان لكل شىء فى الXna كائن خاص
فهناك كائن للرسم و كائن لتحمل الtexture و هكذا و سيتم التعرف عليهم الان
اول شىء سنتكلم عنه هو الكائنات التي سنعرفها
اول شىء الكائن الحامل للTexture الذي سيقوم بتحميل الTexture الي مثالنا :)
و اسمو باين يسمي Texture فسنقوم بتعريف عند الكلاس (خارج جميع الدوال)
فنقوم بالتعريف:
private Texture2D Texture;
ثاني شىء هو الكائن الذي سيقوم برسم هذا الtexture
و هو SpriteBatch
فسنقوم بتعريفه فى نفس مكان الtexture :
private SpriteBatch spritebatch;
و نعرف كائن لمكان الtexture و طبعا بما اننا نتعامل مع شىء 2d فسيكون نوع الكائن vector2 و مقصود هنا 2D
نقوم بتعريف هذا الكائن :
private Vector2 position;
واحد يقولي طب و ليه اتعب نفسي و افضل اكتب private :( مع انو غير لازم
اديك فكرة بسيطة
كلما كان الكائن تعريفه اكثر سرية كلما كان اسرع فى عمل الاشياء
يعني الكائن public ابطأ من الكائن private و لكنه بطء خفيف لا يمكن ان تشاهدة لأن هنا انت بتتعامل مع حاجات بالكيلو بايت و كمان صور لكن لو جيت تستورد مجسم 3D مشهد كامل فالسرعة هتفرق
انتهي هذا الجزء و سنبدأ بجزء تحميل الصور من الخارج
اول شىء افتح الsolution exploler و اضغط على اسم المشروع : FirstXna بكليك يمين ثم add ثم New Folder
http://img152.imageshack.us/img152/2959/clipimage001xn0.gifو نقوم بأعطائه اسم Recources
نضغط كليك يمين علي هذا الFolder ثم نضغط على Add ثم New Folder و نعطيه اسم Textures

نضغط كليك يمين علي الفولدر الجديد ثم Add ثم existing Item
http://img411.imageshack.us/img411/4639/clipimage001ch1.gif
ستظهر لك هذه النافذة و اختار نوع الفايلات فايل لصورة و اختار الصورة المرفقة مع الدرس
http://img411.imageshack.us/img411/7375/clipimage001ap9.gif
الان نحن لم نفعل شىء سوى عمل فولدر جديد فيه هذه الصورة و لكننا لم نحمل هذه الصورة الى برنامجنا بعد
هناك خطوة مهمة جدا حتي ينجح الكود الاتي
افتح الsolution exploler و عند box.png اضغط كليك يمين ثم properties
http://img124.imageshack.us/img124/782/clipimage001kx7.gif
ستظهر نافذة تحت نافذة الsolution exploler و هى نافذة الخصائص فهي تحمل خصائص الكائن المختار
حول الخاصية copy to output من Do not copy الى copy always
سيجعل هذا الخيار الفولدر recources يتم نقلوا بجانب مشروعنا
سنكتب الان دالة سنقوم فيها بتحميل اى شىء يحتاج الى تحميل مثل الtextures

نأتي بعد دالة Initialize و نكتب protected بعدها override سنجد بعض الخيارات ظهرت نختار الخيار
LoadGraphicsContent سنجد كود اتكتب اوتوماتيك كالاتي :
protected override void LoadGraphicsContent(bool loadAllContent)
{
base.LoadGraphicsContent(loadAllContent);
}
نمسح الكود الذي بداخلة و نكتب :
if (loadAllContent)
{
Texture = Texture2D.FromFile(graphics.GraphicsDevice, "Recources\\Texture\\box.png");
}ماذا فعلنا هنا ؟؟
نحن الان وضعنا جمل شرطية اذا كان قيمة هذا البارامتر true فقم بتحميل هذا الtexture
طبعا سيتم التحميل من ملف خارجي لهذا كتبنا FromFile و حددنا الgraphics device فى اول بارامتر و ثاني بارامتر وضعنا فيه مكان الفايل طبعا احنا كنا واضعين فولدر يسمي Recources و بداخله فولدر يسمي Texture و جعلناه يعمل كوبي لنفسوا لمكان التشغيل
لو نظرنا لرأينا ان هذه الدالة بها باراماتر من نوع bool يعني true او false
نحن الان وضعنا جمل شرطية اذا كان قيمة هذا البارامتر true فقم بتحميل هذا الtexture
حسنا هل هذا الكود قيمته true ؟؟ انت لم تسند اليه قيمة 
حسنا اذهب الى الدالة initialize و اكتب فى اول مكان فى الدالة :

this.LoadGraphicsContent(true);

الان تم الانتهاء من مرحلة تحميل الملفات الان نذهب الى مرحلة اعطاء كل متغير قيمته مثل position و spritebatch

سنذهب لدالة Inizalize
الان ما بين السطرين
LoadGraphicsContent(true);
و
base.Initialize();
و نأتي لنعرف قيمة كل كائن
اول شىء هو الspritebatch
فنقوم بتعريفه
spritebatch = new SpriteBatch(graphics.GraphicsDevice);
طبعا الكائن Graphics معرف فى اول دالة
السؤال الان لماذا يحتاج الspritebatch الى باراماتر من هذا النوع الان اذا قلنا له ارسم لى احد الtextures فيجب عليك تحديد فى أي graphics device سيتم الرسم و كأنك تقول فى اى مشهد سيتم الرسم
ثاني شىء المتغير position فسيتم اعطائه قيمة من نوع 2d لأننا نرسم اشياء 2d و هو اساسا من نوع vector2
فسنقوم بكتابة position = new Vector2(100, 100);
تم الانتهاء من هذا الجزء و سيكون شكل الدالة النهائي :
نأتي الى جزء الرسم و هو اهم جزء لأننا لو ضغطنا على F5 الان فلن نجد نتيجة لكل هذه الجهود
نذهب الى الدالة Draw
الان الspritebatch من المفترض قبل ان نستعمل دالة الرسم التي فيه علينا ان نجعله يبدأ بأستعمال Begin
يعني بعد الكود الى كتبناه : graphics.GraphicsDevice.Clear(Color.Black);
نقوم بكتابة
spritebatch.Begin();
و هذه الدالة يجب ان تقفل يعني مينفعش نجعلها تعمل begin مرتين على من دون ما نقفلها
ثم نستخدم دالة الرسم : Draw فنكتب
spritebatch.Draw(Texture, position, Color.White);اول بارامتر يتم تحديد التكستشر المراد رسمه و ثاني بارامتر هو مكان التكستشر و ثالث بارامتر هو اللون و هنا
WHITE لا يعني ابيض بل يعني انه لن يتم اضافة لون على الصورة فحاول ان تضع مكان هذا اللون مثلا Red فستري ان لون الصورة صار اقرب الى الاحمر

يمكننا تحديد parameters اكثر و لكن هذا لو كنا سنستعمل الدوران او هنقطع جزء من الصورة او هكذا و لكن فى هذا المثال لن تحتاج كل هذا
الان اضغط على F5 لتري نتيجة عملك :smailes100:



حصل Error ^_^
برأيك لما هذا الerror لو عرفت الاجابة فأعرف انك متميز
ستقول لي لأننا لم نقفل الدالة يعني لما تضع الجملة spritebatch.End اقول لك هذا صحيح و لكن الerror يحصل لو استخدم begin مرتين و لكن هنا تم استعمالوا مرة واحدة فلم الخطأ ؟ حاول ان تعرف لو لم تعرف فلا تزعل فربما انك نسيت قليلا و لكن الاجابة في المحاضرة الاولي













حسنا سأقول لك قلت لك فى المحاضرة الاولي ان الدالة Draw تستدعي نفسها كل جزء من الثانية فسيتم اعادة الكود مرة اخري فسيتم استدعاء الدالةbegin مرة اخري فينتج عن هذا خطأ
الحل انت تعرفه كل ما عليك هو عمل end
فنكتب فى اخر الكود spritebatch.End();
الان اظغط على F5 و شوف نتيجة عملك:):):)
http://img411.imageshack.us/img411/9180/clipimage002mg4.jpg
حسنا ربما تحس انك لم تفعل شىء و لكن طريق الالف ميل يبدأ بخطوة و هذه هي اول خطوة
عليك ان تفرح بأنجازك و ان شاء الله سنتقدم فى هذه الدورة
تم الانتهاء من المحاضرة الثانية و اسأل الله التوفيق لى و لكم

الواجب : ارسال التطبيق في المنتدى وليس علي الايميل :)

للتواصل Gindisgindis@hotmail.com

الملفات المرفقة مع المحاضرة علي هيئة pdf من هنا :
http://www.mediafire.com/?cx0txv4osc9

majid64
12-24-2007, 07:53 PM
اخي العزيزانا جد مهتم بهذه الدروس و بهذه اللغة بالذات و ساكون من المتتبعين لها ان شاء الله
و شكرا لك على مجهوداتك

GENERAL OF WORLD
12-24-2007, 10:29 PM
اخي العزيزانا جد مهتم بهذه الدروس و بهذه اللغة بالذات و ساكون من المتتبعين لها ان شاء الله
و شكرا لك على مجهوداتك

العفو اخي و من الجيد انك تتابع :)
يرجي ارسال الواجبات الي :smailes91:

y85.fox
12-25-2007, 11:25 PM
السلام عليكم

اخي الكريم

بارك الله فيك

واستنى مني كم سوال

Aopotter
12-26-2007, 12:10 AM
ربينا يوفقكم يا رب فى عملكم
ويا ربالتفوق دايما لصديقنا الغالى شكرا يا حبى
لكن للأسف مش متعلم برمجة

xblack0
12-26-2007, 02:41 AM
أخ General وينك من زمان ؟
بتحب نبدا مع بعض بوضع دروس عن برمجة الالعاب في لغة c++ اكبر واشمل واقوى وتتعامل مع دايركت اكس مباشرة .
وكمان نبدأمشروع لعبة خاصة في برامج نت .
شو رايك ؟

Ahmed_ghanam
12-26-2007, 08:01 AM
اخى General جزاك الله خيرا على الدوره و بالتوفيق ان شاء الله

warriormsn
12-26-2007, 11:40 AM
بارك الله فيك على الدروس General

GENERAL OF WORLD
12-26-2007, 05:20 PM
بارك الله فيك على الدروس General

أخ General وينك من زمان ؟
بتحب نبدا مع بعض بوضع دروس عن برمجة الالعاب في لغة c++ اكبر واشمل واقوى وتتعامل مع دايركت اكس مباشرة .
وكمان نبدأمشروع لعبة خاصة في برامج نت .
شو رايك ؟

و الله يا ريت :smailes71:
بس مش هينفع للاسف معنديش خبرة في السى بلس بلس
انا ان شاء الله بعد ما اخلص السي شارب مع الXna هشتغل علي السى بلس بلس
و لكن لن اترك السى شارب حتي اعمل مكتبة ( Dll) للXna
يعني عايز اعمل محرك 2D قبل ان اترك هذه اللغة اريد ترك بصمة :)

GENERAL OF WORLD
12-26-2007, 05:23 PM
:smailes100: السلام عليكم

اخي الكريم

بارك الله فيك

واستنى مني كم سوال

احب جدا الاسئلة (تدل علي الذكاء :smailes100: )
و تساعد ناس كثيرة من مشاهدين الموضوع
و اشكر جميع من ردوا في الموضوع لأني كنت هفقد الأمل بعد شوية

GENERAL OF WORLD
12-26-2007, 05:52 PM
المحاضرة الثالثة
بسم الله الرحمن الرحيم
أستخدام الoop و تطبيقوا على المثال السابق
نبدأ بأذن الله
اولا سنبدأ بعمل فولدر جديد فى المشروع بتاعنا و نسميه Graphics و انتو عارفين الطريقة :
http://img523.imageshack.us/img523/5234/clipimage001nl2.gif
و نعطيه اسم Graphics ثم نضغط علي هذا الفولدر بكليك ثم Add ثم Class :
http://img174.imageshack.us/img174/503/clipimage001rc2.gif
ستظهر لكم نافذة: اختر النوع كلاس ثم اعطيه الاسم Image
http://img152.imageshack.us/img152/8465/clipimage002fp3.jpg
نمسح جميع المكتبة المستعملة و نكتب هذه المكتبات :
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

سنعرف اول شىء الspritebatch و انت تعرف عمله جيدا
private SpriteBatch spritebatch;
و تكستشر 2d
private Texture2D texture;
و مكان التكستشر
private Vector2 position;
و نعرف اللون
private Color color;
و سنقوم بتعريف نوع جديد يسمي Rectangle
هذا سنستعمله فى قطع جزء معين من الصورة كلها
مثلا لدينا صورة هكذا :
http://img174.imageshack.us/img174/4830/clipimage001lm4.gif
و انت تريد ان تاخذ جزء من هذه الصورة مثلا القطعة المحددة هنا :
http://img258.imageshack.us/img258/8440/clipimage001sz4.gifفنحن نستخدم متغير من نوع rectangle يعني مستطيل لكي نقطع قطعة من الصورة
و سنسميه source
private Rectangle source;
و نعرف المتغير float اكيد تعرفه و هنا سنحدده لأعطاء نسبة دوران للتكستشر فنسميه rotation
private float rotation;
سنعرف متغير من نوع 2D لتحديد الorigin و لكن ما هو ال origin ؟
الحقيقة هذه المنطقة محتاجة تركيز فلازم تركز
الorigin هي محور الدوران
يعني ايه ؟
مثلا انت عندك بوكس :
مثلا انت حددت الorigin فى مكان الاكس الذي هنا :
http://img152.imageshack.us/img152/1802/clipimage002va9.gif
و عملنا rotation لهذا البوكس
فسيدور هكذا :
http://img152.imageshack.us/img152/3771/clipimage002tq2.gif
تلاحظ ان منطقة x ثابتة و البوكس يدور من حولها يعني هذا يعتبر نقطة الدوران
نكتب
private Vector2 Origin;
و نعرف متغير من نوع float و نسميه scaleو هو عبار عن حجم البوكس
private Vector2 Scale;
و نعرف متغير نوع spriteeffect و هو يفعل بعض التأثرات على التكستشر و نعطيه اسم Effects
private SpriteEffects effects;
نعرف متغير من نوع float و يسمي layer
و في ماذا سيستعمل هذا ؟
مثلا انت عندك اثنين تكستشر واحد للخلفية و وواحد لبطل اللعبة مثل لعبة ماريو فأكيد ماريو سيقوم بأخفاء الخلفية يعني ماريو فوق الخلفية
فيبقي اللاير بتاع الخلفية مثلا 0.5 و اللاير تبع ماريو سيكون 1 :)
نقوم بالتعريف :
private float layer;
انتهينا من منطقة تعريف المتغيرات سنقوم الان بعمل Load للملفات من الخارج
لن نقوم بعمل Load من ملف من الخارج و لكننا سنعطي قيمة الTexture2D الذي في الكلاس الاول الى الTexture2D الذي فى هذا الكلاس
و سنري كيفية ذلك :
نعرف دالة LoadGraphicsContent و هنا لن نكتب override لأنها لن تكون فى الخيارات لأن هذا الكلاس ليس ابن ل Microsoft.Xna.Framework.Game


فستضطر لكتابة اسم الدالة يدويا

public void LoadGraphicsContent(Texture2D texture, SpriteBatch spritebatch)
{
}
و هنا هي من النوع public لأننا سنستدعيها فى الكلاس الاخر و هنا مررنا له بارامتر من نوع Texture2D و اخر من نوع SpriteBatch لأننا سوف نعطي قيمة الTexture2D و الSpriteBatch الذان فى الكلاس الاول للذان فى هذا الكلاس
فسنقوم بكتابة :
this.texture = texture;
this.spritebatch = spritebatch;
و لازم نكتب this لكي نختار المتغير الذي عرفناه فى اول الكلاس و ليس الذي داخل هذه الدالة
فنسند القيمة تبع المتغير الى فى اول الكلاس للذي فى هذه الدالة و سنمرر للذي فى الدالة قيمته الان
شكل الدالة النهائي :
public void LoadGraphicsContent (Texture2D texture, SpriteBatch spritebatch)
{
this.texture = texture;
this.spritebatch = spritebatch;
}
تم الانتهاء من هذا الجزء و سنقوم بأعطاء كل متغير قيمته
نكتب الدالة Initialize المسئولة عن ذلك فنكتب :
public void Initialize ()
{
}
و نكتب داخل الدالة :
position = new Vector2(100, 100);
color = Color.White;
rotation = 0f;
source = new Rectangle(0, 0, 128, 128);
Origin = new Vector2(source.Width /2,source.Height/2);
Scale = 1f;
effects = SpriteEffects.None;
layer = 0.5f;

اول شىء الposition و لقد تعرفنا عليه من قبل
و يمكنا اعطاء قيم هذا المتغير هكذا :
position.X = 100f;
position.Y = 100f;
ثاني شىء هو اللون و نعطيه اللون الابيض و احنا قولنا ماذا يعني اللون الابيض
و وضعنا درجة الدوران تساوى صفر
و بعدها الsource الى هوا نقطع جزء من الصورة و انا اخترت اني اقطع 128 عرض و 128 ارتفاع و هذا هو حجم الصورة الحقيقي و هذا يعني اننا لن نقطع شىء
و الorigin الى هوا محور الدوران حددناه نصف العرض و نصف الارتفاع و هذا يعني فى نصف المجسم بالظبط
و الscale الى هوا الحجم انا محددوا 1 و هو حجم حلو جدا
بعدها الeffects الى هوا التأثيرات انا اخترتوا يساوى None يعني لا تأثيرات (ملاحظة : لو تريد ان تجرب التأثيرات فلا مانع) و هي مجرد تأثيرات لعمل قلب للتكستشر
الlayer طبعا كما عرفناه اعطيه اى قيمة لن تفرق لأننا ليس لدينا الا صورة واحدة

انتهينا من هذه الدالة و سنذهب الى دالة الDraw
نكتب public void Draw
و نحدد بداخله باراماتر من نوع ماذا ؟؟ اعتقد انك تعرف انه الباراماتر الذي يجعله يعمل update لنفسوا :)
هل عرفت








حسنا سأقول انه باراماتر من نوع Game time
نكتب
public void Draw(GameTime gametime)
{
}
و نكتب بداخله
Spritebatc.Draw
و نأتي لمنطقة الباراماترز و سوف نضع باراماترز كثيرة
نكتب :
spritebatch.Draw(texture, position, source, color, rotation, Origin, Scale,effects,.layer);

اول باراماتر هو التكستشر المراد رسمه ثاني باراماتر هو مكان التكستشر و ثالث باراماتر الsource و بعدها اللون الخ…. انت تعرف :)
انتهي هذا الجزء
الان كل جهودنا لن تعمل لأننا لم نستدعي الدالات الموجودة بداخل هذا الكلاس فنقوم بربط الكلاسين ببعضهم البعض
نذهب الي الدالة Engine
اول شىء نقوم بمسح تعريف المتغير position لأننا لن نحتاجوا
نعرف مكانوا الكلاس Image نقوم بكتابة اسم المشروع.اسم الفولدر الذي بداخله الكلاس.اسم الكلاس هكذا :
FirstXna.Graphics.Image و نقوم بأعطائة الاسم box :
FirstXna.Graphics.Image box ;
و نأتي عند الدالة Engine و نقوم بتعريف المتغير box هكذا :
box = new FirstXna.Graphics.Image();
و نأتي عند الدالة Inizalize
بعد تعريف المتغير spritebatch نكتب :
box.Initialize();
لنستدعي الدالة Initialize التي بداخل الكلاس الاخر
يعني شكل الدالة النهائي:
protected override void Initialize()
{
LoadGraphicsContent(true);
spritebatch = new SpriteBatch(graphics.GraphicsDevice);
box.Initialize();
base.Initialize();
}
انتهينا من هذه الدالة نذهب الى الدالة
LoadGraphicsContent
بعد تعريف الدالة Texture نقوم بأستدعاء الدالة LoadGraphicsContent عند الكلاس Image فنكتب:
box.LoadGraphicsContent(Texture, spritebatch);
و طبعا احنا هنا اعطيناه قيمة البارامترز التي يحتاجها
نأتي عند الدالة Draw
و نمسح الجملة التي فيها SpriteBatch.Draw و نكتب بدلا عنها :
box.Draw(gameTime);
هنا نحن استدعينا الدالة Draw و مررنا لها البارامتر gametime اضغط F5 ستري الصندوق الذي رسمناه فى المحاضرة السابقة و لا جديد
طبعا فى كثير منكم متضايق انو عمالي يكتب كود بقالوا وقت كثير و برضو نفس النتيجة طب و ليه نتعب نفسنا
احب اقول لكم ان الان عملنا اكثر تنظيما انت لو بتشتغل فى شركة كبيرة و عملت عملك كلو فى كلاس واحد راح يطردوك في الحال ^_^
تعرف لو حصل خطأ و انت عامل كلو فى كلاس واحد لازم تعمل تغيير جذري فى الكود نفسوا و لن يفهم اعضاء الفريق كودك و لن يكون العمل في تنظيم و ستخرب ميزانية الشركة و راح يضربوك و يطردوك من الشركة Lol
!! ^_^
و هذا سيخفض من حجم الملف و هذا فى صالحك طبعا ربما لن يخفض هذا فى حجم ملفاتنا نحن و لكن لو كنت تعمل في مشروع كبير فستفرق :):)
المحاضرة القادمة سيكون فيها جديد حتي لا تضربوني انا '^_^ :(
ملاحظة مهمة : لكي تقوم ببناء المشروع بجميع ملفات الDll تبعوا عشان تعطيه لواحد صحبك عليك ان تضغط على Build ثم Package FirstXna as Xna Creator Club

الواجب : اريدك ان تجعل عندما اقوم بفتح اللعبة فيشمي هذه الصندوق الي اليمين حتي يختفي من الشاشة من دون استخدام اى نوع من انواع حلقات التكرار ( مثل for و WHILE)
:smailes94:
و ارجو التوفيق للجميع
للاتصال GindisGindis@hotmail.com
المحاضرة علي شكل Pdf و الكود من هنا : http://www.mediafire.com/?am2jht1yfap

xblack0
12-28-2007, 07:49 AM
خسارة اخ جينرال :(

انت مكسب حقيقي للسي + +
يالل ان بانتظارك
بالتوفيق .:smailes60:

GENERAL OF WORLD
12-28-2007, 10:58 AM
الا يوجد من يستطيع حل الواب :smailes78:
انا بالانتظار فالواجب سهل جدا لن يأخذ منكم الا سطر برمجي واحد :smailes15:

خسارة اخ جينرال

انت مكسب حقيقي للسي + +
يالل ان بانتظارك
بالتوفيق .
والله انا نفسي في السى بلس بلس فهي من اهم اللغات في عالم الويندوز او في عالم الكمبيوتر كلوا :smailes80:

و شكرا

majid64
12-28-2007, 06:40 PM
اخي العزيز عند تشغيل البرنامج لاول مرة يعطيني الخطا التالي :
Could not find a Direct3D device that has a Direct3D9-level driver and supports pixel shader 1.1 or greater.
ارجو المساعدة و شكرا

y85.fox
12-28-2007, 07:22 PM
السلام عليكم

اخي الكريم
حملت برنامج
Microsoft XNA Game Studio 2.0

لكن لا يعمل مع VS2008

هل يوجد اصدار من اجل

VS2008

وشكرا لك

GENERAL OF WORLD
12-28-2007, 09:16 PM
السلام عليكم

اخي الكريم
حملت برنامج
Microsoft XNA Game Studio 2.0

لكن لا يعمل مع VS2008

هل يوجد اصدار من اجل

VS2008

وشكرا لك

للاسف يعمل مع النسخة 2005 فقد و يمكنك تحميلها 80 ميجا فقد
http://msdn2.microsoft.com/en-us/express/aa975050.aspx
و حمل Visual C# 2005 Express

و الupdate في نفس الصفحة :
اضغط علي Download Visual C# 2005 Express SP1 »
لتحميلوا

مع الXna version 1.0:
http://www.microsoft.com/downloads/details.aspx?FamilyID=12ADCD12-7A7B-4413-A0AF-FF87242A78DE&displaylang=en
و لا تفقد الامل فأنا بالانتظار :smailes111:

اخي العزيز عند تشغيل البرنامج لاول مرة يعطيني الخطا التالي :
Could not find a Direct3D device that has a Direct3D9-level driver and supports pixel shader 1.1 or greater.
ارجو المساعدة و شكرا

يجب عليك ان تمتلك الدايركت اكس 9.0c حجموا حوالي 60 ميجا فقد يمكنك تحميلوا من هنا :
http://www.microsoft.com/downloads/details.aspx?FamilyID=1A2393C0-1B2F-428E-BD79-02DF977D17B8&displaylang=en

GENERAL OF WORLD
12-30-2007, 09:56 AM
سأقوم بوضع المحاضرة الرابعة يوم الخميس القادم :smailes58:
و لكن اذا وضع احد واجب المحاضرة الثالثة فسأقوم بوضعه الان :smailes5:
بالانتظار و شكرا :smailes45:

GENERAL OF WORLD
01-01-2008, 02:00 PM
UPPPPPPPPPPPP
:smailes17: :smailes17: :smailes17:

ABCARINO77
01-03-2008, 09:46 AM
جزاك الله خيرا
استمر احنا معاك

GENERAL OF WORLD
01-03-2008, 12:57 PM
هذه المحاضرة الرابعة مع اني تضايقت جدا لأن لا احد عمل واجب المحاضرة الثالثة :smailes6: :smailes24:
المحاضرة علي هيئة pdf مع الrecources المرفقة من هنا :
http://www.mediafire.com/?bqde1n90jww
بسم الله الرحمن الرحيم

سنري اليوم كيفية عمل مؤشر للفأرة (الماوس)
لو ضغطنا علي F5 لرأينا انه يتم اخفاء الماوس داخل لعبتنا :(و لكننا سنحتاج الماوس في الالعاب التو دي لذلك سنقوم بوضع texture للماوس
نبدأ بأذن الله
اولا ننشىء فولدر جديد اعتقد انك تعرف كيفية ذلك لو كنت لا تعرف راجع المحاضرة السابقة او التي قبلها
قم بتسمية هذا الفولدر بأسم Input
و قم بوضع كلاس بداخلة و اجعل اسمه Mouse

نستخدم المكتبات هذه :
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
عندنا الان مكتبة جديدة علينا و هي Microsoft.Xna.Framework.Input
و هذه المكتبة هي التي ستجعلنا نعرف مكان الماوس لتثبيت التكستشر عليه و سنرى كيفية ذلك
اول شىء نجعل الكلاس نوعوا static
static class Mouse
{

}
اول شىء نعرف عندوا الكلاس Image بأسم Cursor و يعني المؤشر :
private FirstXna.Graphics.Image cursor ;
لو عندك دراية كاملة بالسى شارب هتقول في نفسك انه في احد الاخطاء و هذا الخطأ انو الكلاس بتاعنا من نوع static فلازم جميع المتغيرات بتاعتوا تكون من النوع static فنكتب
static private FirstXna.Graphics.Image cursor ;
و ايضا جميع دالاتوا يجب ان تكون من النوع static
نقوم بتعريف الدالة التي بأسم الكلاس:
static Mouse()
{
cursor = new FirstXna.Graphics.Image();
}
جميع دالات هذا الكلاس من النوع public لأننا سنستدعيها من كلاس اخر ما عدا هذه الدالة التي استدعيناها من قبل لأن هذه الدالة تعمل وحدها من دون استدعاء
نبدأ بأول دالة و هي الدالة التي تكون بأسم الكلاس :
و نقوم بتعريف المتغير هذا بداخله
cursor = new FirstXna.Graphics.Image();
و سنقوم الان بأستدعاء جميع الدالات التي بداخل الكلاس image من هذا الكلاس و نستدعيها من دالات بنفس اسمها
يعني نعمل دالة اسمها Initialize تقوم بأستدعاء الدالة Initialize في الكلاس Image
نقوم بكتابة:
public static void Initialize()
{
cursor.Initialize();
}
طبعا cursor تعود علي الكلاس Image
و نقوم بأستدعاء الدالة LoadGraphicsContent
نكتب :
public static void LoadGraphicsContent(Texture2D texture, SpriteBatch spriteBatch)
{
cursor.LoadGraphicsContent(texture, spriteBatch);
}
طبعا لا ننسي ان لها البارامترز التي لديها
سنتعرف الان علي دالة جديدة و هي الدالة Update و هذه الدالة ستستعمل لتفقد مكان الماوس في كل جزء من الثانية (تعمل مثل الدالة Draw)
فسنكتب :
public static void Update(GameTime gametime)
{
}
طبعا سنمرر له البارامتر Gametime
و انت تعرف لماذا :)
سنأتي عند اول الكلاس و نعرف المتغير الجديد علينا MouseState فنكتب :
static private MouseState mousestate;
هذا المتغير سنستطيع بواسطته ان نأتي بمكان الماوس
نأتي عند الدالة Update و نكتب
mousestate = Microsoft.Xna.Framework.Input.Mouse.GetState();
و لازم نكتب Microsoft.Xna.Framework.Input
قبل كلمة Mouse لأن الكلاس يسمي Mouse ايضا فيجب التفريق بينهم
و الدالة GetState تأتي بحالة الماوس و نقدر ان نتفقد لو تم الضغط علي زر من ازرار الماوس او تفقد مكانوا و هكذا
نكتب هذا الكود لكي نعطي المتغير Position قيمة مكان الماوس الحالي
cursor.position = new Vector2(mousestate.X, mousestate.Y);
لو كتبت هذه الجملة هكذا فستعد خاطئة لأن المتغير position حالته private فلا يمكن استعمالوا هكذا
نرجع الي الدالة Image ليس من الجيد تحويل الprivate الي public طبعا لفرق السرعة كما عرفنا
نكتب مع بعض:
public Vector2 publicPosition
{
get { return position; }
set { position = value; }
}
هكذا لو رجعنا الي الكلاس Mouse و نكتب بدل position : publicposition هكذا :
cursor.publicPosition = new Vector2(mousestate.X, mousestate.Y);
الان ماذا فعلنا ؟
لقد عرفنا المتغير publicposition علي انو متغير من نوع Vector2 و سوف يحمل قيمة المتغير position و هنقدر نستعملوا في هذا الكلاس بدلا من اعادة تعريف متغير جديد فلا يتم تبطىء حركته في الكلاس Image
ارجو ان تكون الفكرة وصلت و ان لم تصل اطلب اعادة شرح :)
نقوم بكتابة الدالة :
public static void Draw(GameTime gametime)
{
}
و نقوم بأستدعاء الدالة Draw
في الكلاس Image فنقوم بكتابة:
cursor.Draw(gametime);
الان اضغط علي F5
طبعا ستري انه لا جديد فلم يتم تغيير الماوس و طبعا هذا شىء عادي فأنت لم تستدعي أي من هذه الدالات و لم تضع تكستشر للماوس و لا اى شىء
انتهينا من كتابة هذا الكلاس و سنبدأ في قسم تحميل التكستشر و استدعاء هذه الدالات
نذهب الي الدالة الرئيسية Engine
و لن نضطر الي تعريف الكلاس Mouse لأنو من النوع Static
نأتي عند الدالة Initalize و نكتب
FirstXna.Input.Mouse.Initialize();
نأتي عند تحميل التكستشر
نذهب الي الفولدر Recources الذي وضعناه من قبل من الsolution exploler و نضغط عليه كليك يمين ثم Add Existing Item ثم نختار الصورة المرفقة مع الدرس : Cursor.png ثم نضغط عليها كليك يمين ثم properties و نغير الخاصية Copy to output من Do not Copy الي Copy always
و نأتي الي تحميل التكستشر من الكود
و عند الدالة LoadGraphicsContent نكتب
بعد تحميل التكستشر الاول :
Texture = Texture2D.FromFile(graphics.GraphicsDevice, "Recources\\Textures\\cursor.png");
FirstXna.Input.Mouse.LoadGraphicsContent(Texture, spritebatch);
و يكون شكل الدالة النهائي :
protected override void LoadGraphicsContent(bool loadAllContent)
{
if (loadAllContent)
{
Texture = Texture2D.FromFile(graphics.GraphicsDevice, "Recources\\Textures\\box.png");
box.LoadGraphicsContent(Texture, spritebatch);

Texture = Texture2D.FromFile(graphics.GraphicsDevice, "Recources\\Textures\\cursor.png");
FirstXna.Input.Mouse.LoadGraphicsContent(Texture, spritebatch);
}
}
فيتم تحميل الصورة Cursor و التي هي عبارة عن مؤشر للماوس
نأتي للدالة Update و هي غير موجودة بهذا الكلاس فنقوم بكتابتها
نكتب protected override
فتظهر الخيارات منها Update فنختارها فيتم كتابة هذا الكود تلقائيا :
protected override void Update(GameTime gameTime)
{
base.Update(gameTime);
}
سنقوم بأستدعاء الدالة Update
نقوم بالكتابة في هذه الدالة :
FirstXna.Input.Mouse.Update(gameTime);
نأتي الي الدالة Draw الان يمكنا ان نكتب ما بين الجملتين spritebatch.begin و
spritebatch.end
FirstXna.Input.Mouse.Draw(gameTime);
و نضغط علي F5 لنري المؤشر قد تم عمله بطريقة رائعة و اذا اقتربت من البوكس يتم انارته
يكون شكل الدالة النهائي :
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.Black);
spritebatch.Begin();
box.Draw(gameTime);
FirstXna.Input.Mouse.Draw(gameTime);
spritebatch.End();
base.Draw(gameTime);
}

الواجب ارسال التطبيق و شكرا
اذا كانت النتيجة مختلفة فيرجي وضع الكود في المنتدى لمراجعته معك و معرفة الخطأ
في المثال القادم سوف نعطي بعض الحركة لهذه اللعبة لو لم تفهم جزئية يرجي الكتابة في المنتدى
و لا تخجل في العلم
ارجو ان يكون قد اعجبهم هذا الدرس :) و بالتوفيق
للاتصال: GindsiGindis@hotmail.com

GENERAL OF WORLD
01-05-2008, 02:41 PM
Uuuuuuuuupppp

Who is this
01-05-2008, 04:57 PM
Thanmk you for the lessons

khaled_s3lim
01-05-2008, 11:39 PM
ررررررررررررررررائع مستنين جديدك

skeichi
01-06-2008, 03:16 AM
شي معقد

صعبه

GENERAL OF WORLD
01-06-2008, 01:42 PM
شي معقد

صعبه

مممممممممم
في الاول كنت مثلك او اكثر كمان و لكن مع الممارسة اديني بقيت ادي دروس :smailes100:
ولا تعتقد اني بدرسها من سنين فأنا اعرفها من 3 اسابيع او اربعة :smailes71:
و انا ادرس الى شارب منذ اقل من 5 شهور :nut:
ارجو ان تكون وجهة النظر وصلت

ABCARINO77
01-07-2008, 05:51 AM
أنا معاك ان شاء الله فى الدوره دى
بس أنا عندى امتحانات الأن
لذلك استمر و أنا ان شاء الله
هتابع معاك بس لما أخلص امتحانات
و هبعت الواجب كمان

GENERAL OF WORLD
01-08-2008, 10:01 PM
أنا معاك ان شاء الله فى الدوره دى
بس أنا عندى امتحانات الأن
لذلك استمر و أنا ان شاء الله
هتابع معاك بس لما أخلص امتحانات
و هبعت الواجب كمان

هذا هو التشجيع :smailes100:
انا بالانتظار
بالتوفيق ان شاء الله

GENERAL OF WORLD
01-10-2008, 01:55 PM
ستتوقف الدورة حتي يوم 18/1
لأن الناس مشغولة بالامتحانات
انتظروني و لي عودة

MCSD-Developer
01-29-2008, 08:20 PM
السلام عليكم ورحمة الله وبركاته
مشكور اخي الكريم على مجموعة الدروس التي ولا اروع ولكن عندي استفسار هل الكلام صحيح انه شركة مايكروسفت اوقفت دعم دايرك اكس واستبدلتها زينا

GENERAL OF WORLD
01-30-2008, 09:38 AM
السلام عليكم ورحمة الله وبركاته
مشكور اخي الكريم على مجموعة الدروس التي ولا اروع ولكن عندي استفسار هل الكلام صحيح انه شركة مايكروسفت اوقفت دعم دايرك اكس واستبدلتها زينا

نعم هي اوقفت دعم الدايركت اكس و لكن للغة السى شارب فقد و لكن بالنسبة لسى بلس بلس فما زال الدايركت اكس موجود
و شكرا علي الاطراء
و راح اكمل الدورة من انهردة :smailes100:

ql00p
01-30-2008, 11:31 AM
السلام عليكم ورحمة الله وبركاته
اكشر لكم كل هذا المجهود المبتذل في انجاح الموقع وانا من اشد المعجبين بالموقع صراحه
ولكن لي طلب بسيط اذا احد يقدر ينفذه لي لا هنت اريد مبرمج يبرمج لي لعبة البلوت المعروفه ومن يجد نفسه جاهزاا اكون لها مشكور بترك طريقة التواصل معه وشــــــــكرا
اخوكم قلوب

dotreway
01-30-2008, 07:48 PM
:smailes91: شكرا لك اخي والى الامام

majid64
02-04-2008, 04:17 PM
شكرا على المتابعة

MCSD-Developer
02-10-2008, 11:04 PM
السلام عليكم ورحمة الله وبركاته
منتظرين متابعت الدورة معك يا اخي الكريم بأحر من الجمر

majid64
02-12-2008, 04:01 PM
قريبا سابعث بالواجب اخي الكريم

majid64
02-12-2008, 04:09 PM
الواجب: http://rapidshare.com/files/91217771/WindowsGame1.rar.html

Armin
02-12-2008, 06:29 PM
ألف شكر لك أخي الكريم على هذه الدورة الممتازة

majid64
02-15-2008, 03:49 PM
اخي الكريم General Of World لا زلنا في انتظار تتمة الدروس .....
مع تحياتي الخالصة .. و شكرا