• 0

سؤال

  تبرمج الالعاب اساسا بتقنية اسمها XNA دعمتها مايروسوفت لبرمجة الالعاب بلغة #C وبنفس طريقتنا بكتابة Code ولكي تعمل لدينا نقوم بتنزيلها وتنصيبها وستضاف تلقائيا الى البرنامج VS.NET .وهي موضوع طويل ساتطرق عليه بوقت لاحق ,وهنا ساشرح عن برمجة العاب لكن بلغة VB.NET وكيفية تصميم لعبة بسيطة وكيف نحرك الأدوات...


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

iamgelocation.png

* لو نلاحظ ان الجهة العليا اليسرى من النافذة تكون قيم x,y للنافذة هي صفر وكذالك قيم x,y لأي اداة على النافذة تكون الجهة العليا اليسرى لهذه الأداة قيم x,y الخاصة بها صفر . وقيم X,Y تمثل جميع  النقاط داخل كل اداة على المحورين ممتد بالطول والعرض

* وكل اداة لها عرض Width يمثل اكبر قيمة X ولها ارتفاع Heightيمثل اكبر قيمة Y 

* وكذالك كل اداة على النافذة لها موقع نحدده من left يمثل ابتعاد الاداة عن نهاية الجهة اليسرى من النافذة كلما زودنا قيمته اتجهت الاداة الى الجة اليمنى من النافذة واذا نقصناه تتحرك الى الجهة اليسرى من النافذة . و,Top  يمثل ابتعاد الاداة عن نهاية الجهة العليا من النافذة كلما زودنا تتجه الاداة الى الجهة السفلى من النافذة واذا نقصناه تتجه الى الجهة العليا

لو أردنا تحريك حاضنة الصور إلى يمين النافذة باستمرار فقط  ندرج Timer ونكتب فيه الكود التالي ونشغله

 

VB.net CodePictureBox1.Left = PictureBox1.Left + 1

 

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

 

VB.net CodePictureBox1.Top = PictureBox1.Top - 1

 

تحريك الصورة المعروضة داخل حاضنة الصور   PictureBoxبشكل أفقي فقط  الى مكان وجود مؤشر Mouse على النافذة وكذالك عرض قيم موقع مؤشر Mouse وهي ( x , y) على كل كائن داخل النافذة
 

 

game11.png


لتحريك  موقع أداة PictureBox1  الى اليمين اواليسار حسب مكان وجود مؤشر Mouse على النافذة نجعل  خاصية Left  الخاصة بأداة  PictureBox1 مساوية  لموقع Mouse على النافذة e.x . نكتب الكود التالي في حدث MouseMove  الخاص بالنافذة Form  حتى يتنفذ عند تحريك مؤشر Mouse

 

 

 

VB.net CodePrivate Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMoveMe.Text = "x=" & e.X & " y=" & e.YPictureBox1.Left = e.XEnd Sub

 

لعرض قيم  (x ,y ) الخاصة بأداة  PictureBox1 على اسم النافذة نكتب الكود التالي  في حدث MouseMove  الخاص بأداة PictureBox حتى عندما يتحرك Mouse عليها  تعرض قيمها

 

VB.net CodePrivate Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMoveMe.Text = "xp=" & e.X & " yp=" & e.YEnd Sub

 

كل أداة (كائن) داخل المشروع لها قيم    ( x , y) تبدأ  (0,0)  وتنتهي بطول وعرض الأداة



نقل كائن إلى موقع تم تحديده: تفيد هذه الطريقة في العاب ترتيب القطع
 

game12.png

 


•    لتحريك موقع الكائن PictureBox كله في المحورين  الى موقع ضغط  بالمؤشر  Mouse  على النافذة بالبداية نحفظ موقع الضغط  Mouse  على النافذة  في متغيرات عامة معرفة على كل المشروع

 

VB.net CodeDim pl As IntegerDim pT As IntegerPrivate Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClickpl = e.XpT = e.YEnd Sub

 


وثم عند الظغط على كل  PictureBox  في حدث MouseClick الخاص بها  نجعلها  تنتقل  الى الموقع المحفوظ ؟هنا نقلنا PictureBox1 الى موقع  الجديد. وكذالك البقية بنفس الطريقة.

 

VB.net CodePictureBox1.Left = plPictureBox1.Top = pT

 

شاشة تنفيذ بعد ترتيب الصور
 

game13.png


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

game14.png

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

 

VB.net CodeDim selected(3) As IntegerDim NumberIsFound As Boolean = FalseDim winCount As Integer = 0

 


 

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

 

VB.net CodePrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickOn Error Resume NextLabel1.Text = "رجاء انتضر"' make spongimage to all for new gameFor Each btn As PictureBox In Me.Controlsbtn.BackgroundImage = My.Resources.spongNext'تصفير عداد الربحwinCount = 0'نكون عداد للمصفوفةDim countselected As Integer = 0' make count to number of chosseDim Numberseleted As Integer = 0While Numberseleted < 3Dim RandomClass As New Random()Dim RandomNumber As Integer = RandomClass.Next(0, 8)NumberIsFound = FalseFor j = 0 To 2If RandomNumber = selected(j) ThenNumberIsFound = TrueEnd IfNextIf NumberIsFound = False Thenselected(countselected) = RandomNumbercountselected = countselected + 1Numberseleted = Numberseleted + 1End IfEnd WhileLabel1.Text = " ابدء اللعب بالضغط على الصور وقلبها"End Sub

 

ونكون  الدالة التالية التي نستدعيها عند ضغط المستخدم  على كل صندوق ليبين له ما موجود تحت الصندوق

 

VB.net Code Sub picSelected(ByVal picseleced As Integer, ByRef picName As PictureBox)NumberIsFound = FalseFor j = 0 To 2If picseleced = selected(j) ThenNumberIsFound = TrueEnd IfNextIf NumberIsFound = True ThenpicName.BackgroundImage = My.Resources.Smile.ToBitmapwinCount = winCount + 1If winCount = 3 ThenMsgBox("مبروك لقد ربحت اللعبة")End IfElsepicName.BackgroundImage = My.Resources.Love.ToBitmapLabel1.Text = "لقد خسرت اللعبة"End IfEnd Sub

 

 

وتحت كل صورة نستدعي الدالة السابقة ونرسل لها رقم مخصص للصورة وأداة الصورة لتغير صورتها

 

VB.net CodePrivate Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.ClickpicSelected(0, PictureBox1)End SubPrivate Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox2.ClickpicSelected(1, PictureBox2)End SubPrivate Sub PictureBox3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox3.ClickpicSelected(2, PictureBox3)End SubPrivate Sub PictureBox4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox4.ClickpicSelected(3, PictureBox4)End SubPrivate Sub PictureBox5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox5.ClickpicSelected(4, PictureBox5)End SubPrivate Sub PictureBox6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox6.ClickpicSelected(5, PictureBox6)End SubPrivate Sub PictureBox7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox7.ClickpicSelected(6, PictureBox7)End SubPrivate Sub PictureBox8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox8.ClickpicSelected(7, PictureBox8)End SubPrivate Sub PictureBox9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox9.ClickpicSelected(8, PictureBox9)End Sub

 



 

صور من اللعبة إثناء وقت اللعب

game15.png

 

 

مدونتي

http://hussienahmmed.blogspot.com/

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

2 إجابة على هذا السؤال .

  • 0

شكراً جزيلاً ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا جزيلا لعبة جميلة

هل ممكن رفع هده اللعبة جزاك الله خيرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .