المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : شرح كيفية برمجة لعبة Tic Tac Toe بسيطة باستخدام فيجوال بيسك دوت نت VB.Net


eshrag.net
07-12-2010, 09:31 PM
بسم الله الرحمن الرحيم

فكرتي هنا لبرمجة لعبة Tic Tac Toe أو XO هو باستخدام الأزرار Buttons , حيث سيتم وضع 9 أزرار ويكون هناك لاعبين Players : 1 , 2 ويقوم البرنامج عند الضغط على زر معين بقراءه رقم اللاعب , فلو كان اللاعب الحالي هو 1 فانه سيقوم بتغيير نص الزر button text الى X وثم يغير قيمة اللاعب Players الى اللاعب الثاني 2 , والعكس صحيح لو كان الدور للاعب 2.

بدايةً , اعمل مشروع جديد وأضف فيه Buttons بعدد 9

http://img340.imageshack.us/img340/1913/70315925.png


وقم بتغيير أسماء الأزرار في الصف الأول من الزر الأيسر الى الأيمن , btn1 , btn 2 , btn3
بحيث تكون ارقامها كالآتي

http://img717.imageshack.us/img717/8900/22118834.png


سنقوم بعمل متغير عام نسميه Player وهو دور اللاعب سواء كان 1 او 2 , وفي بداية اللعبة سيكون دور اللاعب 1

واللاعب 1 هو X بينما 2 هو Y

كود PHP:
Dim Player As String



ضع الكود مباشرة تحت Public class form1

والآن سنضيف الكود الآتي الى الحدث Form1_Load

كود PHP:
Timer1.Start()
Player = "1"
Btn1.TabStop = False
Btn2.TabStop = False
Btn3.TabStop = False
Btn4.TabStop = False
Btn5.TabStop = False
Btn6.TabStop = False
Btn7.TabStop = False
Btn8.TabStop = False
Btn9.TabStop = False



بعد ذلك أضف تايمر الى المشروع Timer1

لاحظ في كود الحدث Form1_load بدأنا اولا عمل الساعة ثم عرفنا قيمة اللاعب بأنه 1 , وعطلنا ال TabStop لجميع الأزرار وهذا اختياري.

الآن اضف في كل زر الكود الآتي

كود PHP:
If Player = "1" Then
Btn1.Text = "X"
Btn1.Enabled = False
Player = "2"
--Player2--
ElseIf Player = "2" Then
Btn1.Text = "O"
Btn1.Enabled = False
Player = "1"
End If



لاحظ أننا عملنا شرط , لو اللاعب = 1 اعمل كذا ولو كان 2 اعمل كذا

يتم تغيير نص الزر الى X or O حسب اللاعب وثم قمنا يتعطيل الزر حتى لا يستطيع اللاعب التحكم فيه مرة اخرى وثم يتم تغيير قيمة متغير اللاعب الى الاعب الاخر...

أضف نفس الكود الى جميع الازرار مع تغيير رقم الزر من 1 الى 9 حسب الزر

الآن لو تشغل المشروع وتضغط على أي زر بتلاحظ أنه بكون X والزر الي بعده O والي بعده X وبعده O وهكذا...

ولاحظ أيضا انه سيتم تعطيل الزر

http://img88.imageshack.us/img88/4331/97952670.png

الآن باقي لنا نضيف الزر لتحديد هل اللاعب فاز او لا

توجه الى اخر سطر أي كود حيث توجد كلمة End sub واضف في سطر جديد الآتي

كود PHP:
Private Sub TheWinner()

End sub



وأضف فيه الكود الآتي

كود PHP:
If Btn1.Text = "X" And Btn2.Text = "X" And Btn3.Text = "X" Then
Timer1.Stop()
MsgBox("Player 1 is the winner")
ElseIf Btn1.Text = "O" And Btn2.Text = "O" And Btn3.Text = "O" Then
Timer1.Stop()
MsgBox("Player 2 is the winner")
ElseIf Btn1.Text = "O" And Btn5.Text = "O" And Btn9.Text = "O" Then
Timer1.Stop()
MsgBox("Player 2 is the winner")
ElseIf Btn1.Text = "X" And Btn5.Text = "X" And Btn9.Text = "X" Then
Timer1.Stop()
MsgBox("Player 1 is the winner")
ElseIf Btn1.Text = "X" And Btn4.Text = "X" And Btn7.Text = "X" Then
Timer1.Stop()
MsgBox("Player 1 is the winner")
ElseIf Btn1.Text = "O" And Btn4.Text = "O" And Btn7.Text = "O" Then
Timer1.Stop()
MsgBox("Player 2 is the winner")
ElseIf Btn3.Text = "X" And Btn6.Text = "X" And Btn9.Text = "X" Then
Timer1.Stop()
MsgBox("Player 1 is the winner")
ElseIf Btn3.Text = "O" And Btn6.Text = "O" And Btn9.Text = "O" Then
Timer1.Stop()
MsgBox("Player 2 is the winner")
ElseIf Btn3.Text = "X" And Btn5.Text = "X" And Btn7.Text = "X" Then
Timer1.Stop()
MsgBox("Player 1 is the winner")
ElseIf Btn3.Text = "O" And Btn5.Text = "O" And Btn7.Text = "O" Then
Timer1.Stop()
MsgBox("Player 2 is the winner")
ElseIf Btn2.Text = "X" And Btn5.Text = "X" And Btn8.Text = "X" Then
Timer1.Stop()
MsgBox("Player 1 is the winner")
ElseIf Btn2.Text = "O" And Btn5.Text = "O" And Btn8.Text = "O" Then
Timer1.Stop()
MsgBox("Player 2 is the winner")
ElseIf Btn7.Text = "O" And Btn8.Text = "O" And Btn9.Text = "O" Then
Timer1.Stop()
MsgBox("Player 2 is the winner")
ElseIf Btn7.Text = "X" And Btn8.Text = "X" And Btn9.Text = "X" Then
Timer1.Stop()
MsgBox("Player 1 is the winner")
ElseIf Btn4.Text = "O" And Btn5.Text = "O" And Btn6.Text = "O" Then
Timer1.Stop()
MsgBox("Player 2 is the winner")
ElseIf Btn4.Text = "X" And Btn5.Text = "X" And Btn6.Text = "X" Then
Timer1.Stop()
MsgBox("Player 1 is the winner")

Else
GameOver()
End If



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

لاحظ في اخر الكود وجود GameOver() لم يتعرف عليه الفيجوال بيسك

أضف في نهاية كلمة End sub بعد سطر جديد الآتي

كود PHP:
Private Sub GameOver()
If Btn1.Enabled = False And _
Btn2.Enabled = False And _
Btn3.Enabled = False And _
Btn4.Enabled = False And _
Btn5.Enabled = False And _
Btn6.Enabled = False And _
Btn7.Enabled = False And _
Btn8.Enabled = False And _
Btn9.Enabled = False Then
Timer1.Stop()
MsgBox("Game OVER!")
End If
End Sub



لان في كل ضغطة يتم تعطيل الزر , اذا كان جميع الازرار معطلة فان البرنامج سوق يظهر مسج بوكس فيه خسرت اللعبة

وأخيراً , اضغط مرتين على التايمر وأضف الكود الآتي

كود PHP:
TheWinner()



شغل المشروع , واستمتع باللعب

http://img401.imageshack.us/img401/5523/17707082.png