تبرمج الالعاب اساسا بتقنية اسمها XNA دعمتها مايروسوفت لبرمجة الالعاب بلغة #C وبنفس طريقتنا بكتابة Code ولكي تعمل لدينا نقوم بتنزيلها وتنصيبها وستضاف تلقائيا الى البرنامج VS.NET .وهي موضوع طويل ساتطرق عليه بوقت لاحق ,وهنا ساشرح عن برمجة العاب لكن بلغة VB.NET وكيفية تصميم لعبة بسيطة وكيف نحرك الأدوات...
تعتمد الألعاب بشكل كبير على خدع المستخدم وتوهميه في الصورة مثلا لعبة سباق السيارات .السيارات لا تسير لان السباق طويل وطول النافذة محدودة بعرض شاشة الحاسوب لذالك نوقف السيارة ونحرك الشارع فيعتقد المستخدم أن السيارة هي من يتحرك لكن في الحقيقة الأرضية هي من تتحرك وكذالك العاب القتال العدو هو من يأتيك لكن يحسسك انك أنت من يتحرك عليه. والألعاب الرسومية تعتمد على مصممين الكرفكس بشكل اكبر بكثير من اعتمادها على المبرمجين لأنها تحتاج إلى تصميم أماكن وصور لمختلف الأماكن والحركات . وايظا تصميم البيئة التفاعلية وجعل المستخدم يتفاعل مع اللعبة من أهم أساسيات برمجة الألعاب؟
مواقع الأدوات في النافذة وطرق تحريكها (ركز جيدا وافهم كيفية تحديد المواقع)
* لو نلاحظ ان الجهة العليا اليسرى من النافذة تكون قيم 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) على كل كائن داخل النافذة
لتحريك موقع أداة PictureBox1 الى اليمين اواليسار حسب مكان وجود مؤشر Mouse على النافذة نجعل خاصية Left الخاصة بأداة PictureBox1 مساوية لموقع Mouse على النافذة e.x . نكتب الكود التالي في حدث MouseMove الخاص بالنافذة Form حتى يتنفذ عند تحريك مؤشر Mouse
VB.net Code Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove Me.Text = "x=" & e.X & " y=" & e.Y PictureBox1.Left = e.X End Sub
لعرض قيم (x ,y ) الخاصة بأداة PictureBox1 على اسم النافذة نكتب الكود التالي في حدث MouseMove الخاص بأداة PictureBox حتى عندما يتحرك Mouse عليها تعرض قيمها
VB.net Code Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove Me.Text = "xp=" & e.X & " yp=" & e.Y End Sub
كل أداة (كائن) داخل المشروع لها قيم ( x , y) تبدأ (0,0) وتنتهي بطول وعرض الأداة
نقل كائن إلى موقع تم تحديده: تفيد هذه الطريقة في العاب ترتيب القطع
• لتحريك موقع الكائن PictureBox كله في المحورين الى موقع ضغط بالمؤشر Mouse على النافذة بالبداية نحفظ موقع الضغط Mouse على النافذة في متغيرات عامة معرفة على كل المشروع
VB.net Code Dim pl As Integer Dim pT As Integer Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick pl = e.X pT = e.Y End Sub
وثم عند الظغط على كل PictureBox في حدث MouseClick الخاص بها نجعلها تنتقل الى الموقع المحفوظ ؟هنا نقلنا PictureBox1 الى موقع الجديد. وكذالك البقية بنفس الطريقة.
VB.net CodePictureBox1.Left = plPictureBox1.Top = pT
شاشة تنفيذ بعد ترتيب الصور
لعبة الحظ : هذه اللعبة نقلب أوراق (مربعات ) مكونة من تسعة وتوجد تحت ثلاث أوراق صورة الابتسامة ان استطعنا إخراجها بالتتابع دون ان تظهر لنا إحدى الصور الحمراء (مطبات) نكون فائزين وإلا نخسر علما ان هذه الرسومات( الابتسامة) في كل مرة ستختفي تحت مربع مختلف. نكون مشروع جديد كما في الشكل التالي

بالبداية نعرف المتغيرات التالية في منطقة التعريفات العامة حيث المصفوفة نخزن فيها مكان وجود المربعات التي ستظهر فيها الابتسامة
VB.net Code Dim selected(3) As Integer Dim NumberIsFound As Boolean = False Dim winCount As Integer = 0
في زر (لعبة جديدة) نكتب الكود التالي الذي يقوم بعرض صورة موحدة في جميع الصناديق .وكذالك تحديد أي الصناديق ستكون فيها الخيارات الصحيحة
VB.net Code Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click On Error Resume Next Label1.Text = "رجاء انتضر" ' make spongimage to all for new game For Each btn As PictureBox In Me.Controls btn.BackgroundImage = My.Resources.spong Next 'تصفير عداد الربح winCount = 0 'نكون عداد للمصفوفة Dim countselected As Integer = 0 ' make count to number of chosse Dim Numberseleted As Integer = 0 While Numberseleted < 3 Dim RandomClass As New Random() Dim RandomNumber As Integer = RandomClass.Next(0, 8) NumberIsFound = False For j = 0 To 2 If RandomNumber = selected(j) Then NumberIsFound = True End If Next If NumberIsFound = False Then selected(countselected) = RandomNumber countselected = countselected + 1 Numberseleted = Numberseleted + 1 End If End While Label1.Text = " ابدء اللعب بالضغط على الصور وقلبها" End Sub
ونكون الدالة التالية التي نستدعيها عند ضغط المستخدم على كل صندوق ليبين له ما موجود تحت الصندوق
VB.net Code
Sub picSelected(ByVal picseleced As Integer, ByRef picName As PictureBox)
NumberIsFound = False
For j = 0 To 2
If picseleced = selected(j) Then
NumberIsFound = True
End If
Next
If NumberIsFound = True Then
picName.BackgroundImage = My.Resources.Smile.ToBitmap
winCount = winCount + 1
If winCount = 3 Then
MsgBox("مبروك لقد ربحت اللعبة")
End If
Else
picName.BackgroundImage = My.Resources.Love.ToBitmap
Label1.Text = "لقد خسرت اللعبة"
End If
End Sub
وتحت كل صورة نستدعي الدالة السابقة ونرسل لها رقم مخصص للصورة وأداة الصورة لتغير صورتها
VB.net Code Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click picSelected(0, PictureBox1) End Sub Private Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox2.Click picSelected(1, PictureBox2) End Sub Private Sub PictureBox3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox3.Click picSelected(2, PictureBox3) End Sub Private Sub PictureBox4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox4.Click picSelected(3, PictureBox4) End Sub Private Sub PictureBox5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox5.Click picSelected(4, PictureBox5) End Sub Private Sub PictureBox6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox6.Click picSelected(5, PictureBox6) End Sub Private Sub PictureBox7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox7.Click picSelected(6, PictureBox7) End Sub Private Sub PictureBox8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox8.Click picSelected(7, PictureBox8) End Sub Private Sub PictureBox9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox9.Click picSelected(8, PictureBox9) End Sub
صور من اللعبة إثناء وقت اللعب
مدونتي




