تبرمج الالعاب اساسا بتقنية اسمها XNA دعمتها مايروسوفت لبرمجة الالعاب بلغة #C وبنفس طريقتنا بكتابة Code ولكي تعمل لدينا نقوم بتنزيلها وتنصيبها وستضاف تلقائيا الى البرنامج VS.NET .وهي موضوع طويل ساتطرق عليه بوقت لاحق ,وهنا ساشرح عن برمجة العاب لكن بلغة VB.NET وكيفية تصميم لعبة بسيطة وكيف نحرك الأدوات...
تعتمد الألعاب بشكل كبير على خدع المستخدم وتوهميه في الصورة مثلا لعبة سباق السيارات .السيارات لا تسير لان السباق طويل وطول النافذة محدودة بعرض شاشة الحاسوب لذالك نوقف السيارة ونحرك الشارع فيعتقد المستخدم أن السيارة هي من يتحرك لكن في الحقيقة الأرضية هي من تتحرك وكذالك العاب القتال العدو هو من يأتيك لكن يحسسك انك أنت من يتحرك عليه. والألعاب الرسومية تعتمد على مصممين الكرفكس بشكل اكبر بكثير من اعتمادها على المبرمجين لأنها تحتاج إلى تصميم أماكن وصور لمختلف الأماكن والحركات . وايظا تصميم البيئة التفاعلية وجعل المستخدم يتفاعل مع اللعبة من أهم أساسيات برمجة الألعاب؟
مواقع الأدوات في النافذة وطرق تحريكها (ركز جيدا وافهم كيفية تحديد المواقع)
* لو نلاحظ ان الجهة العليا اليسرى من النافذة تكون قيم x,y للنافذة هي صفر وكذالك قيم x,y لأي اداة على النافذة تكون الجهة العليا اليسرى لهذه الأداة قيم x,y الخاصة بها صفر . وقيم X,Y تمثل جميع النقاط داخل كل اداة على المحورين ممتد بالطول والعرض
* وكل اداة لها عرض Width يمثل اكبر قيمة X ولها ارتفاع Heightيمثل اكبر قيمة Y
* وكذالك كل اداة على النافذة لها موقع نحدده من left يمثل ابتعاد الاداة عن نهاية الجهة اليسرى من النافذة كلما زودنا قيمته اتجهت الاداة الى الجة اليمنى من النافذة واذا نقصناه تتحرك الى الجهة اليسرى من النافذة . و,Top يمثل ابتعاد الاداة عن نهاية الجهة العليا من النافذة كلما زودنا تتجه الاداة الى الجهة السفلى من النافذة واذا نقصناه تتجه الى الجهة العليا
لو أردنا تحريك حاضنة الصور إلى يمين النافذة باستمرار فقط ندرج Timer ونكتب فيه الكود التالي ونشغله
لتحريك موقع أداة PictureBox1 الى اليمين اواليسار حسب مكان وجود مؤشر Mouse على النافذة نجعل خاصية Left الخاصة بأداة PictureBox1 مساوية لموقع Mouse على النافذة e.x . نكتب الكود التالي في حدث MouseMove الخاص بالنافذة Form حتى يتنفذ عند تحريك مؤشر Mouse
لعرض قيم (x ,y ) الخاصة بأداة PictureBox1 على اسم النافذة نكتب الكود التالي في حدث MouseMove الخاص بأداة PictureBox حتى عندما يتحرك Mouse عليها تعرض قيمها
• لتحريك موقع الكائن PictureBox كله في المحورين الى موقع ضغط بالمؤشر Mouse على النافذة بالبداية نحفظ موقع الضغط Mouse على النافذة في متغيرات عامة معرفة على كل المشروع
وثم عند الظغط على كل PictureBox في حدث MouseClick الخاص بها نجعلها تنتقل الى الموقع المحفوظ ؟هنا نقلنا PictureBox1 الى موقع الجديد. وكذالك البقية بنفس الطريقة.
لعبة الحظ : هذه اللعبة نقلب أوراق (مربعات ) مكونة من تسعة وتوجد تحت ثلاث أوراق صورة الابتسامة ان استطعنا إخراجها بالتتابع دون ان تظهر لنا إحدى الصور الحمراء (مطبات) نكون فائزين وإلا نخسر علما ان هذه الرسومات( الابتسامة) في كل مرة ستختفي تحت مربع مختلف. نكون مشروع جديد كما في الشكل التالي ونضف الصورثلاث الى Resource
بالبداية نعرف المتغيرات التالية في منطقة التعريفات العامة حيث المصفوفة نخزن فيها مكان وجود المربعات التي ستظهر فيها الابتسامة
تعتمد الألعاب بشكل كبير على خدع المستخدم وتوهميه في الصورة مثلا لعبة سباق السيارات .السيارات لا تسير لان السباق طويل وطول النافذة محدودة بعرض شاشة الحاسوب لذالك نوقف السيارة ونحرك الشارع فيعتقد المستخدم أن السيارة هي من يتحرك لكن في الحقيقة الأرضية هي من تتحرك وكذالك العاب القتال العدو هو من يأتيك لكن يحسسك انك أنت من يتحرك عليه. والألعاب الرسومية تعتمد على مصممين الكرفكس بشكل اكبر بكثير من اعتمادها على المبرمجين لأنها تحتاج إلى تصميم أماكن وصور لمختلف الأماكن والحركات . وايظا تصميم البيئة التفاعلية وجعل المستخدم يتفاعل مع اللعبة من أهم أساسيات برمجة الألعاب؟
مواقع الأدوات في النافذة وطرق تحريكها (ركز جيدا وافهم كيفية تحديد المواقع)
* لو نلاحظ ان الجهة العليا اليسرى من النافذة تكون قيم x,y للنافذة هي صفر وكذالك قيم x,y لأي اداة على النافذة تكون الجهة العليا اليسرى لهذه الأداة قيم x,y الخاصة بها صفر . وقيم X,Y تمثل جميع النقاط داخل كل اداة على المحورين ممتد بالطول والعرض
* وكل اداة لها عرض Width يمثل اكبر قيمة X ولها ارتفاع Heightيمثل اكبر قيمة Y
* وكذالك كل اداة على النافذة لها موقع نحدده من left يمثل ابتعاد الاداة عن نهاية الجهة اليسرى من النافذة كلما زودنا قيمته اتجهت الاداة الى الجة اليمنى من النافذة واذا نقصناه تتحرك الى الجهة اليسرى من النافذة . و,Top يمثل ابتعاد الاداة عن نهاية الجهة العليا من النافذة كلما زودنا تتجه الاداة الى الجهة السفلى من النافذة واذا نقصناه تتجه الى الجهة العليا
لو أردنا تحريك حاضنة الصور إلى يمين النافذة باستمرار فقط ندرج Timer ونكتب فيه الكود التالي ونشغله
VB.net Code
PictureBox1.Left = PictureBox1.Left + 1
لو أردنا تحريك حاضنة الصور إلى الأعلى النافذة باستمرار فقط ندرج Timer ونكتب فيه الكود التالي ونشغله
VB.net Code
PictureBox1.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
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
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
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 Code
PictureBox1.Left = pl
PictureBox1.Top = pT
PictureBox1.Left = pl
PictureBox1.Top = pT
شاشة تنفيذ بعد ترتيب الصور
لعبة الحظ : هذه اللعبة نقلب أوراق (مربعات ) مكونة من تسعة وتوجد تحت ثلاث أوراق صورة الابتسامة ان استطعنا إخراجها بالتتابع دون ان تظهر لنا إحدى الصور الحمراء (مطبات) نكون فائزين وإلا نخسر علما ان هذه الرسومات( الابتسامة) في كل مرة ستختفي تحت مربع مختلف. نكون مشروع جديد كما في الشكل التالي ونضف الصورثلاث الى Resource
بالبداية نعرف المتغيرات التالية في منطقة التعريفات العامة حيث المصفوفة نخزن فيها مكان وجود المربعات التي ستظهر فيها الابتسامة
VB.net Code
Dim selected(3) As Integer
Dim NumberIsFound As Boolean = False
Dim winCount As Integer = 0
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
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
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
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
صور من اللعبة إثناء وقت اللعب
ليست هناك تعليقات:
إرسال تعليق