الدرس العاشر : عمل لعبة إسكواش
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
هذا هو التمرين الأول وهو أول تطبيق عملي منذ بداية دروسنا ...
ملاحظة : يجدر بك فهم جميع المواضيع السابقة من 1 إلى 9 قبل قرائة هذه الأكواد لأنها فقط من باب المراجعة
أولاً : افتح التطبيق (10 - 1) لكي نقرأ الأكواد معاً ... إن لم تمتلك الكود هذا يعني أنك لم تحدث النسخة الأخيرة من ملف الدروس VBT .. إذهب إلى موقعي وحمل الملف من الصفحة الرئيسية لدروس برمجة الألعاب
--- هل فتحت الملف إذن فلنبدأ :
كما ترى لقد إستخدمت الدرس Direct Input في التعامل مع الكيبورد
سنقرأ الكود سطراً سطراً
متغيرين الأول سرعة الإحداثي السيني للكرة والثاني سرعة الإحداثي الصادي للكرةكود:Dim SpeedX As Integer, SpeedY As Integer
إستدعينا الدالة Game_Initكود:Private Sub Form_Load() Call Game_Init If DI_Init = False Then MsgBox "خطاء في التعرف على لوحة المفاتيح", vbExclamation End End If End Sub
وإيظاً جهزنا Direct Input
في البداية جعلنا السرعة على الإحداثين س و ص تساوي 100كود:Private Sub Game_Init() SpeedY = 100 SpeedX = 100 Form1.Width = 10000 Form1.Height = 8000 Form1.BackColor = RGB(50, 100, 50) Form1.Caption = "لعبة اكواش" Call Picture_Maker(Picture1, 0, 2600, 1500, 300, 50, 100, 50) Call Picture_Maker(Picture2, 9630, 2600, 1500, 300, 50, 100, 50) Call Picture_Maker(Picture3, Form1.ScaleWidth \ 2, Form1.ScaleHeight \ 2, 500, 500, 50, 100, 50) MsgBox "إبدا اللعبة", vbOKOnly, "Start Game" End Sub
غيرنا خصائص النافذة
إستدعينا الدالة Picture_Maker ثلاث مراة في المرة الأولى لـ اللاعب الأول وفي المرة الثانية للكمبيوتر وفي المرة الثالثة للكرة
وضيفة هذه الدالة هي وضع مكان الصورة وعرضها وطولها وأيظاً لونهاكود:Private Sub Picture_Maker(nO As Object, nX As Long, nY As Long, nH As Long, nW As Long, R As Integer, G As Integer, B As Integer) nO.Left = nX nO.Top = nY nO.Height = nH nO.Width = nW nO.BackColor = RGB(R, G, B) End Sub
حدثنا المدخلاتكود:Private Sub Timer1_Timer() diDEV.GetDeviceStateKeyboard di_KeyBoard If di_KeyBoard.Key(DIK_ESCAPE) Then End If di_KeyBoard.Key(DIK_UP) Then Picture1.Top = Picture1.Top - 100 If di_KeyBoard.Key(DIK_DOWN) Then Picture1.Top = Picture1.Top + 100 Call Ball_Move End Sub
عند النقر على Escape نخرج
عند النقر على أعلى وأسفل يرتفع وينخفض اللاعب الأول على التوالي
إستدعينا الدالة Ball_Move
هذه هي الدالة الأخيرة والمهمة ...نبدأ :كود:Private Sub Ball_Move() If (Picture3.Left < Picture1.Left + Picture1.Width) And (Picture3.Top + Picture3.Height > Picture1.Top) And (Picture3.Top < Picture1.Top + Picture1.Height) Then SpeedX = -SpeedX If (Picture3.Left + Picture3.Width > Picture2.Left) And (Picture3.Top + Picture3.Height > Picture2.Top) And (Picture3.Top < Picture2.Top + Picture2.Height) Then SpeedX = -SpeedX If Picture3.Top < 0 Then SpeedY = -SpeedY If Picture3.Top + Picture3.Height + 300 > Form1.Height Then SpeedY = -SpeedY If SpeedX < 0 Then SpeedX = SpeedX - 1 If SpeedX > 0 Then SpeedX = SpeedX + 1 If SpeedY < 0 Then SpeedY = SpeedY - 1 If SpeedY > 0 Then SpeedY = SpeedY + 1 Picture3.Top = Picture3.Top + SpeedY Picture3.Left = Picture3.Left - SpeedX Picture2.Top = Picture3.Top - (Picture2.Height / 2) If Picture3.Left < 0 Then MsgBox "انتهت اللعبة لقد خسرت", vbInformation, "Game Over" Dim A As Byte A = MsgBox("هل تريد إعادة اللعبة", vbOKCancel, "إعادة اللعبة") Select Case A Case 1 Call Game_Init Case 2 Set dx = Nothing End End Select End If End Sub
أول سطر يكشف التصادم مع اللاعب الأول
ثاني سطر يكشف التصادم مع الكمبيوتر
ثالث سطر يكشف التصادم مع الجدار العلوي للفورم
رابع سطر يكشف التصادم مع الجدار السفلي للفورم
الأربعة أسطر تزيد السرعة بإزدياد الزمن
السطرين لتحريك الكرة
السطر الحادي عشر يجعل الكمبيوتر يتحرك مع الكرة - أبسط ذكاء إصطناعي
السطر الثاني عشر يكشف هل إنهزمت أم لا في حالة هزيمتك وعدم رغبتك في إكمال اللعبة نجعل Dx = Nothing لتحرير الذاكرة
تحياتي![]()






























