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

مشاهدة النسخة كاملة : الدرس العاشر : عمل لعبة إسكواش



PRG of RPG
26-02-2003, 01:03 AM
الدرس العاشر : عمل لعبة إسكواش

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

هذا هو التمرين الأول وهو أول تطبيق عملي منذ بداية دروسنا ...

ملاحظة : يجدر بك فهم جميع المواضيع السابقة من 1 إلى 9 قبل قرائة هذه الأكواد لأنها فقط من باب المراجعة

أولاً : افتح التطبيق (10 - 1) لكي نقرأ الأكواد معاً ... إن لم تمتلك الكود هذا يعني أنك لم تحدث النسخة الأخيرة من ملف الدروس VBT .. إذهب إلى موقعي وحمل الملف من الصفحة الرئيسية لدروس برمجة الألعاب

--- هل فتحت الملف إذن فلنبدأ :

كما ترى لقد إستخدمت الدرس Direct Input في التعامل مع الكيبورد

سنقرأ الكود سطراً سطراً



Dim SpeedX As Integer, SpeedY As Integer


متغيرين الأول سرعة الإحداثي السيني للكرة والثاني سرعة الإحداثي الصادي للكرة



Private Sub Form_Load()
Call Game_Init
If DI_Init = False Then
MsgBox "خطاء في التعرف على لوحة المفاتيح", vbExclamation
End
End If
End Sub


إستدعينا الدالة Game_Init
وإيظاً جهزنا Direct Input



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


في البداية جعلنا السرعة على الإحداثين س و ص تساوي 100
غيرنا خصائص النافذة
إستدعينا الدالة 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 لتحرير الذاكرة

تحياتي :)

Mr. Black Man
27-02-2003, 09:48 PM
شكراً لك على هذا الدرس الأكثر من رائع;)

PRG of RPG
28-02-2003, 11:42 AM
السلام عليكم...

العفو :) ياخي ما فيه احد يشجعنا بالقدر اللي انت تفعله ولا الربع بعد ... لذا انا الذي اشكرك وليس انت :)

تحياتي :)