السبت، 18 مايو 2013

بناء الألعاب البسيطة بلغة Vb.net

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

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

* لو نلاحظ ان الجهة العليا اليسرى من النافذة تكون قيم 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

لعرض قيم  (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 Code
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
في زر (لعبة جديدة) نكتب الكود التالي الذي يقوم بعرض صورة موحدة في جميع الصناديق .وكذالك تحديد أي الصناديق ستكون فيها الخيارات الصحيحة
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
صور من اللعبة إثناء وقت اللعب


ليست هناك تعليقات: