الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشروع لعبة حرب الدبابت التعليمي

بدأه رغيد الطيب في 22 ديسمبر 2009 · 25 رد · 5,248 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله السميع العليم

مشروع لعبة حرب الدبابات

Tanks War Project

قد يكون العنوان رناناً اكثر من اللازم وربما خُيل إليك انني بصدد بناء لعبة دبابات مثالية تملئها الرسوميات و الثلاثية الابعاد و الاكشن ويؤسفني كوني سأحطم احلامك كونها ستكون لعبة بسيطة الاخراج الغرض منها تعليمي بحث يهذف في المقام الأول الى فهم معيارية بناء البرامج متعددة الطبقات (N-Tier Architecture) وهي عبارة عن منهج مفيد جدالهيكلة وفهم وتوزيع برامجنا يمكننا من تطويرها بسهولة واحنرافية.

سنحاول في هذا المشروع الجمع بين مناهج برمجية متعددة علنا نحل على مشروع يصلح ان يكون نقطة بداية في مشاور التحول من البرمجة التقليدية الى البرمجة الاحترافية.

سنتطرق في مشروعنا الصغير الى مفاهيم متعددة مثل ( الرسوميات GDI+ , برمجة كائنية التوجه OOP , برمجة طبقية N-Tier , البرمجة الموزعة عبر الشبكة Distributed Systems وسنتطرق بإقتضاب على الذكاء الاصطناعيArtificial Intelligence )

فكرة المشروع

تكمن فكرة مشروعنا في بناء لعبة حربية بسيطة (جدا جدا) وهي عبارة عن حرب بالدبابات و اللعبين فيها هم ثلاث شخصيات :

1 - اللاعب الاساسي (وهو اللاعب الذي يجلس امام الشاشة) بكلمات اخرى (انت).

2 - اللاعب البعيد وهو خصمك الذي يمكن ان يباريك عبر الشبكة.

3 - الكمبيوتر وهو اللاعب الذي سنضيف اليه بعض الذكاء الاصطناعي لنجعله يجاري البشر في قيادة الدبابات.

اللعبة بمفهومها المصغر ستحتوي على ميدان لعب من مربعات Blocks والتي اما ان تكون عبارة عن مربعات فارغة يمكن ان تنقل دبابتك اليها او تكون عبارة عن حائط لايمكن الانتقال اليه.

يمكن لك اللعب ضد الكمبيوتر كما يمكن للاعبين آخرين ضمن الشبكة الاشتراك معك في اللعب ... وسنبني سويا لتحقيق ذلك الغرض محرك صغير للألعاب عبر الشبكة UDP Game Communication Engine

وسنقسم البرنامج الى مشروعين منفصلين سيتم تطويرهما جنبا الى جنب ... الأول هو مشروع اللعبة نفسها بميزة اللعب ضد الكمبيوتر (فقط) ...ومشروع محرك اللعب عبر الشبكة ... ثم سندمج المشروعان في مشروع واحد يمكنك من اللعب ضد الكمبيوتر وضد لاعب آخر على الشبكة بإستخدام المحرك الذي سنبنيه سويا.

وسنبدأ هنا بتطوير برنامج اللعبة رويدا رويدا بإستخدام مفاهيم الـ OOP الأساسية وسأحاول قدر المستطاع جعلها سهلة لتكون مادة خصبة للدراسة.

صورة مبدئية للعبة في اصدارها الاول الذي لايقوم بشيء تقريبا سوى رسم شكل اللعبة وابعادها بحيطانها وشوارعها التي ستسير فيها الدبابات للحرب.

مرفق صورة اولية سنتطرق اليها في المشاركة التالية بإذن الله تعالى.

اسأل الله تعالى لنا التوفيق

السلام عليكم ورحمة الله و بركاته

post-40889-1261442602399_thumb.png

4

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#2

فكرة ممتازة كما عودتنا أ/رغيد وتحتوى على العديد من مفاهيم البرمجة المتقدمة

جزاك الله خيرا

فى انتظارك :blush:

تم تعديل هذه المشاركة بواسطة GHOST2010 في 22 ديسمبر 2009 في 08:57

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#3

إن شاء الله معك حتى النهاية أخ رغد

Chail .. Get Focus .. Then Catch Your Target

#4

بسم الله الرحمن الرحيم

قبل البدء بتصميم اللعبة يجب التنويه الى كوننا سوف نستخدم مبدأ البرمجة الطبقية او الـ N-Tier Arcithecture ومعناها بإقتضاب هو ان نقوم بتقسيم الكود الى طبقات (تخيلها في رأسك فوق بعضها البعض) ... بحيث نفصل الكود المختص بكل طبقة عن الآخر ... خذ مثلا قاعدة البيانات او الملفات النصية او xml التي ستقوم بتخزين اعدادات وخيارات البرنامج فيها تعتبر طبقة بحذ ذاتها (طبقة البيانات Data Layer) ... بينما الدوال و الفئات التي ستستخدمها لجلب و تخزين هذه الملفات تعتبر هي الاخرى طبقة (طبقة الوصول الى البيانات Data Access Layer) وهناك طبقة اخرى هي طبقة عرض البيانات او ( طبقة واجهة المستخدم User Interface Layer ) وبين الطبقتين الاخيرتين توجد طبقة مهمة جدا هي طبقة المنطق او الاعمال (طبقة الاعمال Business Layer) وفيها كل الفئات التي تمثل لب برنامجنا وعمله الاساسي.

لاحظ ان الاسماء قد تختلف مثلا تسمى طبقة المستخدم User Interface Layer احيانا باسم طبقة العرض Persentation Layer و تسمى طبقة الاعمال Business Layer باسم طبقة المنطق Logic Layer ويبقى عملها نفسه.

المهم في الموضوع ان كل طبقة تتعامل مع التي تليها مباشرة ولا يحق القفز ابدا

مثلا لنفرض اننا صممنا برنامجنا بهذه الطبقات:

طبقة العرض

طبقة الاعمال

طبقة الوصول للبيانات

طبقة البيانات

ومعناه بان طبقة البيانات لايحق لها ابدا التعامل مباشرة مع طبقة الاعمال او العرض وانما مع طبقة الوصول للبيانات لانها الطبقة التي فوقها

وكذلك طبقة الوصول للبيانات لا يحق لها التعامل مع طبقة العرض دون المرور بطبقة الاعمال لانها التي تليها.

وللمهتمين بهذا المجال يمكن لهم القراءة اكثر في الموضوع وإن وجد اي استفسار سنناقشه سويا بإذن الله تعالى.

خذ هذا الرابط باللغة الانجليزية

http://www.15seconds.com/issue/011023.htm

او بالعربية موضوع الاخ العزيز ابو عابد

http://vb4arab.com/vb/showthread.php?t=10969&highlight=n-tier

وموضوع الاخ تركي

http://www.al-asiri.com/View1/Pages/Record.ASPX?Action=OPN&ID=cefa426c-d9e0-4625-a66b-87fd6082ff89

وستجد غيرها الكثير و الكثير ... المهم في الموضوع ان تفكر ببرنامج بكونه عبارة عن طبقات مستقلة

للتمييز سأجعل في مشروعنا ثلاث مجلدات Bussiness و Data Access و UI حتى يمكنك التمييز بين الكود التابع لكل طبقة كما في الصورة المرفقة

السلام عليكم

post-40889-12614939185409_thumb.png

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#5

مبدع دائما :) واحنا بانتظارك ،، لتعلمنا المزيد عما نجهل :)

FineDesign For Graphic and WebDesign

ForEach(Minute in MyLife)

MyExperience ++;

#6

السلام عيلكم ورحمة الله وبركاته

قلنا سابقا اننا سنتبع منهج الـ N-Tier و كذلك الـ OOP ومعناه ان تصميمنا سيكون بشكل كائنات Objects مشتقة من فئات سنقوم بتصميمها لتمثل كل فروع البرنامج.

ومبدائيا سيكون لدينا فئتين اثنتين الاولى هي الفئة GameBoard او لوحة اللعب وهي عبارة عن كنترول ستظهر عليه مساحة اللعبة بكل عناصرها ومبدئيا ستحتوي هذه الفئة على خاصية هي Blocks و التي هي عبارة عن مصفوفة تحتوي على جميع مربعات

اللعبة.

وتوجد وظيفتان هما NewGame وتستخدم لإنشاء لعبة جديدة و وظيفة بإسم GetBlock وتستخدم لجلب المربع عند اي نقطة معينة بـ x و y.

وتقع الفئة GameBoard في طبقة العرض كون جميع عناصر اللعبة ستكون معروضة عليها.

الفئة الاخرى هي Block وهي فئة تمثل كل مربع من مربعات اللعبة وفيها مبدئيا ثلاث خصائص :

BlockType

وهي الخاصية التي تبين نوع المربع اهو مربع فارغ Blank او حائط Wall

Board

وهي من النوع GameBoard وتخزن لوحة اللعب التي ينتمي اليها هذا المربع.

Location

هو متغير من النوع Point وفيه الاحداثيات الحقيقية لهذا المربع في لوحة الرسم x و y ولأن لوحة اللعب تتكون من 20x20 مربع فان القيمة القصوى للـ x هي 20 وكذلك الـ y.

وتوجد وظيفة بإسم Draw وتستقبل الكائن graphics الذي تريد الرسم عليه وستقوم برسم المربع (فراغا كان ام حائط) بما يتناسب مع الخاصية BlockType بالشكل التالي :

    Sub Draw(ByVal g As Graphics)
        Dim rct As New Rectangle(Me.Location.X * 30, Me.Location.Y * 30, 28, 28)
        Dim pth As New GraphicsPath()
        pth.AddRectangle(rct)
        Dim brh As New PathGradientBrush(pth)

        brh.CenterPoint = New Point(rct.X + 5, rct.Y + 5)

        If Me.BlockType = BlockTypes.Blank Then
            brh.CenterColor = Color.White
            brh.SurroundColors = New Color() {Color.WhiteSmoke}
        Else
            brh.CenterColor = Color.WhiteSmoke
            brh.SurroundColors = New Color() {Color.Lime}
        End If

        g.FillRectangle(brh, rct)
        g.DrawRectangle(Pens.Silver, rct)

        brh.Dispose()
        pth.Dispose()
    End Sub

يجب التنويه ان الفئة GameBoard و بالتحديد الوظيفة NewGame تقوم بتكوين لوحة اللعب المكونة من 20x20 مربع وتختار عشوائيا مربعات الفراغ و الحائط بالشكل التالي :

    Sub NewGame()

        Me.Blocks.Clear()

        For I As Integer = 1 To LineBlocks
            For J As Integer = 1 To LineBlocks
                Dim blk As New Block(I, J)
                blk.Board = Me

                Me.Blocks.Add(blk)

                If J Mod 2 > 0 AndAlso 1 - (Rand.Next(2) * 1) > 0 Then
                    blk.BlockType = BlockTypes.Wall
                End If
            Next
        Next

        Me.Invalidate()

    End Sub

اتمنى الاطلاع على الكود المرفق حتى نقوم بالانتقال الى الخطوة التالية ونطور البرنامج قليلا.

السلام عليكم ورحمة الله وبركاته

post-40889-1261498001922_thumb.png

rtaTanksWar - Version1.zip

تم تعديل هذه المشاركة بواسطة رغيد الطيب في 22 ديسمبر 2009 في 19:12

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#7

للتثبيت

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#8

السلام عليكم ورحمة الله وبركاته

والآن لننتقل الى الاصدار الثاني فبعد وضعنا للاصدار السابق والذي تضمن فئتان اثنتان هما GameBoard و Block ... حيث تتكون لوحة اللعب من مجموعة من المربعات Blocks والان سنضيف سويا كائن جديد الى المشرع يمثل الدبابة (او الآلة الحربية التي سنلعب بها) ونعدل مايلزم في الفئتين السابقتين.

قم بالقاء نظرة على الصورة المرفقة قبل الاستمرار ....

والآن الفئة الجديدة بإسم Tank بمعنى دبابة (وليس ذُبابة) .. هي الفئة المسئولة عن رسم الدبابة الحربية في مربع معين وفيها الخاصية Block وهي عبارة عن المربع الذي يحتوي دبابتنا.

كما توجد الخاصية Direction و الذي تمثل اتجاه مدفع الدبابة وهو يمكن ان يكون احدى اربع قيم (الى اليسار او اليمين او اعلى او اسفل)

ويوجد الخاصية Color وهي لون المركبة و اخيرا الخاصية Board وهي لوحة اللعب التي تقع الدبابة عليها.

هناك وظيفتان في هذه الفئة الوظيفة Draw لرسم المركبة على المربع المحدد و الوظيفة MoveTo والتي تقوم بتحريك المركبة الى مربع معين او احداثيات معينة على اللوحة او باتجاه معين وهذه الوظيفة تقوم بتحريك الدبابة وتفجير الحدث TankMoved والذي سيفيد بمعرفة كون المركبة انتقلت من مكان الى مكان آخر.

يجدر الاشارة الى بعض التعديلا الطفيفة التي اضيفت الى الفئة GameBoard مثل الخاصية Tanks و التي تحتوي على مصفوفة بجميع المركبات في اللعبة

وكذلك الوظيفتان AddTank و التي يمكن من خلالها اضافة دبابة جديدة الى اللعبة

والوظيفة GetTank والتي تعيد الدبابة الموجودة عند احداثيات معينة على اللوحة.

اتمنى الاطلاع الدقيق في الاصدار الثاني للعبة حتى نمضي قدما ... الى الخطوة التالية وهي اطلاق النيران.

اعرف انني اسير بسرعة قليلا مع القليل من الشرح ولكن املي في ان المهتمين سيتفحصون الكود جيدا ثم نناقش سويا اي غموض يتولد عن هذه القراءة لأن البرنامج سيزداد تعقيدا كلما تقدمنا اكثر.

السلام عليكم

post-40889-12616162689338_thumb.png

rtaTanksWar - Version2.zip

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#9

السلام عليكم ورحمة الله وبركاته

الاخوة الاعزاء والان سننتقل الى اطلاق النيران .... ولأن مفهوم الـ OOP يقتضي التفكير بكل جزء من البرنامج ككائن مستقل فإن القذيفة او الصاروخ المنطلق من الدبابة هو عبارة عن كائن مستقل سنصمم له فئة مستقلة تمثل الصاروخ بإسم Rocket (انظر في الصورة المرفقة).

تحتوي الفئة Rocket على 3 خصائص :

Block

وهو المربع الذي يوجد عليه الصاروخ حاليا وتتغير قيمة هذه الخاصية اثناء حركة الصاروخ فوق المربعات المختلفة باتجاه الهذف.

Tank

وتحتوي هذه الخاصية على الدبابة التي قامت بإطلاق الصاروخ.

Direction

وهذه الخاصية تحتفظ باتجاه سير الصاروخ.

وتحتوي هذه الفئة على وظيفتان اثنتان الاولى Draw لرسم الصاروخ و الاخرى Move وهي الوظيفة التي تقوم بنقل الصاروح من موقعه الحالي الى الموقع الذي يليه وتعيد القيمة True في حال نجاح العملية والقيمة False في حال فشلها واصدام الصاروخ بحائط او ماشابه.

وعليه فسنحتاج لبعض التعديلات في الفئات السابقة ..... منها :

الفئة GameBoard

قمنا بإضافة الخاصية Rockets والتي تحتوي مصفوفة من الصواريخ المتناثرة هنا وهناك في ارجاء اللعبة

وكذلك الوظيفة GetRocket التي يمكن التي يمكن عن طريقها معرفة الصاروخ الموجود عند اي احداثيات x و y.

الفئة Block

تمت اضافة الوظيفة GetRocket اليها ويمكن بها معرفة الصاروخ المار فوق هذه الـ Block

وايضا الوظيفة GetBlockOn وهي وظيفة يمكن استخدامها لمعرفة اي مربع مجاور على اليمين او الشمال او اعلى او اسفل المربع الحالي.

واخيرا الفئة Tank

وفيها قمنا بإضافة الوظيفة Fire والتي تقوم بتوليد صاروخ جديد خارج من الدبابة عند استدعائها.

مرفق مع هذه المشاركة الاصدار الثالث من المشروع باضافة امكانية اطلاق صواريخ من الدبابة ارجو تجربته واستخدام الازرار للتوجية ثم الزر Fire لإطلاق الصاروخ من الدبابة.

اتمنى الوضع في الاعتبار اننا وحتى الان نقوم بنناء الاجزاء المختلفة من لعبتنا وفي طريقنا في الاخير الى ربطها جميعا بحيث نتمكن من خوض اول تجارب للعبتنا البسيطة.

الخطوة التالية ستكون في اضافة امكانية القيادة لدبابتنا الجميلة.

السلام عليكم ورحمة الله وبركاته

post-40889-12616980419391_thumb.png

rtaTanksWar - Version3.zip

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#10

السلام عليكم ورحمة الله وبركاته

قبل الانتقال الى مسئلة التحكم بقيادة المركبات الحربية وددت ان اجري بعض التعديلات الرسومية على الاصدار الثالث واضافة ميزة ظريفة الى خاصية اطلاق الصواريخ وهي خاصية الانفجار.

فبمجرد اصدام الصاروخ بجدار او بأحد حدود اللعبة سيتم توليد كائن جديد من النوع Explosion أو إنفجار ... وهي فئة جديدة اضفتها الى المشروع تحتوي على خاصيتان هما الخاصية Block وتستخدم لمعرفة المربع الذي حصل عليه الإنفجار و الخاصية Done والتي ستحمل القيمة True بمجرد انتهاء الانفجار.

ستلاحظ ان هذه الفئة لا تحتوي على الوظيفة Draw كما هو واضح من الصورة المرفقة وذلك لكونها ذاتيه الرسم (كما احبها دائما الاخ العزيز vbnetskywalker ) ... جعلناها كذلك لانه لايشترط تزامنها الدقيق بين جميع اللاعبين فيكفي ان يخبر السرفر الجميع بوجود انفجار في المنطقة الفلانية حتى يعرضه الجميع ولاضير من اختلاف بضعة اجزاء من الثانية كما ان الانفجار ليس عبارة عن عملية رسم واحدة وانما هو عبارة عن عمليات سريعة متتالية للرسم كل 20 ملي ثانية ولهذا الغرض فهي تحتوي على مؤقتها الخاص Timer داخلي للإهتمام بعرض شكل الانفجار البسيط وبمجرد انتهاء الانفجار يتم ازالة الكائن من اللعبة تلقائيا.

اترككم مع التعديلات الطفيفة على الإصدار الثالث في هذا الإصدار وانتقل بعد ذلك (في حل عدم وجود استفسارات او اقتراحات بالطبع) الى الاصدار الخامس وهو اول اصدار سنهتم في بالحركة.

ملاحظة اخير:

ان اي صاروخ واثناء انطلاقه هو معرض لإحدى نتائج محددة فإما ان يصدم بحائط او بأحد حدود اللعبة وينفجر وهو ما قمنا بتغطيته حتى الان وتوجد احتمالات اخرى اتركها لحينها مثل ان يصدم بدبابة اخرى فيفجرها او ان يصدم بصاروخ آخر فينفجران معاً .. وسنقوم بذلك سويا في الوقت المناسب بإذن الله تعالى

تحياتي

السلام عليكم ورحمة الله وبركاته

post-40889-12617086792607_thumb.png

rtaTanksWar - Version4.zip

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#11

جميل جدا أستاذى رغيد

فقط لدى نقطة

عند تحريك الدبابة بحيث تكون البلوك التالية مسدودة ثم الضغط على Fire فإن الدبابة تختفى وهذا منطقى حيث أن الصاروخ انفجر فيها :D لكن عند الضغط مرة أخرى على Fire تظهر الدبابة لتطلق الصاروخ ثم تختفى مرة أخرى

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#12

السلام عليكم

ملاحظتك في محلها مشرفنا العزيز ... وذلك لأننا لم ندخل طور المبارة بعد (اي ضرب وتفجير الاهداف الأخرى) لازلنا في طور الاطلاق .... حقيقة لجأت الى اسلوب تطوير البرنامج خطوة بخطوة حتى يشارك المهتمين وحتى تكون هناك فرصة امام المبتدئين حتى يشاهدون خطوات التطوير امام عيونهم ويتسنى السؤال و مناقشة اي غموض في وقته.

لذا بمجرد وصلولنا لمرحلة الحرب سآخذ ملاحظتك بعين الاعتبار بإذن الله تعالى.

سأنتظر لساعات قبل ان اضع الاصدار الذي يليه بإذن الله تعالى والمهتم بإولى خطوات تحريك المركبة الحربية.

السلام عليكم

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#13

السلام عليكم ورحمة الله وبركاته

بفضل من الله ومنة وصلنا الى هذه المرحلة في بناء مشروعنا والآن ينبغي على المبتدئين في البرمجة الكائنية التوجه الرجوع الى آخر اصداراتنا (الاصدار الرابع) لدراسته جيدا ومعرفة

كيف رمزنا لكل جزء من برنامجنا بكائن مستقل ابتدءاً من مربعات لوحة الرسم Blocks والمركبات الحربية Tank ومثلنا الصواريخ بالكائن Rocket وكل انفجار ينتج عن هذه الصواريخ بالكائن

Explosion.

والآن نحن بصدد قيادة مركبتنا العزيزة فكل مركبة حربية ممثلة بالكائن Tank تعتبر عقيمة نظرا لكونها لايوجد لها قائد يسير امورها وانما تقبع كل مركبة في مكانها دون حراك (حتى الان).

لكي نقود اي مركبة نحن بحاجة الى لاعب يقودها ولذا سنقوم بإضافة فئة جديدة بإسم Player الى المشروع تحتوي على خاصيتان Tank وهي الدبابة التي يقودها هذا اللاعب و كذلك

الخاصية Name والتي تحدد اسم اللاعب الذي يميزه عن بقية اللاعبين في اللعبة.

الجديد هنا هو ان الفئة Player ليست بسهولة الفئات السابقة وتختلف عنهم كونها ليست كائنا مرئيا فهو ليس كـ Block او Tank او Rockect او الإنفجار Explosion ... فهو لايمثل شيء

مرسوم على الشاشة على الرغم من كونها عصب اللعبة الاساسي و بالتالي فهو لن يحتوي على الوظيفة Draw كبقية الكائنات الاخرى ولكن ليس هذا هو الاختلاف الاساسي

فالاختلاف الاساسي يكمن في كون اللاعب Player هو ليس نوعا واحد وإنما ثلاثة انواع مختلفة من اللاعبين !! .... فإما ان يكون اللاعب محليا اي متواجد امام الشاشة Local Player

واما ان يكون لاعب بعيد عن طريق الشبكة Remote Player واما ان يكون اللاعب هو الكمبيوتر Computer Player ولذا فإن الفئة Player ستكون احدى هذه الثلاثة خيارات.

وهنا سنستخدم اسلوب الوراثة في الـ OOP بحيث تكون لدينا الفئة الاساسية Player وفيها الاشياء الاساسية بين الانواع الثلاثة وهي في حالتنا الخاصيتين سابقتا الذكر ثم نصمم ثلاث

فئات فرعية هي LocalPlayer , RemotePlayer و ComputerPlayer وهذه الفئات الثلاث الاخيرة ترث من الفئة الرئيسية Player وفي اصدارنا هذا (الاصدار الخامس) .. سنتحدث عن الفئة LocalPlayer ثم نكمل عن البقية في الاصدارين الذي يليون ... انظر الى الصورة المرفقة التي تبين العلاقة الوراثية بين هذه الفئات.

الفئة LocalPlayer وهي اللاعب الحالي الذي يقبع امام الكمبيوتر وتقوم هذه الفئة عند انشائها بمراقبة احداث الضغط على المفاتيح بحيث تراقب العليات التي يقوم بها اللاعب فمثلا عند النقر الزر CTRL كونترول تقوم الفئة بإستدعاء الوظيفة Fire التابعة للدبابة التي يقودها اللاعب وبالطبع ستقوم هذه الوظيفة بإطلاق صاروخ جديد كما رأينا في الاصدار السابق.

كما ان الضغط على مفتاح من مفاتيح الحركة الى اليمين او اليسار اعلى او اسفل سوف يستدعي الوظيفة TurnTankTo وهي عبارة عن وظيفة داخليه تقوم بتوجيه الدبابة الى الوجهة التي اختارها المستخدم.

ارجوا الاطلاع على الكود المرفق ومحاولة قيادة الدبابة بالضغط على ازرار التحكم و الزر كونترول ودراسة الكود المرفق جيدا وتعلم القيادة اليدوية قبل الانتقال الى تصميم قيادة الكمبيوتر.

السلام عليكم ورحمة الله وبركاته

post-40889-12619125552714_thumb.png

rtaTanksWar - Version5.zip

rtaTanksWar - Version5.zip

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#14

السلام عليكم ورحمة الله

ما شاء الله عليك اخى الكريم

موضوع رااااااااائع جدا

انا فعلا كنت عاوز موضوع زى دة من زمان لان موضوع التعامل مع Layers والطبقات دة كان نفسى افهمة من زمان

استمر اخى على بركة الله نحن فى شوق لتكملة الموضوع

جزاك الله خيرا

#15

وعليكم السلام ورحمة الله وبركاته

ستستفيذ اخي كثيرا من موضوع الاخ ابو عابد الذي وضعت رابطه في المشاركات الاولى فهو متخصص في الموضوع

السلام عليكم

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#16

السلام عليكم ورحمة الله وبركاته

والآن وبعد أن صممنا دبابتنا الصغيرة واضفنا لها عقل مدبر ليقودها بحسب رغباتنا (الفئة LocalPlayer تعتبر العصب المحرك لدبابتنا الخاصة).

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

وفي هذا المثال سأضع (اغبى) نموذج للاعب الكمبيوتر .... بحيث يكون لدينا لاعب يستخدم مبدأ (البحث الاعمى) في تحريك الدبابة ... واقصد بالبحث الاعمى هو مجرد التحرك بغض النظر عن دبابات العدو الاخرى ... اين هي وكيفية مهاجمتها.

ولتصميم مثل هذا النموذج فنحن بحاجة الى جعل الفئة ComputerPlayer ترث من الفئة Player بالشكل التالي :

Public Class ComputerPlayer
    Inherits Player

End Class

وبهذا فإن الفئة ComputerPlayer سوف ترث خصائص الفئة Player تلقائيا.

ثم سنقوم بإضافة الوظيفة MoveTank الى الفئة ComputerPlayer و التي ستقوم بتحريك الدبابة المرتبطة بهذا اللاعب الى المنطقة الثانية بحسب معايير الذكاء التي سنضيفها لها.

وقبل الحديث عن الوظيفة MoveTank التابعة ComputerPlayer اود الحديث عن وظيفة صغيرة اضفتها الى الفئة Tank وهي الوظيفة GetPossibleWays وهي وظيفة بسيطة تقوم بالبحث عن جميع الاتجهات التي يمكن للمركبة السير اليها (الاتجهات التي لايكون فيها حائط) ... وشفرتها كالتالي :

     Public Function GetPossibleWays() As List(Of TankDirections)
        Dim lst As New List(Of TankDirections)
        Dim blk As Block = Nothing

        For I As Integer = TankDirections.Left To TankDirections.Down
            blk = Me.Block.GetBlockOn(I)
            If (blk IsNot Nothing) AndAlso (blk.BlockType <> BlockTypes.Wall) Then
                lst.Add(I)
            End If
        Next

        Return lst
    End Function

وكما ترى من الكود اعلاه فاننا نقوم بالدوران في جميع الاتجهات (يمين يسار تحت وفوق) ثم استخدام الوظيفة GetBlockOn لمعرفة المربعات على جميع جهات الموقع الحالي .. يلي ذلك التأكد من كون المربع المجاور ليس حائطا وبالتالي اضافته الى قائمتنا ... ومنها فإننا سنحصل على قائمة بالاتجهات التي يمكن لمركبتنا السير اليها.

والان نعود للفئة ComputerPlayer وللوظيفة السحرية المسماه MoveTank والتي ستقوم بتحريك مركبتنا .... ولأنني اود ان اري المبتدئين امثالي في مجال الذكاء الاصطناعي كيف سنطور هذه الوظيفة رويدا رويدا ... في هذا الاصدار ستكون لدينا (اغبى) مركبة حربية متحركة .... (ما اجمله من تشجيع للمبتدئين - اظنني قد سددت انفسهم !!) ... اتمنى ان يلتمسون لي العذر

ستقوم الوظيفة MoveTank بإستخدام الوظيفة سابقة الذكر GetPossibleWays لمعرفة جميع الاتجهات المتاحة امام مركبتنا ثم ستقوم بالاختيار عشوائيا لأحد هذه الاتجهات وتحريك المركبة اليه فقط !... بالشكل التالي :

    Public Sub MoveTank()
        Dim Ways As List(Of TankDirections) = Me.Tank.GetPossibleWays()
        Dim Index As Integer = -1

        If Ways.Count > 0 Then
            Index = GameBoard.Rand.Next(Ways.Count)
            Me.Tank.MoveTo(Ways(Index))
        End If
    End Sub

لاتحتاج الوظيفة الى توضيح فما تقوم به لايعدو الاختيار العشوائي لأحد الطرقات المتاحة

والان جرب البرنامج المرفق والذي سيقوم بإضافة مركبتين حربيتين الى اللعبة عند الحدث Load وسيجعل للأولى سائقا من النوع LocalPlayer وبالتالي ستتمكن انت من قيادتها مباشرة ولونها ازرق ... والثانية لونها أحمر وسيكون سائقها من النوع ComputerPlayer و بالتالي فسيتم توجيهها تلقائيا من قبل الكمبيوتر.

تفصيل اخير مهم وهو لتحريك جميع مركبات الكمبيوتر فقد تمت اضافة تايمر داخلي في الفئة GameBoard يقوم بإستدعاء الوظيفة MoveTank لكل المركبات التي تحتوي على سائق من النوع ComputerPlayer.

------------------------------------------------

يتنامى حجم برنامجنا تدريجيا (فشفرة الفئة Tank لوحدها تتجاوز المئة وخمسون سطر برمجي) ... وما اتمناه ان لايتردد الجدد على مفهوم الـ OOP بالمناقشة والاستفسار فما نقوم به ليس معقدا اطلاقا بل هو من اكثر البرامج بساطة من ناحية الكود (وظائف بسيطة شفرات قصيرة وخصائص محدودة) غير ان ما اخشى ان يفقده المتابعون هو كيفية ربط هذه الاجزاء البسيطة المتنوعة فقد بدأنا مشاورنا وليس لدينا سوى فئتان اثنتان فقط بالاضافة الى لوحة الرسم هما الفئتان Tankو Block والان لدينا حوالي ثمان فئات اضافية فئة للصواريخ واخرى للانفجارات وثالثة للاعبين العادين و اخرى للكمبيوتر و و و ... و روعة البرمجة كائنية التوجة OOP كيف تجعلها تعمل جميعها معا لتتكون لعبتنا الصغيرة ... فأتمنى من اي شخص يواجه اي صعوبة في فهم جزء معين او لديه اي اقتراح او مناقشة ان يضعها في وقت مبكر كي لا تتعقد المسائل خاصة وانني لم اضع خطة سير مبدئية للمشروع امام الجميع قبل البدأ.

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

اذا لم نجد مهتمين بوضع بعض الاقتراحات لن نكون مضطرين للانتظار كثيرا حتى لا نفقد حماسنا للموضوع فسننتقل سريعا للإصدار الذي يليه ونضيف نحن شوية ذكاء اصطناعي بسيط ثم اكثر فاكثر وهكذا .

تحياتي

السلام عليكم ورحمة الله وبركاته

rtaTanksWar - Version6.zip

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#17

السلام عليكم ورحمة الله وبركاته

اصدار على السريع بينما يقلب الشباب الاصدار السابق ويفكروا بإي اقتراحات محتملة فيمكن اضافة شيىء للترفية وهو صوت بسيط للإنفجار ... بشكل عام فالاصوات يمكن تشغيلها بأكثر من وسيلة ... قمت هنا بإضافة اول صوت لبرنامجنا وهو وصوت الانفجار الى موارد البرنامج Resourses و اضفت فئة بسيطة بإسم Sounds فيها وظيفة مشتركة Shared Sub لتشغيل صوت الانفجار عن طريق استدعاء الامر Play التابع لـ My.Computer.Audio.

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

تحياتي

السلام عليكم ورحمة الله وبركاته

rtaTanksWar - Version7.zip

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#18

السلام عليكم ورحمة الله وبركاته

والان بما ان الاقترحات كانت كثيرة جدا ( وصلت حتى الـ Zero اقتراح ...ولأن الصفر اقتراح هو عدد كبير فسوف آخذ وقت طويل في فرزها) ... وحتى انهي الفرز سنضع الاصدار التالي والذي يضيف معيار تحسين بسيط جدا لحركة دبابتنا وهو عدم العودة للخلف إلا للضرورة.

لو لاحظت فستجد ان الدبابة في الاصدارين السابقين تتحرك بشكل جنوني فبينما تسير الى الامام ستجدها فجأة قد رجعت الى الخلف نظرا لعشوائية الاختيار ... ويسبب ذلك حركة مهزوزة غير مستقرة ... ولهذا فسوف نقوم بإستثناء الاتجاه العكسي من قائمة اختيارنا ... ولمعرفة الاتجاة العكسي يمكن عمل شيء شبيه بالتالي :

Dim Opposite As TankDirections

Select Case Me.Tank.Direction 
 Case TankDirections.Left
     Opposite = TankDirection.Right
 Case TankDirections.Right
     Opposite = TankDirection.Left
 Case TankDirections.Up
     Opposite = TankDirection.Down
 Case TankDirections.Down
     Opposite = TankDirection.Up
End Select

وبالتالي فإن المتغير Opposite سيحتوي في الاخير على الاتجاه المعاكس للإتجاه الحالي لدبابتنا.

وعليه فان التعديل الوحيد في هذا الاصدار هو في الوظيفة MoveTank :

    Public Sub MoveTank()
        Dim Ways As List(Of TankDirections) = Me.Tank.GetPossibleWays()
        Dim Index As Integer = -1

        If Ways.Count = 1 Then 
            Me.Tank.MoveTo(Ways(0))
        ElseIf Ways.Count > 1 Then 
                      Dim Opposite As TankDirections = (Me.Tank.Direction + 2) Mod 4
            Ways.Remove(Opposite)

            Index = GameBoard.Rand.Next(Ways.Count)
            Me.Tank.MoveTo(Ways(Index))
        End If

    End Sub

ولا تسألني عن السطر

Dim Opposite As TankDirections = (Me.Tank.Direction + 2) Mod 4

فهو يساوي الكود الذي تحدتث عنه منذ قليل ولكنه اكثر اختصارا فلا تشغل بالك فيه.

اتمنى تجربة الاصدار الثامن الحالي ولايزال باب الاقترحات مفتوح فلعلنا نزيد عن الصفر اقتراح الذي وصلوني حتى الان.

تحياتي

السلام عليكم ورحمة الله وبركاته

rtaTanksWar - Version8.zip

تم تعديل هذه المشاركة بواسطة رغيد الطيب في 30 ديسمبر 2009 في 00:13

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#19

جميل جدا أستاذى رغيد في انتضار ابداعاتك

#20

السلام عليكم ورحمة الله وبركاته

الاصدار التاسع ! .... يحتوي على مجموعة من التعديلات ... في عدة فئات .

تعديلات الفئة LocalPlayer

وهي اضافة تايمر داخلي الى الفئة حتى يكون بامكان المركبة التي تقودها من السير اثناء استمرارك بالضغط على احد ازرار الاسهم ولن تكون مضطرا للضغط المتكرر على الاسهم للحركة ...

تعديلات الفئة Block

قمت بإضافة الوظيفة GetPathTo وهي وظيفة تقوم بارجاع مصفوفة من المربعات Blocks على يمين او يسار او الى اعلى او اسفل المربع الحالي ... مثلا :

Dim Path As List(Of Block)

Path = GetPathTo(Left)

فان المتغير Path سيحتوي على مصفوفة بكل الـ Blocks الى يسار الـ Block الحالي وحتى اقرب حائط او نهاية حدود اللعبة.

هذه الوظيفة ستفيدنا لاحقا بإذن الله تعالى.

التعديلات على الفئة Rocket

تعديل بسيط لجعل لون الصاروخ يتناسب مع المركبة التي تطلقه فالمركبة الزرقاء صاروخها ازرق والحمراء احمر .... فقط للتمييز بينها.

التعديلات على الفئة ComputerPlayer

نحن نعلم مسبقا ان دبابة الكمبيوتر اصبح لديها القدرة على السير العشوائي مع عدم الرجوع الى الوراء إلا في حالات الضرورة.

وفي هذا الاصدار لن نقوم بزيادة ذكائها وانما بتزويدها بالقليل من العدوانية بحيث تقوم بفحص جميع الاتجهات بعد التحرك الى الموقع الجديد لتتأكد من وجود اي هذف في مجال رؤيتها .... وفي حال وجود اي دبابة من دباباتنا (نحن او احد اللاعبين في الشبكة) فستقوم بالاطلاق عليها مباشرة.

لتحقيق ذلك فقد اضفت الوظيفة المسماة GetEnmyPosition والتي تستقبل مصفوفة من الـ Blocks وهي Path معين وتعيد موقع دبابة العدو في هذا المسار Path وتعيد القيمة 0 في حال خلو جميع مربعات المسار المدخل من الدبابات .... وشفرة هذه الوظيفة كالتالي :

    Private Function GetEnmyPosition(ByVal Path As List(Of Block)) As Integer
        Dim pos As Integer = 0

        For Each Blk As Block In Path
            Dim Tnk As Tank = Blk.GetTank()

            If (Tnk IsNot Nothing) AndAlso (Tnk.Player IsNot Nothing) AndAlso (Tnk.Player.ToString <> "Computer") Then
                Return pos
            Else
                pos += 1
            End If
        Next
        Return 0
    End Function

وبالتالي فان الوظيفة الاساسية في الفئة ComputerPlayer والمسئولة عن الحركة وهي MoveTank قد تم تغيير شفرتها قليلا لتصبح :

    Public Sub MoveTank()
        Dim Ways As List(Of TankDirections) = Me.Tank.GetPossibleWays()
        Dim Index As Integer = -1

        If Ways.Count = 1 Then ' Only one way.
            Me.Tank.MoveTo(Ways(0))
        ElseIf Ways.Count > 1 Then ' More than way, so avoid going back.

            ' Remove the opposite direction from our list.
            Dim Opposite As TankDirections = (Me.Tank.Direction + 2) Mod 4
            Ways.Remove(Opposite)

            Index = GameBoard.Rand.Next(Ways.Count)
            Me.Tank.MoveTo(Ways(Index))
        End If

        ' Shot any tank belongs to the enmy on the range.
        For I = TankDirections.Left To TankDirections.Down
            Dim path As List(Of Block) = Me.Tank.Block.GetPathTo(I)
            Dim pos As Integer = Me.GetEnmyPosition(path)

            If pos > 0 Then
                Me.Tank.Direction = I
                Me.Tank.Fire()
            End If
        Next

    End Sub

لاحظ ان الوظيفة تقوم اولا بمعرفة جميع الطرقات المتاحة امامنا عن طريق GetPossibleWays ثم تختار احدها وتنتقل اليه

ثم تقوم بإستخدام الوظيفة GetPathTo التابعة للفئة Block لجلب المسارات الاربعة لكل الجهات انطلاقا من الموقع الحالي

واخيرا تفحص كل مسار من هذه المسارات لمعرفة موقع اي دبابة للعدو فيه عن طريق الوظيفة GetEnmyPosition ... وإن وجدت اي واحدة على احد هذه المسارات فإنها تقوم بإستدعاء الوظيفة Fire لإطلاق صاروخ عليه.

------------------------------------------------------------

في الاصدار التالي ... سنجعل الدبابة اكثر ذكاء بحيث تبحث عن المواقع التي يمكنها ان تهاجمنا منها.

كما سنحد من امكانية الاطلاق اللامحدود للصواريخ في نفس الاتجاه.

تحياتي

السلام عليكم ورحمة الله وبركاته

rtaTanksWar - Version9.zip

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#21

بسم الله الرحمن الرحيم

اسلوب رائع ومتميز وجديد قلما نجد مثله في ثنايا المواقع والمنديات العربية، يجمع بين التعلم والمتعة والتشويق

تابع بارك الله فيك، سآتي لك ببعض الاقتراحات بعد دراسة المشروع بالكامل بإذن الله

اللهم لا سهل الا ماجعلته سهلا، وانت تجعل الصعب ان شئت سهلا

83_45a7168be2ddb.jpg

#22

السلام عليكم ورحمة الله وبركاته

وصلنا بعون الله تعالى الى الاصدار العاشر وهو اصدار بلغت فيه قوة المركبة المقاتلة

التابعة للكمبيوتر مستوى عالي من العدوانية (ربما اعلى من المطلوب)

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

وفي هذا الاصدار بلغت دبابة الكمبيوتر حدا قد يجده البعض سهلا و آخرون متوسطا فصعبا جدا (خاصة قليلي الخبرة في اللالعاب امثالي) .... وسعيا خلف ارضاء الجمهور تضع شركات الالعاب خيارات تحديد مستوى صعوبة اللعبة امام المستخدم.

على العموم لن نستبق الاحداث فقد نعمل مثلهم !! ... دعنا الان نرى التعديلات الموجودة في الاصدار العاشر.

اول التعديلات هو على الفئة Tank حيث قمنا بإضافة خاصية جديدة هي CanShoot والتي تستخدم الوظيفة الجديدة GetNearestRocket التي تعيد موقع اقرب صاروخ من (صواريخنا) في مسار سير الدبابة.

وتعيد الخاصية CanShoot القيمة True في حال عدم وجود اي صاروخ في المجال و False في حالة وجود صاروخ.

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

حيث ان الدبابة في الاصدارات السابقة بامكانها اطلاق سيل من الصورايخ ... وهو شيء غير منطقي اقرب الى الرصاص منه الى الصواريخ ... لهذا فيمكن استخدام هذه الدالة للتروي حتى ينفجر الصاروخ السابق ثم نكون قادرين على ضرب صاروخ آخر او على الاقل يكون هناك فرق مناسب بين اطلاق الصواريخ.

تعديلات الفئة ComputerPlayer

حصلت هذه الفئة على النصيب الاكبر من التعديلات ... ولأن الوظيفة الاساسية التي تعطي الكمبيوتر القدرة على التفكير و التحرك هي MoveTank وشفرتها قد بدأت تطول نسبيا ... فقسمتها الى دوال اصغر كل واحدة تقوم بعمل معين بسيط حتى يسهل علي شرح عملها ....وشفرة الدالة MoveTank اصبحت كالتالي :

    Public Sub MoveTank()
        Dim Ways As List(Of TankDirections) = Me.Tank.GetPossibleWays()
        Dim TargetWays As List(Of TankDirections) = Me.GetTargetWays(Ways)

        If TargetWays.Count > 0 Then
            Me.MoveRandomly(TargetWays)
            Me.ShootAllTargets()
        Else
            Me.MoveRandomly(Ways)
        End If
    End Sub

في السطر الاول تجلب الدالة GetPossibleWays قائمة بجيمع الاتجهات التي يمكن للدبابة ان تنتقل اليها وتخزنها في المتغير Ways.

في السطر الثاني تقوم الدالة الجديدة التي اضفتها الى الفئة ComputerPlayer بإسم GetTargetWays بارجاع قائمة بالطرق التي اذا انتقلت اليها الدبابة فسيكون لديها اهداف يمكن ان تصيبها (دبابات للعدو تحت مجال نيرانها) ... وتعيد الناتج الى المتغير TargetWays

بعد تنفيذ هذين السطرين سيكون لدينا متغيرين هما:

Ways : ويحتوي على كل الاتجهات المتاحة للحركة

TargetWays : ويحتوي على الاتجهات التي يمكننا فيها ان نواجه العدو ويصبح هدفا لنا.

بعدها نقوم بفحص المتغير TargetWays للتأكد من الطرق التي تحتوي على اهداف فإن كان لدينا ايا منها فاننا نفضل الانتقال الى ايا منها و ذلك بإستدعاء الدالة MoveRandomly والتي تقوم بالاختيار العشوائي لأحد الطرقات التي تحتوي على اهداف.

ثم يتم التسديد على كل الاهداف التي في مجال رؤية دبابتنا عن طريق الدالة الجديدة ShootAllTargets.

اما في حالة عدم وجود اي طرق فيها اهداف فيتم حينها الاختيار العشوائي من بين جميع الطرقات المتاحة بغض النظر عن احتوائها على اهداف وذلك بتمريير المتغير Ways الى الدالة MoveRandomly

لن اخوض في تفاصيل الدوال الجديدة للإختصار ويسرني توضيح اي غموض يراه احد الاخوة هنا لاحقا بإذن الله تعالى

تحياتي

السلام عليكم ورحمة الله وبركاته

rtaTanksWar - Version10.zip

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#23

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

اولا في الواقع قد اتغييب ليومين او ثلاثة لظروف صحية خارجة عن الارداة ... ولكراهة لإطالة الانتظار وعلى رغم من ان الاصدار الحالي (الحادي عشر ) غير جاهز بعد من ناحية التصميم والتكويد.

غير اني سوف اضعه هنا كي يتسنى لكم الاطلاع على نسخة مبكرة منه (قد تحتوي على بعض الاخطاء .. التي سنقوم بترقيعها لاحقا بإذن الله تعالى).

تكمن التعديلات في اضافة واجهات جديدة للعبة ... و بعض التعديلات الاولية للتجربة على الفئات Rocket و Tank.

على العموم سيجد الذي سيجرب اللعبة اشياء كثيرة بحاجة الى تعديل وهو ما سنستمتع به سويا بإذن الله تعالى.. مثلا عند بداية اللعبة يتم اختيار مواقع عشوائية للاعبين وقد يظهر لاعب بجانب الاخر مباشرة وتنتهي اللعبة قبل ان تبدأ

كما سيجد البعض ان سياق اللعب سريع جدا .... كما ان اللعبة حتى الان تخفي الدبابة المتفجرة دون ان تنهي اللعبة وذلك لأن الكود لم ينتهي بعد حتى الان وانما استبق وضعه هنا للتسلية فحسب.

من ممكن ايضا ان يلاحظ الشخص بأن اسلوب الطلقة الواحدة للفوز قد لايكون مناسبا فمن المفضل جعل الدبابة تحتوي على طاقة معينة تفقدها تدريجيا عند تعرضها للضرب على يد صواريخ الدبابات المعادية بحيث تنفجر الدبابة عند نفاذ قوتها Power نتيجة للضرب المتكرر.

على العموم لن نستبق الامور وسأكتفي بوضع الكود المبدئي القابل للتعديل هنا لحين عودتي بإذن الله تعالى.

السلام عليكم ورحمة الله وبركاته

rtaTanksWar - Version11.zip

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#24

بسم الله السميع العليم

بما اننا على اشراف الانتهاء من المرحلة الاولى .... وهي تصميم اللعبة للفرد الواحد اي انت مقابل الكمبيوتر ... وجب التمهيد للإنتقال الى المرحلة الثانية وهي جعل اللعبة قابلة للعب في شبكة بين اكثر من كمبيوتر.

لهذا الغرض نحن بحاجة الى شيئين اولا ادوات للتعامل مع الشبكات (ارسال و استلام) و ثانيا محرك اللعاب بسيط جدا يدير عمليات اللعب المشترك.

للغرض الاول افتتحت مشروع مستقل بإسم : تطوير اداة شبيهة بالوينسوك للتراسل عبر الشبكة في الدوت نت ... على الرابط التالي :

/index.php?showtopic=212394

وفقنا الله تعالى الى مايحب ويرضى.

السلام عليكم ورحمة الله وبركاته

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#25

الفكره ممتازه

ومجهود رائع

جزاك الله كل خير

مواضيع مشابهة