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

مشاهدة النسخة كاملة : الدرس الاول : تحريك الشخصيات بالتفصيل



sin_himself
23-10-2002, 02:10 AM
.......................{ بسم الله الرحمن الرحيم }......................
السلام عليكم....

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

* قد أكون مخطئ في هذا ففي برمجة الالعاب الاحترافية ( اقصد بها 3D )
يوجد هنالك بعض الرياضيات والفيزياء...ولكنها بسيطة وأيظاً تستطيع تفادي الغموض بإستخدام مكتبات برمجية جاهزة ، فهي ستريحك و تسرع عملك وبعضها كاملة وقوية مثل المكتبة الرائعة Genesis3D فبوجود مثل هذه المكتبات تصبح برمجة الالعاب ممكنة لاي شخص يريد الدخول في هذا المجال ، فجل ما تحتاجه هو الوقت....:)

كلااااااااااامي واجد صح :cool: حركتات

ولدي بعض الخبرة البسيييطة في هذا المجال (حدود شهرين فقط )
لذلك الدروس التي سأقدمها للمبتدأين :) بلغة VB
اما الدروس المتوسطة فإن وضعتها فستكون بلغة ++C وعن DX ..
واما الدروس المتقدمة فأتركها للخبراء ( تصريييييف :) )

* تفترض هذه الدروس معرفة الاساسيات بلغة البيسك
* يستطيع مبرمجين اللغة C فهم الاكواد لانها بسيطة .
* للذين لم يتعلموا لغة برمجة....لماذا تهدرون وقتكم ان كنتم تريدون برمجة الالعاب...اذهبوا للمكتبة الاان :)

دروس المبتدأين:
الدرس الأول : التحريك
الدرس الثاني : التصادم
الدرس الثالث : أشكال جميلة
الدرس الرابع : أوامر مهمة في برمجة الألعاب
الدرس الخامس : الأصوات
الدرس السادس : الاداة BitBlt
الدرس السابع : نبذة عن DX
الدرس الثامن : معلومات برمجية

سأحاول جاهداً ان يكون الشرح واضح مع أنني لا اتصف بذلك :( ... فإذا
واجهتكم مشكلة في شيء أسئلني وسأكون شاكراً

سأكتب الدرس الاول في هذا الموضوع هذا اليوم
ملاحظة / ستجدون في نهاية كل درس ملف مضغوط فيه جميع امثلة الدرس .

sin_himself
23-10-2002, 03:18 AM
بسم الله الرحمن الرحيم....

مقدمة عن التحريك :
1- افتح فيجوال بيسك.
2- ضع داخل ملف الفورم مربع صورة Picturebox
3- ضع داخل مبربع الصورة : صورة ( اي صورة ) من خلال الخاصية picture .
4- احفظ الملف بإسم (1-1)

والان وقد وضعت الصورة...كيف تعرف موضع الصورة داخل الفورم؟
- من خلال الخاصية Left : المسافة من اليسار و Top : المسافة من الاعلى.
فإذا كانت الTop = 0 فإن الصورة ستكون في أعلى النافذة بالظبط
وإذا كانت ال Top = 0 و Left = 0 فإن الصورة ستكون في الزاوية الشمالية الغربية.

والان استطعنا وضع صورة في المكان الذي نريد :
تطبيق (1-1) ....
1- افتح الملف السابق
2- ضع مربع نص داخل الفورم
3- ضع مربع نص اخر داخل الفورم .
4- ضع زر أمر (command) وغير الخاصية Caption الى "غيرموضع الصورة"
5- داخل الكود اكتب :


Private Sub Command1_Click()
Picture1.Top = Text1.Text
Picture1.Left = Text2.Text
End Sub

Private Sub Form_Load()
Text1.Text = "" ' لكي نجعل النص فارغ
Text2.Text = ""
End Sub


* فقط لقد جعلنا النص عندما يتم التحميل فارغ ,جعلنا القيمة في النص الاول = ارتفاع الصورة . والخرى نفس الشيء .

سنعود بعد قليل :)

sin_himself
23-10-2002, 04:09 AM
بسم الله الرحمن الرحيم
السلام عليكم....

التحريك :
السؤال الرئيسي والذي سنشتق منه جميع الاسئلة :
كيف تتحرك الشخصية من مكان الى اخر ؟!!!
كنا قد حركناها وذلك من خلال كتابة قيم في مربع النص ، ولكن انا لا اريد ذلك ... اريد ان تتحرك بشكل متزايد....
نفعل ذلك من خلال هذا الكود :


Picture1.Left = Picture1.Left + 100

فعندما ينقر المستخدم على زر امر (command) مثلاً تتحرك الشخصية مقدار 100 ....فهذا الكود مشابه لـ :
عدد التفاحات = عدد التفاحات الحالية + 100

تطبيق 1-1 : افتح المشروع السابق ثم ضع هذا الكود بدلاً من الكود الحالي :


Private Sub Command1_Click()
Picture1.Left = Picture1.Left + 100
End Sub

Private Sub Form_Load()
Text1.Text = "الطريقة"
Text2.Text = "الجديدة"
End Sub


ولاكن نحن في برمجة الالعاب لا نتعامل مع زر كوماند . فكيف نتفاعل مع الكيبورد والماوس ؟

الكيبورد :
هنالك ثلاث احداث(Events) يقدمها VB ... ما يهنا هو اثنان منها
مثال : اذا ضغط المستخدم على زر <--- في الكيبورد لكي تتحرك الشخصية لليمين مدة 1 دقيقة ثم تركه فكيف سنتعامل مع هذا المدخل.
_________
الحدث Keydown :



Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer)

End Sub

عندما يضغط المستخدم على الكيبورد فإن هذا الحدث يخزن في ذاكرة الجهاز رقم هذا الزر الذي ضغطناه في المتغير KeyCode
فمثلا عندما انقر على مسافه (Space) فإن Keycode = 16 وعندما ينقر على زر انتر Enter فإن Keycode = 13 وهكذا
هل انا مضطر الى حفظ هذا الارقام ؟ :غضب:
- بالطبع لا ...تستطيع كتابة:


print keyCode

لمعرة رقم الزر الذي ضغطته :) .
اذا استمريت في الضغط على زر معين..ماذا يحدث ؟
- ستستمر حركة الشخصية حتى ترفع الزر (وهذا هو المطلوب)
ولكن انا اريد ان يفعلها مرة واحدة .
- هنالك عدة طرق ذكية منها KeyUP وسنتطرق لها بعد قليل...

في المثال السابق حركنا الشخصية من خلال Command والان سنحركها بواسطة KeyDown ....

تطبيق (1-2) :
1- اضف مشروع جديد واحفظ بإسم 1-2
2- اضف مربع صورة وضع داخلة صورة ما
3- اكتب هذا الكود :


Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer)
Print KeyCode
Select Case KeyCode
Case 39
Picture1.Left = Picture1.Left + 100
Case 37
Picture1.Left = Picture1.Left - 100
End Select
End Sub


_______________
الحدث KeyUP :
نفس طريقة عمل السابق ولاكن يشتغل هذا الحدث اذا رفع المستخدم عن زر ما....
مثال : ضغط المستخدم على زر مسافة مدة ساعة كاملة ثم تركه ...
سيتحقق فقط بعد نهاية الساعة لان المستخدم رفع يده عن الزر(من اسم الحدث)

_______________
احداث الماوس ..سأتحدث عنها لاحقاً

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

والان لقد تعلمنا كيف نحرك شخصية بإستخدام Keycode ولكن هل سيظل كل شيء جامداً هكذا حتى نقوم بتحريكه ...هنا يأتي العنصر Timer .....

سنعود بعد قليــــــل

تحياتي

sin_himself
23-10-2002, 05:42 AM
بسم الله الرحمن الرحيم

ما هو عنصر Timer ؟

هو مجرد أداة ميقاتية تنفذ الأوامر التي بداخلها كلما مر وقت معين تحدده انت من خلال الخاصية (Interval) :


Timer1.Interval = 100


سأضع له تطبيقين ( تطبيق1-3 ، تطبيق1-4)
واذا واجهت صعوبه في فهم هذا العنصر...اخربني وسأكون سعيداً بالإجابة.

لقد ارفقت ملف مضغوط في التطبيقات الاربعة التي أخذناها

انتهينا من الجزء الأول والاساسي في برمجة الالعاب
سأكمل في الجزء الثاني اساسيات التحريك....

تحيااااااااتي

Mr. Black Man
23-10-2002, 07:11 AM
ما شاء الله موضوع ممتاز و مفيد و رائع جداً و راح يفيد كل الأعضاء و أتمنى إنك تكمل الدروس إلى النهاية و الصراحة من مواضيعك و ردودك مبين عليك عضو ممتاز و فعال في المنتدى و إن شاء الله بنستفيد من دروسك الرائعة

sin_himself
23-10-2002, 08:12 AM
:o اشكرك كثيراً....ولم افعل ما يستحق الشكر....واتمنى ان يستفيد ولو شخص واحد من الدروس :) ...واشكرك مرة اخرى لما قلته :o ...واشكر الشكر لان ردي لك امتلأ بالشكر ...:)

sin_himself
23-10-2002, 09:02 AM
ستكون التكلمة لهذا الدرس عن :
التحكم بالماوس...
تحريك شخصية ماريو....
عملية القفز في ماريو....

ولكن اين الواجب :D ... كيف أعرف ان كلامي مفهوم الا عن طريق الواجب :)

BuGaTTi
23-10-2002, 09:20 AM
شوي شوي علينا والواجب انشالله الخميس او الجمعه عالعطله :)

بصراحة اخوي سن مواضيعك هي روح المنتدى وهي المعنى الحقيقي للبرمجة فنرجو منك الاستمرار وافادتنا بما تعلم

لك جزيل الشكر اخي العزيز :)

sin_himself
24-10-2002, 05:58 AM
ول ول ول :واو: .. لا تكبر راسي ما اعرف اشرح :D
انا ما اعرف الا الاساسيات...ما دخلت هذا المجال الا من شهرين...يعني قبل شهرين ما اعرف شي :( .... لا تعطيني اكبر من حجمي..

صراحة ودي اشكرك بقووووووة..انت اول واحد حسسني ان فيه امل احد يحل الواجب :o

sin_himself
24-10-2002, 06:46 AM
بسم الله الرحمن الرحيم
السلام عليكم...

نكمل الشرح(طق × طق ×طقق × طق) :

موضوعنا كما قرأتم هو التحكم بالماوس :

(ابشركم)..الماوس مشابه لطريقة الكيبورد :) ..

قبل ذلك ماذا استفيد من الماوس ؟
- تعرف احداثيات الفارة (X,Y) في اي مكان داخل الفورم .
- معرفة اذا ما نقر المستخدم الزر الايسر او الايمن او لا شيء
-استخدام Drag & Drop ... شل و حط

يقدم VB ثلاث احداث (events)..للماوس تماماً كالكيبورد .

الحدث Mouse Down :


Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'End Select
End Sub

ماذا يعني Button ؟
هذا المتغير يخبرك اي من ازرار الفارة قد نقر
ماذا يعني Shift ؟
الحقيقة كان من المفروض شرحة في درس الكيبورد ( سامحونا )
يخزن هذا المتغير ما اذا كان الزر Shift مظغوط ام لا
طيب كيــف اتعامل معه ؟ :غضب:
يخزن القيمة صفر اذا لم يظغط والقيمة واحد اذا ظغط .
ماذا يعني X و Y ؟
X هو الاحداثي السيني للفارة ، Y هو الاحداثي الصادي للفارة
ملاحظة/ هذه الاحداثيات بالنسبة للفورم وليست الشاشة...فإذا نظرت الى الكود في الاعلى ستجد Private Sub Form ما يهمني هو كلمة فورم فالاحداثيات تنسب الى الفورم ، وعندما اضع Private Sub picture1 فإن الاحداثيات تنسب الى الصورة اي أن
X = 0 عندما تكون الفارة واقعة على Left الصورة
ان لم تفهم هذا الكلام ( وهذا دائما ما يحدث معي) ..جرب المثال الذي سأرفقة.

* بقي نقطة مهمة هي التي تفرق بين الاحداث الثلاثة :
متى ينشط هذا الحدث (اي متى ينفذ ما بداخلة) ؟!!!
ج/ ماهو اسم الحدث ؟ اسمه MouseDawn اذن ينشط عندما ينقر المستخدم على الماوس .

الحدث : MouseMove
مطابق تماما للحدث السابق ولكن الفرق هو ... متى ينشط هذا الحدث؟
ج/ ماهو اسم الحدث ؟ اسمه MouseMove اذن ينشط عندما يتغير احد احداثيات الفأرة .

الحدث : MouseUp
مطابق تماما للحدث السابق ولكن الفرق هو ... متى ينشط هذا الحدث؟
ج/ ماهو اسم الحدث ؟ اسمه MouseUp اذن ينشط عندما يرفع المستخدم يده من احد ازرة الفأرة .

تطبيق (1-5) :
1- افتح مشروع جديد واحفظه بإسم (1-5)
2- اضف هذا الكود


Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Cls
Print "X = " & X
Print "Y = " & Y
Print Shift
Select Case Button
Case 1: Print "الزر الايسر مظغوط"
Case 2: Print "الزر الايمن مضغوط"
End Select
End Sub

ماهو cls ؟
هو امر بسيط يمسح الفورم وهو اختصار الى CleanScreen....
لماذا احتاجها ؟ لماذا امسح وانا اريد ان اطبع ؟؟!!:غضب: ....
لغة البيسك ليست كالسي...فعندما تطبع نص بأمر Print ثم طبعت نص اخر فإن النص الثاني سيضهر تحت النص الاول....وعندما تريد طباعة نص ثالاث سيضهر تحت هذين النصين....
وانا اريد ان اطبع اكثر من نص...وان كانت كل مجموعة نصوص ستضهر تحت الاخرى ففي خلال كم نقرة ستختفي النصوص الجديدة :( ...
لذا قبل ان يتم طباعة شيء جديد امسح الفورم بإستخدام الامر cls ثم اقوم بطباعة الاحداثيات الجديدة...

ماهو الامر Print ؟
هو امر يقوم بطباعة نص على النافذة
نستخدم " " لنخبر VB ان هذا نص وليس متغيراً
نستخدم & للربط بين نصين مثلاً


"Print "Hello" & "World

سيطبع : HelloWorld

سأرفق ملف لهذا التطبيق

تحيااااااتي
:)

sin_himself
24-10-2002, 07:06 AM
قبل ان نبدأ بالشغل ....ابستنا فترة لمين تطبق الدروس عشان نمشي مع بعض ولا يقف بعضنا موقف المتفرج :)

sin_himself
25-10-2002, 11:34 AM
ملاحظة نسيت قولها : في الاكواد بعض الاحيان تضهر معكوسة لذا عند التطبيق لا تقم بكتابتها...بل... انسخها ثم الصقها.

تحياتي :)

RPG
27-10-2002, 11:11 PM
شكرا على الدروس الرائعة، و هذا واجب الدرس الاول :)


Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 78 Then
Picture1.Top = Picture1.Top - 100
Picture1.Left = Picture1.Left + 100
End If

End Sub

78 هو الحرف n و بقية الكود يحرك الصورة :)
تابع الدروس
:D

sin_himself
28-10-2002, 09:54 AM
بسم الله الرحمن الرحيم

تماااااام 10000% صحيح :) ......


____________________________________

فكرة الدرس القادم :
(1) كيف نكون دالة لتكون دالة الاعدادت؟

(2) تحريك ماريو :
** لديك شخصية اسمها ماريو ولديك اربع صور له :
- الصورة الاولى : واقف ... ورأسه نحو اليمين
- الصورة الثانية : واقف ... ورأسه نحو اليسار
- الصورة الثالثة : يتحرك نحو اليمين
- الصورة الرابعة : يتحرك نحو اليسار.
* كيف سنحركه اعتماداً على هذه الصور ؟

(3) القفز : بإستخدام : أ - Select case + Timer . ب - Loop

تحياتي :)

PRG of RPG
28-10-2002, 10:28 AM
هذه هي الصورة

H4
31-10-2002, 08:06 AM
بيسك :o

انتظر دروس لغة C و ++C و #C :D






إي صح مشكور على الموضوع الرائع :)

PRG of RPG
02-11-2002, 08:42 AM
بسم الله الرحمن الرحيم....

معذرة يا شباب لقد نسيت امراً كان يجب ان اذكره في البداية وهو الدوال()
واما موضوع ماريو فسأضعه غداً بإذن الله..(المعذرة)

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

الدوال()

مافائدة الدوال...
اولا كل ما هو امامك هو دوال وانت تستدعيها وانت لا تشعر...ستعرف معنى هذا الكلام في اساسيات ++C .
ولكن ما فائدتها في برنامجنا؟!!
- لتنظيم مساحة العمل...
- لنتعود على هذه الطريقة فسوف نقوم بها في DX .
- التحكم بالاخطاء .

والان انقر على كلمة tools في الاعلى ثم Add procedure .
اختر Function واختر Private .....
- لماذا اخترت Function تحديداً ؟
لاننا في برمجة الالعاب (انواع المشاكل والاخطاء)..فعند استدعاء الدالة اريد ان اتأكد من ان ما بداخلها قد تم بنجاح ام لا....فـ Function تقوم بذلك.


Public Function Func1() As Boolean
----
End Function

والان هذه هي الدالة..خالية من الاوامر..وقبل الاوامر انا لم اقوم باي عملية تتأكد من ان استدعائها تم بنجاح ( يا كثر كلامي :) :

نفعل ذلك من خلال الكود التالي :


Private Function func1() As Boolean
On Local Error GoTo Err:
--------
--------
func1 = True
Exit Function
Err:
func1 = False
MsgBox "هنالك خطأ في الجزء func1"
End Function


وش مسوي انت ؟!!:غضب: ....
ستعتاد على كذا واكثر بكثيــــــــر اذا تعملت DX
سنشرح العملة السابقة سطراً بسطر :
1- تعريف دالة خاصة اسمها Func1 من نوع Boolean .

2- [On Local Error] هذا السطر تستطيع من خلالة التحكم في الاخطاء ... بحيث اذا حدث خطأ ... افعل الاتي ، وطلبنا منه هنا بأن يفعل Goto err...امر Goto يجعل البرنامج يذهب الى جزء معين من الدالة واسمه هنا err .

3- ------------- و ----------- اوامر الدالة التي سنضعها بعد قليل .

4- اذا وصل البرنامج الى نهاية الاوامر ...معناه انه لا يوجد خطأ (عند وجدود الخطأ سيذهب الى err) .. فإذا وصل الى النهاية فقد تم استدعاء الدالة بنجاح ... لذا سنضع func1 = true ...

5- خلاااص اذا مافيه اخطاء ننهي الدالة وتنكمل البرنامج وذلك من خلال امر الخروج Exit function .

6- هذا هو الجزء Err ...(عند هدوث خطأ سيذهب البرنامج الى الجزء err

8- بما ان الدالة حدث فيها خطأ اذن سنجعل func1 = false ...

9- اعرض رسالة مفادها "حدث خطا"

ادري شغلة بس تراك ما شفت شي من DX .

والان كيف نستدعي الدالة ؟
بواسطة الامر call مثال : call func1 .

من اين نستدعيها وكيف نتعامل مع الاخطاء ؟
مثلا سنستدعيها من الفورم داخل الاجراء load ...



Private Sub Form_Load()
If func1 = False Then
MsgBox " لسنا قادرين على الاكمال"
Unload Me
End If
End Sub


هنا سنتعامل مع الخطأ :
.... قبل كذا الحين وييين call ليش ما استدعينا الدالة :غضب: ؟؟!؟؟
- لقد استدعينا الدالة عند الشرط فعند If func1 = false سيقوم البرنامج بإستدعاء الدالة ثم سيرى ان كانت false ام True...
** اذا تحقق الشرط اضهر رسالة " لسنا قادرين على الاكمال واخرج من البرنامج(من خلال الامر unload me و تستطيع كتابة end)

ملاحظة/ الفرق بين unload me و end ...
___________________________________________________
|................Unload Me..................|..............................end.............|
|...1- يخرج من البرنامج بأكملة...........|.....1- يخرج من الفورم فقط............|
|.............................................|...........................................|
|.2- ينهي البرنامج بشكل غير محبب........|..2- يبنهي البرنامج بشكل افضل........|
|.............................................|...........................................|
--------------------------------------------------

والان دعنا نقوم بكتابة بعض الاوامر في الدالة
ملاحظة / اضف مربع نص الى الفورم .


Private Sub Form_Load()
If func1 = False Then
MsgBox " لسنا قادرين على الاكمال"
Unload Me
End If
End Sub

Public Function func1() As Boolean
On Local Error GoTo Err:
Dim a As Integer
a = 7 / 1
Text1.Text = a
func1 = True
Exit Function
Err:
func1 = False
MsgBox "هنالك خطأ في الجزء func1"
End Function


الاوامر التي وضعناها في الدالة :


Dim a As Integer
a = 7 / 1
Text1.Text = a

هل هنالك مشكلة في الكواد بالطبع لا .... جرب هذا كود وسينفذ 100%
وكلن دعنا نقوم بإحداث خطأ:
اجعل


a = 7 / 0

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

فائدة : لبعض الفعالية في إستكئاف الاخطاء استخدم Err.Description ويقوم هذا الامر بإيضاح الخطأ.
مثال


Public Function func1() As Boolean
On Local Error GoTo Err:
Dim a As Integer
a = 7 / 0
Text1.Text = a
func1 = True
Exit Function
Err:
func1 = False
MsgBox Err.Description & " هنالك خطأ في الدالة وهو"
End Function



عرفنا الان استدعاء الدوال وكشف الاخطاء والتعامل معها....ولا توجد فائدة مرئية لهذا في برمجة الالعاب ولكنها فقط طريقة منظمة ومطمئنة في البرمجة...فلست مجبراً عليها ....:)



الدرس القادم : تحريك ماريو

تحياااااااااااااااااااتي :)

Ralf
04-11-2002, 05:32 AM
مشكور على هذا الشرح الرائع

PRG of RPG
04-11-2002, 11:51 AM
الرسالة الأصلية كتبت بواسطة كريس ريد فيلد
مشكور على هذا الشرح الرائع

مشكوووووووووووور اخي كرس :)

KinG_ZoRa
05-11-2002, 04:03 AM
كيف اقدر ابتكر لعبه من تصميمي وتفكيري
ارجوكم ساعدوني
:" :" :" :" :" :" :"






ارجوا الرد على هذا الاميل

hi2all_hi4all167@hotmail.com


وشكرا

PRG of RPG
05-11-2002, 09:01 AM
السلام عليكم....
اخي الكنق ..كيف حالك..فيه مواضيع عديدة توضحلك طريق برمجة الالعاب..اذا كنت ما قريتها :

بإختصار : فيه طريقتين
-الطريقة (1) : هنالك برامج جاهزة لا تشترط معرفتك بأي لغة...تقدر تسوي فيها العاب بسرعة... بس ما تقدر تتحكم في اللعبة تحكم كامل.

-الطريقة (2) : تتعلم احد لغات البرمجة السي او البيسك ثم تبدأ في الالعاب الصغيرة حتى تصل الى الالعاب الثلاثية الابعاد ......

واهم شي الصــــــــــــــــــــبر

تحياتي :)

PRG of RPG
05-11-2002, 09:51 AM
السلام عليكم....

درس اليوم : مكرونة بالبشملي

تراني صادق الدرس يشهي....(تبي تشوف شي يتحرك قدامك:) )


معليش شباب الشرح بيكون سريع سريع
__________________________

-اول شيء كيف ندرج صورة؟
نقدر نضع صورة من الخاصية picture .

طيب كيف ندرج صورة من الكود ؟


picture1.picture = loadpicture("C:/man.jpg") 'this will insert picture

كما نرى فقط نضع موقع الصورة وستضهر الصورة في البرنامج

ولاكن ماذا اذا نقلنا البرنامج الى موقع اخر؟
هنا يأتي دور الكائن App.path فهر يعطينا موقع البرنامج.

picture1.picture = App.path & "image.img" ' this will insert picture

________________________________

ماهو الموديل ؟
هو ملف نضيفة الى المشروع لأنشاء الدوال وتحسين القرائة و....

اضف موديل جديد :
Project -- Add module --Open
سيضهر لك الموديل...ولاكن ما ذا نفعل به؟!!
سنضيف اليه متغيرات عامة نستطيع استخدامها في اي جزء من البرنامج..فلو كان لدي اكثر من فورم واردت ان اجعل متغير لهم مشترك يجب ان اضيف موديل لذلك...،...واذا اردت ان يصبح متغير عام اكتب في البداية كلمة Public بدلاً من Dim مثال
Public name as string

تطبيق :
اضف مشروع جديد واحفضه بإسم : تطبيق(1-7)
اضف موديل...
اكتب داخل الموديل هذا الكود :


Option Explicit

Public a As String
Public b As String
Public c As String
Public d As String

Public Sub Init()
Form1.BackColor = vbBlack

Form1.Picture1.AutoSize = True
Form1.Picture1.Appearance = 0

a = App.Path & "/1.bmp"
b = App.Path & "/2.bmp"
c = App.Path & "/3.bmp"
d = App.Path & "/4.bmp"
End Sub


حسناًً....ماهي Option Explicit ؟!!!
كلمة اضعها اذا اردت ان اجبر نفسي بأن اعرف كل متغير جديد ... فإذا كتبت متغير ولم اعرفه(اذكره نوعه) ، فسيعترض البرنامج هذه العملية...تستطيع حذفها اذا اردت.

المتغيرات a و b و c و d تحمل عناوين الصور الاربع (سبق ان اشرت اليها)

الدالة(Init) :
form1.backcolor = vbblack اي لون الخلفية اسود
form1.picture1.autosize = true اي سيأخذ مربع الصورة ابعاد الصورة نفسها .
form1.picture1.Appearance = 0 اي ان مربع الصورة سيضهر بدون حواف .

ملاحظة / لابد من ذكر الفورم لاي كائن داخلها اذا كنت تشتغل على موديل فكيف سيعرف البرنامج انك تريد هذا الفورم عن غيره ؟!! لا بد من ذكر الفورم قبل الكائن .

a = App.Path & "/1.bmp" المتغير a سيحمل موقع البرنامج + اسم الصورة فبذلك سيحمل موقع الصورة كاملاً فهمها غيرت موقع البرنامج ستضهر الصورة هذه هي فائدة الكائن App.path ...

_____________________-
الان ننتقل الى الفورم



Private Sub Form_Load()
Call Init
Picture1.Picture = LoadPicture(c)
End Sub

Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer)

Static step As Integer

Select Case KeyCode
Case 39
Picture1.Left = Picture1.Left + 50
If step = 0 Then
step = 1
Picture1.Picture = LoadPicture(c)
ElseIf step = 1 Then
step = 0
Picture1.Picture = LoadPicture(d)
End If
Case 37
Picture1.Left = Picture1.Left - 50
If step = 0 Then
step = 1
Picture1.Picture = LoadPicture(a)
ElseIf step = 1 Then
step = 0
Picture1.Picture = LoadPicture(b)
End If
End Select
End Sub


اول شيء استدعينا الدالة init .
ثاني شطر اضهرنا الصورة رقم 3 .

الحدث keyDown :
ماهو Static ....هو كـ Dim ولاكن في المتغير من نوع Dim سيم تعيين القيمة صفر عن كل تعريف له...انا لا ادري ذلك اريدة ان يتم على ماهو عليه
هنا يأتي دور المتغير من نوع Static ....(انا عرفت الفرق بينهم يوم تعلمت ++C )
ملاحظة/ تقدر تعرفه بعد على أنه متغير عام .

اذا ضغط المستخدم على الزر الايمن :
مرة ستضهر الصورة 1 والمرة الاخرى ستضهر الصورة 2
والبقية بالمثل ....

معليش شباب الشرح سريــع ومختصر مرة ... اذا فيه شيء غامض علموني ....

تحياتي

RPG
16-11-2002, 11:20 PM
كمل، انت تعطل مشروعاتي المهمة لما ما تكمل :p

مبرمج الالعاب
17-11-2002, 04:36 AM
السلام عليكم
هذه الدروس ممتازة كبداية ... شكرا جزيلا لك.
--------------------------
هناك ادوات بإسم أدوات الألعاب العربية و اسم الاختصار لها AGT
و هي تسمح ببرمجة العاب ثنائية الابعاد جيدة جداً ، و تستخدم في الفيجوال بيسيك كمكتبة اضافية.
و تعتمد في عملها على الدالة بيتا بلت و دايركت ساوند.
و برمجة الالعاب باستخدامها اكثر من سهل.
و سأحاول أن اضع بعض الدروس السهلة لها لاحقاً.

PRG of RPG
26-11-2002, 09:15 AM
السلام عليكم....
اولاً : انا اسف لااني تأخرت في وضع بقية الدروس :o
ولكنها الاختبارات...ولقد انتهت(لمدة ثلاثة اسابيع فقط :غضب: )....سامحونا

اخي مبرمج الالعاب :
شكرا جزيلاً لك .
انا اعرف هذا Arab Games tools وصاحبها العصيمي... وهي أكثر من رائعة..ولكن أليس من المفروض بي كمبرمج أن أعرف كيف تم تصميم هذه الأداة...
ننتظر دروسك بفارغ الصبر

تحياتي :)

PRG of RPG
01-12-2002, 03:46 PM
السلام عليكم...

خلاصنا التحريك ما بقى الا القفز....
القفز أنا صراحة إحترت فيه... الطريقة التي صلحتها معقده...
الشخصية عند بداية القفز تمتلك سرعة معينة على حسب قوة القفزة وايضا تمتلك تسارع (سالب) وما هو الا تسارع الجاذبية الارضية...
وبما ان تسارع الجاذبية الارضية يتعبر ثابت اذن فهي تحقق المعادلة
V = Vo + at حيث:
V : السرعة Velocity و Vo : السرعة الابتدائية
a : التسارع acceleration وt : الزمن
ولحساب الازاحة نستخدم المعادلة :
X - Xo = Vo t + 1/2 a t^2
حيث X : الازاحة Displacement و Xo الازاحة الابتدائية
التسارع = 9.8 (تسارع الجاذبية الارضية)
عند الارتفاع -----------> التسارع بالسالب
عند الهبوط ------------> التسارع موجب




























































امزح :)
بس انا اعتقد لو طبقنا هذه القوانين لنتج حركة طبيعية . يمكن اليابانيين يسونها عندهم في الثري دي ..اقصد استخدام الفيزياء والرياضيات ...

المهم ما علينا الطريقة اللي انا استخدمها اضع تايمر بسرعة معينه واضع الارتفاع في الصورة(top) يزود حتى مقدار معين ثم يبدأ بالنقصان ....

اللي حاول يسوي حركة القفز ولم يستطع يعلمني عشان نحاول فيها مع بعض ...



وبكذا نكون خلصنا الاساسيات وموضوع الحركة ....اللي عنده سؤال عن هذا الموضوع يتفضل وهذه ارقامنا على الشاشة 111111111 فاكس 1111111111 .... عشان نخلص من هذا الموضوع وننتقل لغيره طبعاً في حلقة قادمة (موضوع جديد) :)


تحياااتي :)

RPG
01-12-2002, 11:28 PM
أنا عندي سؤال...
كيف ممكن ناخذ صورة الحركة من صورة فيها كل الصور، يعني مثلا لو عندنا صورة فيها صور البطل يتحرك (مثل في لعبتك ماريو مثلا) بدلا من ان نضع كل صورة لوحدها؟ يعني هل ممكن نحدد حجم معين من صورة؟
و شكرا على الموضوع مرة اخرى :)

PRG of RPG
02-12-2002, 08:40 AM
السلام عليكم......

ممكن بإستخدام الدالة BitBlt .... او Direct draw كلها تصلح ...
الطريقة : نحدد الاحداثيات (الطول والعرض) من الصورة وهي تقوم بقص الجزء المراد استخدامه ...
سأشرح الدالة BitBlt و Direct Draw ولكن في وقتها ...

تحيااتي :)

nagah
04-12-2002, 04:10 PM
السلام عليكم ورحمة الله وبركاته

انا دخلت على الموضوع بالصدفة
بصراحة درو س راائعة وسهلة ومفيدة بالنسبة لي واسلوبها جميل
واشكرك اخوي على جهدك وتعبك ... والله يجعلها في موازين حسانتك

والله يوفقك ويعينك

على العموم انت افدتني بشكل خيالي ....
الله يعطيك الف عافية ويكثر من امثالك

PRG of RPG
05-12-2002, 07:23 AM
السلام عليكم...
احلى صدفة .... وياك انشاءالله...ومن امثالك :)

انت جبته من هنا صح ؟ (http://www.montada.com/showthread.php?s=&threadid=145621) :)

هاوي فانتسي
14-12-2002, 06:20 AM
لو سمحتوا أريد ملف الفيجوال بيسك;-)

PRG of RPG
15-12-2002, 03:21 AM
السلام عليكم....

هلا اخوي هاوي ... اي ملف تقصد ... ملف التطبيقات والامثلة ...ام تقصد برنامج الفيجوال بيسك ؟
- ملف التطبيقات تحصلة في ... "ملف مرفق"
- برنامج الفيجوال بيسك ؟ لازم تتعلم لغة البيسك أولاً ولا ما راح تستفيد منه ...وأنا على العموم أشتريته لذلك لا أعلم اذا كان في الانترنت ولا لا

تحياتي :)

alhamar
18-12-2002, 07:30 PM
بصراحة مواضيعك يا يزيد ذهب واغلى من الذهب ، على العموم مشكور على هذي الجهود وليتك ترسلي دروسك على
*****@hotmail.com

أووه .... :واو:

نسيت احنا في منتدى

على العموم إذا شفتك بالماسنجر بنشوف

سي دي2
18-12-2002, 11:51 PM
طيب لو سمحت من وين اقدر انزل الفيجول بيسك لو سمحت

PRG of RPG
21-12-2002, 01:29 AM
السلام عليكم...

اخوي الحمر : مشكور :)

اخوي سي دي 2 : اسف والله ما اعرف له موقع على النت ..... رح اي محل وقله نزلي VB6 ... بتلقاه انشاءالله علطووووول

تحياتي :)

UAE Naruto
07-09-2003, 06:58 PM
اخوي ( نسيت شو اسمك خخخخخخخ :bigok: )

ابغي أطلب منك طلب بس ما اقدر اقوله http://smilies.sofrayt.com/%5E/_950/polite.gif خخخخخخخخخخخخ :laugh2:

ممكن تعطيني وصله تحميل البرنامج + الكراك أو السيريل نمبر ( إذا يحتاي واحد منهم ) ممكن يعني ولا ؟

نسر الأعالي
09-09-2003, 09:53 AM
السلام عليكم
بس حبيت اذكرك

المبتدئين من وين ليهم البرنامج

هذا السؤال من عندي لاني مبتدأ !!

ahmed alshamy
28-11-2003, 06:59 PM
انا عضو جديد مهتم بالبرمجيات والبرمجة وصناعة البرامج والالعاب
بما ان ذلك سسيكون موضع تخصصي باذن الله انا ملتحق بأكديمية السادات فرغ المعادي بالقاهرة ولقد التحقت بتلك الكلية لوجود قسم الحاسب الالي ونظم المعلومات بها وانني مولع بالبرامج والبرمجيات
وانني اطلب المساعدة من اعضاء النتدي في اثراء معلوماتي عن البرمجة ةصناعة البرامج
وانا اعرف ان هذا سابق لاواته لكني كنت اود في معرفة كيف اذهب الي Visual Basic في pc
ومشكورين جميعكمم (ملحوظة انا اسمي احمد الشامي من مصر )

Master x Power
28-11-2003, 10:30 PM
sin_himself = PRG of RPG

الجبالي
29-04-2004, 11:26 AM
مشكووووووووووووووووووور جدا

REMONCOMPUTER
21-04-2005, 01:19 AM
بخصوص النط الطبيعى فى الألعاب :
يا شباب إحنا فى 3 إعدادى بناخد quadratic functions بتكون فيها x دايما أس 2 لأنها quadratic functions دايما تطلعلنا منحنى لأن فيها x أس 2 حاولو تدورو فى هذا الخيط ( نحن نأخذ الحساب بطرقة بحتة وليس بطريقة نستخدمة فى التطبيق )هذا على قد معرفتى (ملاحظة نحن نأخذها على بعدين x و y عرضى و رأسى ) معلش أصل أنا أخذه بالأنجليزي ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟!!!!!!!!!!!!!!!!...........

فان دام
29-04-2005, 08:09 PM
يعطيك العافيه ..

Son Of UAE
02-05-2005, 01:14 PM
موضوع قديم وممنوع رفعه ... شكراً