بيسك :o
انتظر دروس لغة C و ++C و #C :D
إي صح مشكور على الموضوع الرائع :)
عرض للطباعة
بيسك :o
انتظر دروس لغة C و ++C و #C :D
إي صح مشكور على الموضوع الرائع :)
بسم الله الرحمن الرحيم....
معذرة يا شباب لقد نسيت امراً كان يجب ان اذكره في البداية وهو الدوال()
واما موضوع ماريو فسأضعه غداً بإذن الله..(المعذرة)
اخي 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
هل هنالك مشكلة في الكواد بالطبع لا .... جرب هذا كود وسينفذ 100%كود:Dim a As Integer
a = 7 / 1
Text1.Text = a
وكلن دعنا نقوم بإحداث خطأ:
اجعل
القسمة على صفر...غير ممكنة.... لذا سيقوم البرنامج بعرض رسالتين اخطاء الاولى من الدالة التي تسببت في حدوث الخطأ والثانية من الجزء الرئيسي الذي يستدعي الدوال(Form_load) ..ثم سينهي البرنامج نفسه.كود:a = 7 / 0
فائدة : لبعض الفعالية في إستكئاف الاخطاء استخدم 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
عرفنا الان استدعاء الدوال وكشف الاخطاء والتعامل معها....ولا توجد فائدة مرئية لهذا في برمجة الالعاب ولكنها فقط طريقة منظمة ومطمئنة في البرمجة...فلست مجبراً عليها ....:)
الدرس القادم : تحريك ماريو
تحياااااااااااااااااااتي :)
مشكور على هذا الشرح الرائع
مشكوووووووووووور اخي كرس :)اقتباس:
الرسالة الأصلية كتبت بواسطة كريس ريد فيلد
مشكور على هذا الشرح الرائع
كيف اقدر ابتكر لعبه من تصميمي وتفكيري
ارجوكم ساعدوني
:" :" :" :" :" :" :"
ارجوا الرد على هذا الاميل
hi2all_hi4all167@hotmail.com
وشكرا
السلام عليكم....
اخي الكنق ..كيف حالك..فيه مواضيع عديدة توضحلك طريق برمجة الالعاب..اذا كنت ما قريتها :
بإختصار : فيه طريقتين
-الطريقة (1) : هنالك برامج جاهزة لا تشترط معرفتك بأي لغة...تقدر تسوي فيها العاب بسرعة... بس ما تقدر تتحكم في اللعبة تحكم كامل.
-الطريقة (2) : تتعلم احد لغات البرمجة السي او البيسك ثم تبدأ في الالعاب الصغيرة حتى تصل الى الالعاب الثلاثية الابعاد ......
واهم شي الصــــــــــــــــــــبر
تحياتي :)
السلام عليكم....
درس اليوم : مكرونة بالبشملي
تراني صادق الدرس يشهي....(تبي تشوف شي يتحرك قدامك:) )
معليش شباب الشرح بيكون سريع سريع
__________________________
-اول شيء كيف ندرج صورة؟
نقدر نضع صورة من الخاصية 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 ؟!!!كود: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
كلمة اضعها اذا اردت ان اجبر نفسي بأن اعرف كل متغير جديد ... فإذا كتبت متغير ولم اعرفه(اذكره نوعه) ، فسيعترض البرنامج هذه العملية...تستطيع حذفها اذا اردت.
المتغيرات a و b و c و d تحمل عناوين الصور الاربع (سبق ان اشرت اليها)
الدالة(Init) :
form1.backcolor = vbblack اي لون الخلفية اسود
form1.picture1.autosize = true اي سيأخذ مربع الصورة ابعاد الصورة نفسها .
form1.picture1.Appearance = 0 اي ان مربع الصورة سيضهر بدون حواف .
ملاحظة / لابد من ذكر الفورم لاي كائن داخلها اذا كنت تشتغل على موديل فكيف سيعرف البرنامج انك تريد هذا الفورم عن غيره ؟!! لا بد من ذكر الفورم قبل الكائن .
a = App.Path & "/1.bmp" المتغير a سيحمل موقع البرنامج + اسم الصورة فبذلك سيحمل موقع الصورة كاملاً فهمها غيرت موقع البرنامج ستضهر الصورة هذه هي فائدة الكائن App.path ...
_____________________-
الان ننتقل الى الفورم
اول شيء استدعينا الدالة init .كود: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
ثاني شطر اضهرنا الصورة رقم 3 .
الحدث keyDown :
ماهو Static ....هو كـ Dim ولاكن في المتغير من نوع Dim سيم تعيين القيمة صفر عن كل تعريف له...انا لا ادري ذلك اريدة ان يتم على ماهو عليه
هنا يأتي دور المتغير من نوع Static ....(انا عرفت الفرق بينهم يوم تعلمت ++C )
ملاحظة/ تقدر تعرفه بعد على أنه متغير عام .
اذا ضغط المستخدم على الزر الايمن :
مرة ستضهر الصورة 1 والمرة الاخرى ستضهر الصورة 2
والبقية بالمثل ....
معليش شباب الشرح سريــع ومختصر مرة ... اذا فيه شيء غامض علموني ....
تحياتي
كمل، انت تعطل مشروعاتي المهمة لما ما تكمل :p
السلام عليكم
هذه الدروس ممتازة كبداية ... شكرا جزيلا لك.
--------------------------
هناك ادوات بإسم أدوات الألعاب العربية و اسم الاختصار لها AGT
و هي تسمح ببرمجة العاب ثنائية الابعاد جيدة جداً ، و تستخدم في الفيجوال بيسيك كمكتبة اضافية.
و تعتمد في عملها على الدالة بيتا بلت و دايركت ساوند.
و برمجة الالعاب باستخدامها اكثر من سهل.
و سأحاول أن اضع بعض الدروس السهلة لها لاحقاً.
السلام عليكم....
اولاً : انا اسف لااني تأخرت في وضع بقية الدروس :o
ولكنها الاختبارات...ولقد انتهت(لمدة ثلاثة اسابيع فقط :غضب: )....سامحونا
اخي مبرمج الالعاب :
شكرا جزيلاً لك .
انا اعرف هذا Arab Games tools وصاحبها العصيمي... وهي أكثر من رائعة..ولكن أليس من المفروض بي كمبرمج أن أعرف كيف تم تصميم هذه الأداة...
ننتظر دروسك بفارغ الصبر
تحياتي :)
السلام عليكم...
خلاصنا التحريك ما بقى الا القفز....
القفز أنا صراحة إحترت فيه... الطريقة التي صلحتها معقده...
الشخصية عند بداية القفز تمتلك سرعة معينة على حسب قوة القفزة وايضا تمتلك تسارع (سالب) وما هو الا تسارع الجاذبية الارضية...
وبما ان تسارع الجاذبية الارضية يتعبر ثابت اذن فهي تحقق المعادلة
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 .... عشان نخلص من هذا الموضوع وننتقل لغيره طبعاً في حلقة قادمة (موضوع جديد) :)
تحياااتي :)
أنا عندي سؤال...
كيف ممكن ناخذ صورة الحركة من صورة فيها كل الصور، يعني مثلا لو عندنا صورة فيها صور البطل يتحرك (مثل في لعبتك ماريو مثلا) بدلا من ان نضع كل صورة لوحدها؟ يعني هل ممكن نحدد حجم معين من صورة؟
و شكرا على الموضوع مرة اخرى :)
السلام عليكم......
ممكن بإستخدام الدالة BitBlt .... او Direct draw كلها تصلح ...
الطريقة : نحدد الاحداثيات (الطول والعرض) من الصورة وهي تقوم بقص الجزء المراد استخدامه ...
سأشرح الدالة BitBlt و Direct Draw ولكن في وقتها ...
تحيااتي :)
السلام عليكم ورحمة الله وبركاته
انا دخلت على الموضوع بالصدفة
بصراحة درو س راائعة وسهلة ومفيدة بالنسبة لي واسلوبها جميل
واشكرك اخوي على جهدك وتعبك ... والله يجعلها في موازين حسانتك
والله يوفقك ويعينك
على العموم انت افدتني بشكل خيالي ....
الله يعطيك الف عافية ويكثر من امثالك
السلام عليكم...
احلى صدفة .... وياك انشاءالله...ومن امثالك :)
انت جبته من هنا صح ؟ :)