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

مشاهدة النسخة كاملة : لمبرمجي القسم- برنامج بسيط و لغز ابسط ؟


الصفحات : [1] 2 3

رغيد الطيب
05-12-2003, 06:42 PM
السلام عليكم ورحمة الله وبركاته ...

لمحبي البرمجة جميعاً .. اهديكم هذا البرنامج البسيط الذي يحتوي على برنامج بسيط جداً جداً جداً ...

حيث يطلب منك البرنامج اختيار رقم من 1 وحتى 15 في رأسك فقط ودون اخبار البرنامج بالرقم الذي اخترته ... ويظهر لك اربع صور بها مجموعة من الارقام اختر الصور التي تحتوي على الرقم الذي اخترته ثم اضغط على الزر وسوف يخبرك البرنامج بالقرم الذي اخترته في رأسك ...

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

بالنسبة لي فقد كتبته بلغتي الحبيبة الفيجوال بيسك ... و للجميع حرية الاختيار بالنسبة للغة وإن كنت احبذ لغة الفيجوال بيسك لكي تسهل المقارنة ....

طبعاً اتمنى ان لا يؤخذ الموضوع على انه سيكون هناك فائز وخاسرون ... لا .... لا ... دعونا فقط نستفيد من الافكار التي سيطرها الاخوة في برامجهم ....

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

المحقق كونان .... والكوماندر ... و يافع .. واميرنا الصنعاني .... وعلاء عصام ... والاخت Nora ... وجميع من يحب المشاركة ....

وضعت البرنامج هنا بدون كود حتى يتنافس المحبون في وضع كود للبرنامج ... وعندما ينقضي الامر اضع الكود بإذن الله ...


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

الامير الصنعاني
05-12-2003, 07:42 PM
السلام عليكم ورحمة الله
انا حالياً
مش بغرفتي ومش على جهازي
وبستخدم احد الاجهزة من احدى مكتبات الجامعة

والبرنامج ما ظهر بالكلام العربي

المهم ان شفت الصور واخترت
ويبدوا انني لم افهم كلامك
يا ريت توضح لنا اكثر

ان شاء الله لي عودة
بعد ان اخذ الامتحان اللي هو بعد قليل

تحياتي لك
والسلام ختام

Nora
05-12-2003, 08:40 PM
جزاك الله خيرا أخي الفاضل ...( أعتقد أن كلمة مبرمجة كبيرة علي فأنا لازلت في البداية) لكن على الرغم من ذلك فسأشارك...

لكن الظاهر اني عقدت الموضوع وهو أبسط من ذلك وذلك بسسب أني لازلت في البداية كما قلت ... لكن لا أنكر أن طرحك للغز دفعني لاسترجاع معلوماتي البسيطة والتي كنت قد أهملتها عند وضعي لحل السؤال في البدء لكني وجدت طريقة أخرى أثرت الاتكون مشاركتي بالاجابة الا بها:

Option Explicit
Dim FinalNumber As Integer

Private Sub Form_Load()
FinalNumber = 0
Check1.Tag = 4
Check2.Tag = 1
Check3.Tag = 8
Check4.Tag = 2
End Sub

Private Sub Command1_Click()
FinalNumber = Check1.Tag * CInt(Check1.Value) + Check2.Tag * CInt(Check2.Value) + Check3.Tag * CInt(Check3.Value) + Check4.Tag * CInt(Check4.Value)
FalseValue
MsgBox FinalNumber, , " الرقم الذي أخترته هو "
FinalNumber = 0
End Sub

Public Sub FalseValue()
Check1.Value = False
Check2.Value = False
Check3.Value = False
Check4.Value = False
End Sub

رغيد الطيب
05-12-2003, 09:05 PM
اولا السلام عليكم ورحمة الله وبركاته ...

وثانياً : اتمنى ان يوفقك الله اخي في امتحانك القادم بإذن الله تعالى ... وان ييسره عليك بإذنه تعالى ...

و بالنسبة للبرنامج هذا توضيح اكثر ...

عندما تفتح البرنامج تجد اربع صور كل واحدة تحتوي على مجموعة من الارقام اي انها صور لارقام وهذة الارقام هي في الحدود من 1 الى 15 .... وكل صورة من الصور يوجد عليها مربع اختيار ... ماشي الحال ! ...

والان اختر في قلبك رقم معين ضمن هذة الحدود( 1 - 15 ) ثم انظر الى الصور الاربع وحدد كل الصور تحتوي على الرقم الذي اخترته في قلبك ...

بعد ان اخترت الصور التي تحتوي على رقمك ... يمكنك ان تضغط على الزر الذي في الاسفل سوف ترى ان البرنامج قد عرف الرقم الذي اخترته في قلبك ؟ ....

المطلوب هنا هو معرفة كيف عرف البرنامج هذا الرقم الذي اخترته في قلبك .. وهي طريقة حسابية بسيطة جداً ... ولكن المطلوب حقاً هو ان تكتب برنامج بسيط بأقصر كود ممكن مستخدماً اللغة التي تحب يقوم بنفس عمل هذا البرنامج ....

الغرض هو رؤية كيف يمكن اختصار الكود لتأدية العمل فالجميع سوف يعرف الاجابة باذن الله تعالى ... ولكن كلاً منا سيتسخدم طريقة مختلفة ربما وقد تتساوى الطرق ... وكذلك يهمنا التعرف على الاختلافات في شفرة اللغات التي سيستخدمها الاخوة بإذن الله تعالى ...

------

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

3laa3sam
05-12-2003, 09:07 PM
والله فكره أهي طلعت منك ياأستاذ رغيد ، عموماُ انا هحمل عندي الويب ده وهشوف بس الظاهر إن إختونا (Nora) ماشيه ومهتمه ع الاخر ، أنا راجع بس لما أفضي إلي عندي وشكراً.

رغيد الطيب
05-12-2003, 09:09 PM
السلام عليكم ورحمة الله وبركاته ...

الان انتبهت لمشاركتك ... اختي ...

وسوف اراها ولي عودة بإذن الله تعالى وفي انتظار باقي الاخوة ...

كما اود ان اوضح انني ايضاً مازلت في طور التعلم لهذا احب ان نتشارك جميعاً في استخلاص ابسط الحلول كي تزداد بذلك طرق تفكيرنا بالبرامج .... بإذن الله تعالى ...


اكرر شكري لتفاعلك ....

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

يافع
06-12-2003, 01:47 AM
:) لم أعرف الحل بعد .... لكن هل هذ الفلاش لزكية الذكية يعرض نفس الفكرة!!!
WIDTH=400 HEIGHT=350

azizNY
07-12-2003, 12:38 AM
Ok, this is a sample of the code, I just dont have more time to finish it, but you will get the idea of how the program works, I only did the coding for 3 numbers, the other numbers can also be the same..


Dim check As Boolean
Dim check2 As Boolean
Dim check3 As Boolean
Dim check4 As Boolean
check=false
check2=false
check3=false
check4=false

if checkbox1=true then
check =true
end if


if checkbox2=true then
check2 =true
end if

if checkbox3=true then
check3 =true
end if

if checkbox4=true then
check4 =true
end if

If check = True And check2 = False And check3 = False And check4 = False Then
MsgBox "4"
End If

If check = True And check2 = False And check3 = False And check4 = True Then
MsgBox "6"
End If

If check = True And check2 = True And check3 = True And check4 = True Then
MsgBox "15"
End If

BTW i did it the long way, it could be done easier with a case statement or a loop...

salam,

رغيد الطيب
07-12-2003, 11:19 AM
اولاً السلام عليكم ورحمة الله وبركاته ...

الاخوة جميعاً اشكر كل من شارك في الموضوع .. واقصد بالمشاركة ليس ان يضع برنامج بل ان مجرد المحاولة هي مشاركة ترفع المعنويات كثيراً فمن الممل جداً ان يجد المرء نفسه يتحدث مع نفسه ...

ولكنكم ما قصرتم والله فمنكم من حاول ومنكم من عزم على المحاولة ومنكم من شارك وهي والله اشياء ترفع المنعويات وتحث على المواصلة ...

فشكراً للامير الصنعاني والاخت نورا و علاء ويافع وعزيز ... وكل الشكر والامتنان للباقون ...

بالنسبة للاخت نورا فقد كانت مشاركتك الاولى فعالة بالطبع وقد وفت بالغرض كما هو مطلوب منها تماماً كما ان مشاركة الاخ العزيز ايضاً ستؤدي العمل المطلوب منها بإذن الله تعالى ...

ثم جاء التعديل الاخير لكود الاخت الكريمة نورا ليكون حلاً جميلاً استغلت فيه الخاصية Tag استغلال ممتاز فلم توجد هذة الخاصية إلا لكي يستغلها المبرمج حينما يحتاج الى اي قيمة يخزنها بعنصر معين لهذا يضع الفيجوال بيسك هذة الخاصية للاستخدام عند الحاجة ..

لهذا فهي اجابة رائعة بالفعل .... والمهم قوله هنا هو انه يوجد العديد من الحلول التي يمكن ابتكارها للمسألة ... وقد كنت اعتزم تصعيب اجابة اللغز بحيث امنع استخدام اوامر الشرط كا الـ IF او SELECT CASE او ما شابه من الاوامر الشرطية غير اني سوف اكتفي بهذا القدر ...

و ضعت هنا اجابة بسيطة خالية من اوامر الشرط و وتعتمد على مصفوفة الادوات او الـ Control Array وهي ان تجعل اكثر من عنصر في الفورم بنفس الاسم ويختلفون في الخاصية Index اي ان جميع مربعات الاختيار او الـ CheckBox تحمل نفس الاسم ولكل منها Index مختلف من الـ 0 وحتى الـ 3 ... واعتماد مبدأ النظام الثنائي في الحل ... وبهذا يمكن حل البرنامج كاملا بهذا الشكل :

Private Sub Command1_Click()
Dim I As Integer, V As Integer

For I = 0 To 3
V = V + (2 ^ I) * Chk(I).Value
Chk(I).Value = 0
Next
MsgBox V, vbInformation, "الرقم المطلوب هو"
End Sub


واتمنى للجميع حظاً موفقاً في مواضيع واللغاز برمجية اخرى ...

في الملف المرفق كود البرنامج كاملاً ..

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

رغيد الطيب
07-12-2003, 11:21 AM
السلام عليكم ورحمة الله وبركاته ...

الاخ العزيز يافع نسيت ان اشكرك على الفلاش الجميل الذي وضعته ... وفي الواقع ان فكرته مختلفه قليلاً ويمكن تأديتها بسهولة باستخدام النظام الثنائي Binary System في ايجاد جداول الارقام التي تعرض على الشاشة ..

وفي الملف المرفق كتبت برنامج على عجل للقيام بنفس الوظيفة باذن الله تعالى تجده مع الكود في المرفقات ....

ولك تحياتي اخي ..

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

العمراوي
07-12-2003, 11:25 AM
موضوع رائع يا عزيزي رغيد .,.,.,.,

وتفاعل جميل من الأعضاء .,.,.,., ولذا سأثبت الموضوع للفائدة .,.,.,.,

Nora
07-12-2003, 07:12 PM
فكرة الحل كانت فعلا رائعة ومختصرة وعملية أكثر ... بارك الله فيك أخي .

واتمنى للجميع حظاً موفقاً في مواضيع وألغاز برمجية اخرى ...

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

3laa3sam
08-12-2003, 12:44 AM
أنا والله العظيم ....بتأسف منك أستاذ رغيد الطيب يعني بمر وبشوف وبتحسر عشان والله معنديش وقت (الوقت الراهن) أشارك معاك بس وعد مني أول مخلص شغل هجيلك قوام وهشارك إن شاء الله وبكده عايزك بس يعني متاخدش ع خطري .

رغيد الطيب
08-12-2003, 10:08 PM
السلام عليكم ورحمة الله وبركاته ...

مشرفنا العزيز كل الشكر والتقدير لشخصكم الكريم ...

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

الاخ العزيز علاء كن ذا ثقة عزيزي انه ما كان لسطور برمجية مهما عظمت ان تجعلني آخذ عليك في خاطري ... وكم اتمنى ان لا تشغل نفسك بهذة الامور البسيطة وان تلتفت لاشغالك عزيزي .. وكلنا نعذر بعض إن شاء الله تعالى ...



---------------------------------------------

و استمراراً بمواضيعنا نضع اليوم برنامج بسيط آخر والمطلوب القيام به باقل كود ممكن ... والبرنامج هذة المرة عبارة عن حركات مختلفة على عنصر label وكذلك حركة بسيطة على كرة ترتد كاما ارتطمت باحد الجدران المحصورة خلالها ... طبعاً الحركات بسيطة جداً ولكني لا اريد منكم القيام بالحركات الثلاث الموجودة في البرنامج بل انك ان استطعت ان تنفذ حركة من الحركات فيكمن ان تضع لنا اقصر كود توصلت اليه ثم حينما تتمكن من تنفيد حركة اخرى ضعها .. وهكذا واتمنى ان نستفيد من افكاركم الجميلة ...

طبعاً يستثنى من المسابقة من كان مشغولاً ( ماشي ياعلاء ! ) ... واظن انني قد ناقشت حركات مشابة مع اخونا العزيز كونان على ما اتذكر ... فان كان العكس فرحباً بمشرفنا ايضاً في اللغز الجديد ...


وللجميع مني الدعاء بالتوفيق بإذن الله تعالى ..


تجدون البرنامج في الملف المرفق ...

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

Nora
09-12-2003, 06:38 PM
السلام عليكم ورحمة الله وبركاته.

Private Sub Form_Load() 'حددت القياسات هنا حتى تتوافق
Timer1.Interval = 10 'مع حسابات الحركة الموضوعة في الأسفل
Me.Width = 4800
lblSalam.Width = 3000
lblTahia.Width = 1260
lblTahia.Left = Me.Width - lblTahia.Width
lblSalam.Left = 0
End Sub

Private Sub Timer1_Timer()
Timer1.Enabled = False
'السلام عليكم ورحمة الله و بركاته
lblSalam.Left = lblSalam.Left + 30
If lblSalam.Left = Me.Width Then
lblSalam.Left = lblSalam.Width - Me.Width
End If
'تحية
If lblTahia.Left = Me.Width - lblTahia.Width Then
i = -30
End If
If lblTahia.Left = 0 Then
i = 30
End If
lblTahia.Left = lblTahia.Left + i
Timer1.Enabled = True
End Sub

لكنه طــــــــــويـــــــــل ...
أما الكرة فأمرها يبدو مختلفا (؟؟؟ ...لم أجد سرها حتى الان ) لكن لابد من محاولة أخرى...

نجيب المجيدي
09-12-2003, 07:57 PM
السلام عليكم أخي رغيد
هذه أول فكرة خطرت على بالي باستخدام 2 تايمر ولكن أعتقد أنها طويلة
Dim t As Boolean, tt As Boolean
Dim Lball As Long, Tball As Long, Llbl As Long, Tlbl As Long
Private Sub Form_Load()
x = lbl(0).Left
y = lbl(0).Top
ball.Move x, y

Llbl = lbl(0).Left + lbl(0).Width
Tlbl = lbl(0).Top + lbl(0).Height

End Sub

Private Sub Timer1_Timer()
Lball = ball.Left + ball.Width
Tball = ball.Top + ball.Height
If Lball < Llbl And t = False Then
x = x + 50

Else
t = True
End If
If ball.Left > lbl(0).Left And t = True Then
x = x - 50
Else
t = False
End If
ball.Move x, y

End Sub



Private Sub Timer2_Timer()

Tball = ball.Top + ball.Height
If Tball < Tlbl And tt = False Then
y = y + 50

Else
tt = True
End If
If ball.Top > lbl(0).Top And tt = True Then
y = y - 50
Else
tt = False
End If
ball.Move x, y
End Sub

3laa3sam
09-12-2003, 10:12 PM
في الاول باشكرك استاذي القدير (رغيد الطيب) ع فهمك لحالتي ووعد انا أول ماخلص المعرض حاجي هنا طوالي .
أما الاخت نورا و الاخ نجيب المجيدي ....إنتوا والله العظيم أترتم فيا ، ياجماعه خليكوا ع كده (شادين) ع طول وإن شاء الله تعالى إحنا كلنا مع بعض هنعمل وهنوصل لحاجات مش قليله طول ماكلنا إشتغلنا فريق واحد وشغلنا عقولنا صح، أنا جاي معاكوا مش هبعد بعيد كثير وإستنوني

رغيد الطيب
09-12-2003, 11:51 PM
السلام عليكم ورحمة الله وبركاته ..

الاخت الكريمة نورا اشكر لك بالفعل تفاعلك الدائم ولا اخفيك اني توقعت ان اول رد سوف يصل هو منك ... فشكراً لك للتفاعل وزادك الله علماً ..

بالنسبة للحركة العنواين لقد كانت بالفعل رائعة .. ولكني للاسف الشديد لم اذكر ان مقصدي هو ان يتم تحريك العنواين او الـ Labels بغض النظر عن حجمها او حجم الفورم يعني اياً كان حجم الفورم وبالتالي عدم تحديد طولها وعرضها ... وبالنسبة للكرة فحركتها بسيطة جداً و ليس لدي شك في انك ستتمكنين بعون الله من تحقيقها ...

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

غير ان هناك مبادئ برمجية يجب مراعتها عند تصميم اي برنامج وسوف اذكرها هنا ...

اولاً يجب قبل استخدام اي متغير في البرنامج ان يتم التصريح عنه حتى يتمكن من يقرأ الكود معرفة نوع هذا المتغير ...

ونلاحظ مثلاً في كود الاخت نورا استخدام لمتغير اسمه i دون ان يتم تعريفه بالشكل :

Dim i As Integer

وكذلك الحال بالنسبة لكود الاخ نجيب فقد تم اغفال تعريف المتغيرين x و y ...

كما ان هناك مبدأ آخر مهم جداً عند كتابة برامج يقرأها الغير وهو تسمية العناصر باسماء تسبقها ثلاثة حروف توضيحية مثلاً اذا كتبت انا كود كالتالي :

MyCar.Left = MyCar.Left + 100
Title.Height = 300

فكيف يمكن لمن يقرأ الكود السابق معرفة نوع العنصر MyCar وكذلك الـ Title فلايود في الكود ما يوضح نوعهما فهل هما عبارة عن صورة Image او زر امر Command او عنوان Label او مربع نص TextBox ....... الخ.

ولهذا فقد تم الاصطلاح على وضع ثلاثة خروف في المقدمة تبين النوع بالشكل التالي :

Label = lbl
Command = cmd
PictureBox = pic
Image = img
TextBox = txt
Form = frm
OptionButton = opt
ComboBox = cbo
Listbox = lst

طبعاً هذة بعض الاختصارات ويمكنك القياس على نفس المبدأ بالنسبة لباقي العناصر وبالتالي فانه يمكن اعادة كتابة الكود السابق بالشكل التالي :

imgMyCar.Left = imgMyCar.Left + 100
lblTitle.Height = 300

ولان بنظرة سريعة على الكود السابق يمكن بسهولة معرفة ان العنصر imgMyCar عبارة عن صورة اي Image وكذلك معرفة ان العنصر lblTitle هو عبارة عن عنوان Label ...

ونلاحظ ان الاخت نورا تتبع هذا المبدأ المهم والشائع جداً بين المبرمجين لتنظيم وتسهيل قرأة الكود ...

وبالنسبة للخوة الذين جربوا كود الاخ نجيب ولم يعمل لديهم عليهم القيام بالخطوات التالية كتوضيح :

اولاً اضافة صورة Image وتسميتها Ball ثم اضافة عنوان Label وتسميته lbl وجعل الخاصية Index له تساوي 0 .... وهذا العنوان يمثل المربع الابيض الذي سوف تبقى الكرة تدور داخله ...

ولكي لا تختلف تسميات العناصر بعد الان في برامجنا فقد اعدت وضع البرنامج بحيث اذا قام احدكم بجعل الماوس فوق العنصر فأن اسم العنصر سوف يظهر له مباشرة ... كما اود ملاحظة ان حركة العنواين تختلف وتتناسب مع حجم الفورم حتى اذا قمت بتغيير حجم الفورم ...

اتمنى ان لا يظن المرء منكم بأن الكود معقد فقد يذهب الانسان بعيداً عندما يظن ان الموضوع معقد وبالتالي تزداد درجة تعقيد اجابته لهذا فقليل من التركيز على حركة كل عنصر سوف يبين لك ان الامر ابسط مما كنت تظن ...

في الاخير اكرر شكري للاخوين نجيب و نورا على اكوادهما الرائعة ... واتمنى للجميع حظاً موفقاً ...

وسوف اضع حلول المسائل بإذن الله تعالى اذا شعرت انه لن تكون هناك اجابات اكثر من التي طرحت ....

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

نجيب المجيدي
10-12-2003, 01:14 PM
أرجو أن تنتظر قليلاً يا رغيد
سوف أحاول قريباً أن أرسل بالكود كاملاً كما أود أن أشكرك علىالتوضيح أعلاه
بالنسبة للمتغيرين x,y فقد قمت بتعريفها في module
ونسيت التوضيح
سأحاول في أقرب فرصة إختصار الكود
(طبعاً مع اتباع قواعد التسمية)!!(-;)

نجيب المجيدي
10-12-2003, 03:58 PM
بعد أن عدلت قليلاً في الشفر و أضفت الشفرة الخاصة بتحريك العناوين
إليك عزيزي هذا الكود و بتسميات أعتقد أنها واضحة
مع أني لا زلت أرى أنه يمكن اختصار الكود أكثر فأنت لا تعجز عن شيء
Dim Lbl_ToRight As Boolean, Ball_ToRight As Boolean, BallUp As Boolean
Dim x As Long, y As Long, W As Long, H As Long


Private Sub Form_Load()
W = ImgBall.Width
H = ImgBall.Height
Ball_ToRight = True
BallUp = True
Lbl_ToRight = True
End Sub

Private Sub Timer1_Timer()
'================================================
If lbl(1).Left >= Me.Left + Me.Width _
+ 50 Then
lbl(1).Left = Me.Left - Me.Width
Else
lbl(1).Move lbl(1).Left + 50
End If
'=================================================
If Lbl_ToRight And lbl(0).Left + lbl(0).Width <= Me.Left + Me.Width Then
lbl(0).Move lbl(0).Left + 50
Else
Lbl_ToRight = False
If Not Lbl_ToRight And lbl(0).Left > Me.Left Then
lbl(0).Move lbl(0).Left - 50
Else
Lbl_ToRight = True
End If
End If
'=================================================
x = ImgBall.Left
y = ImgBall.Top
If Ball_ToRight And x + W <= lblArea.Left + lblArea.Width Then
ImgBall.Move x + 50
Else
Ball_ToRight = False
If Not Ball_ToRight And x > lblArea.Left Then
ImgBall.Move x - 50
Else
Ball_ToRight = True
End If
End If

'=====================================
If BallUp And y + H <= lblArea.Top + lblArea.Height Then
ImgBall.Move ImgBall.Left, y + 50
Else
BallUp = False
If Not BallUp And y > lblArea.Top Then
ImgBall.Move ImgBall.Left, y - 50
Else
BallUp = True
End If
End If
End Sub
:D

نجيب المجيدي
11-12-2003, 07:52 PM
وينكم يا شباب يعني شكلكم ملليتوا
على العموم أنا سأظل أكافح لوحدي وهذا البرنامج السابق لكن بتعديل جديد
و بارسل الكود بعد قراءة ملاحظاتكم
و ملاحظاتك انت يارغيد بالتحديد
و السلام عليكم

Nora
11-12-2003, 10:20 PM
السلام عليكم ورحمة الله وبركاته.
شكرا للأخ نجيب لتفاعله المفيد ... ولا أخفيكم سراَ أن كود الأخ نجيب فيه أشياء جديدة بالنسبة لي كالدالة Move التي أراها للمرة الأولى وسأحاول أن أبحث عنها واعرف تفاصيلها من مكتبة MSDN ... والتي أوحت الي بأني ليس لدي المعرفة الكاملة بدوال الحركة في الفيجوال بيسيك لذلك وأيضا لضيق الوقت (تعرفون أجازة العيد انتهت ) سأكتفي بمشاركتي الأولى حيث أن الوقت لم يسعفني لأحاول مرة أخرى .

و أتمنى أن يستمر هذا التفاعل من الجميع ...

رغيد الطيب
13-12-2003, 12:43 AM
اولاً السلام عليكم ورحمة الله وبركاته ...

الاخ العزيز نجيب يعني اما الملل فلا اظنه قد تسرب الي في يوم من الايام خاصة فيما يتعلق بمحبوتنا جميعاً ( الفيجوال بيسك 6 ) ... غير ان الانشغال الشديد وقلة دخول النت منعني من المشاركة ... ولكن مما يثلج الصدر فعلاً تفاعلك الدائم ومتابعة الاخت نورا الدائمة للموضوع ....

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

وكذلك الاخت نورا بالفعل ان بداية الدراسة تضييف على المرء اعباء جديدة اعاننا الله جميعاً وكل مسلم ..

واما بالنسبة للامر Move فهو احد الاوامر المهمة التي المرتبطة بجميع العناصر والادوات والغرض الرئيسي منها هو الاختصار و تحسين الاداء .... ودعيني اضرب مثالاً بسيطاً ..

عندما نريد تحريك صورة معينة image1 من موقعها الحالي الى الموقع (3000,1000) مثلاً .... فسوف نكتب كود مشابه للتالي :

Image1.Left = 3000
Image1.Top = 1000

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

ولكن عند استخدام الامر Move فان الحركة تكون مرة واحدة بتغيير الخاصيتين Left و Top في نفس الوقت بالشكل التالي :

image1.Move 3000, 1000

اي ان العنصر الاول يمثل الـ Left والذي يليه يمثل الـ Top ولا يقتصر الامر على ذلك فقط ولكن اذا اردنا ايضاً ان نحرك الصورة ونغيير حجمها ايضاً اي ان نجعل الـ Height=500 و الـ Width=600 فاننا سنكتب كود مشابهه للتالي :

Image1.Left = 3000
Image1.Top = 1000
Image1.Width = 600
Image1.Height = 500

ويمكن اختصار السابق باستخدام الامر Move كالتالي :

image1.Move 3000, 1000, 600, 500

وهو اكثر سرعة واختصاراً في نفس الوقت ...

وعودة الى موضوع اللغز البرمجي فقد ارتئيت ان اضع الحل النموذجي للبرنامج حيث لاحظت شيئاً بسيطاً جداً في زمن اختفاء العنوان الذي يحمل "السلام عليكم ورحمة الله وبركاته" وبين ظهوره من الجهه المعاكسة وكذلك المواضع التي يرتد فيها العنوان التالي "عنوان التحية" .. في كلاً من البرنامجين الذان زودتماني بهما اخواي العزيزان ... وكلي ثقة من انكما قادران على ان تضعا حلاً للمشكلة بسهولة إن شاء الله تعالى ...

ولكن تجنباً في طول فترة وضع اللغز دون اجابة نموذجية سوف اقوم بتوضيح حلول الحراكات الثلاث بشكل سريع ...

اما الحركة الاولى للعنوان الذي يحتوي على "السلام عليكم ورحمة الله وبركاته" واسمه lblSalam فيمكن الاكتفاء بالحل التالي :

Private Sub Timer1_Timer()
lblSalam.Left = lblSalam.Left + 30
If lblSalam.Left > Me.Width Then lblSalam.Left = -lblSalam.Width
End Sub

وهذا سيضمن ظهوه من الجهة المعاكسة بمجرد اختفاءه من الجهة اليمنى للبرنامج ... بإذن الله تعالى ....

واما بالنسبة للحركة الثانية والتي يقوم بها العنوان المسمى lblTahia فيمكن حلها بالشكل التالي :

Dim d As Integer

Private Sub Form_Load()
d = -30
End Sub

Private Sub Timer1_Timer()
If lblTahia.Left + d >= Me.Width - lblTahia.Width Or lblTahia.Left + d <= 0 Then d = -d
lblTahia.Left = lblTahia.Left + d
End Sub


وبالنسبة لحركة الكرة المسماه imgBall فيمكن عملها بالشكل التالي :

Dim dX As Integer, dY As Integer

Private Sub Form_Load()
dX = 50
dY = 50
End Sub

Private Sub Timer1_Timer()
If imgBall.Left + dX >= picBox.Width - imgBall.Width Or imgBall.Left + dX <= 0 Then dX = -dX
If imgBall.Top + dY >= picBox.Height - imgBall.Height Or imgBall.Top + dY <= 0 Then dY = -dY

imgBall.Left = imgBall.Left + dX
imgBall.Top = imgBall.Top + dY
End Sub


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

وتجدونها في الملف المرفق مجموعة بمكان واحد ... وبالله التوفيق ...

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

رغيد الطيب
13-12-2003, 12:45 AM
السلام عليكم ورحمة الله وبركاته ...

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

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

اخي العزيز نجيب اعتذر عن الـتأخر في الرد على موضوعك في الرابط التالي

http://www.al-yemen.com/vb/showthread.php?s=&postid=402189#post402189

لتأخري في الانتباه للسؤال فقد مرت الايام الاخيرة وانا لا ادخل الى اي موضوع في القسم سوى موضوع الالغاز هذا فغفلت عما سواه سهواً ...

وبالنسبة للعبتك الجميلة التي وضعتها في ردك السابق فقد راقت لي كثيراً وقمت ببناء لعبة بسيطة تنطلق من نفس مبدأ لعبتك واضع اللعبة مع الكود هنا للفائدة ...

في انتظار اللغازكم الجديدة ....

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

نجيب المجيدي
13-12-2003, 05:16 PM
ماشاء الله على أفكارك المبدعه يا رغيد
على فكرة انت ساعدتني من قبل و كمان التقينا و شفنا بعض و جلسنا سوا في بيتكم
إيه رأيك :D :D :D
عموماً هذا برنامج بسييييييط جداً وفكرته بسيطه أيضاً أرجو منكم تحاولوا تنفذوه بأقل قدر ممكن من الكود

رغيد الطيب
13-12-2003, 08:36 PM
السلام عليكم ورحمة الله وبركاته ...

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

واظنني سوف اتمكن من التخمين اذا اجبتني ... هل لك علاقة بكلية المجتمع ؟؟

اذا كانت الاجابة نعم ... فأهلا و مرحباً بالاخ العزيز نجيب وكم يؤسفني اني لم اتعرف عليك منذ البداية واظن السبب يعود الى اني لم اكن اعرف ان لقبك هو المجيدي .. لذا اتمنى ان تعذرني اخي لجهلي ...

واما إن لم تكن لك علاقة بكلية المجتمع فلا اظنني قد عرفتك بعد وسيكون من جزيل كرمك لو ذكرتني اخي ...

واما بالنسبة للغز الجديد الرائع .. فهذا حلي له ..

واذا كانت الاجابة ليست مختصرة بشكل كافي .. فاتمنى التنبيه حتى احاول مرة اخرى ...

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

IF...THEN ... ELSE
IIF()
SELECT....CASE
CHOOSE()
SWITCH()

وغيرها من الاوامر التي تتيح لنا استخدام شرط ...

انتظر ردك حتى اعرف هل اعيد المحاولة ام انتظر ان تجيبوا على نفس لغزك ولكن بدون اوامر شروط كما اسلفت ...

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

رغيد الطيب
13-12-2003, 08:37 PM
السلام عليكم ورحمة الله وبركاته ...

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

في انتظارك عزيزي للفائدة ...

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

3laa3sam
13-12-2003, 10:57 PM
عارف حاجه يانجيب...الاستاذ رغيد الطيب والله العظيم انا ماشفت قلب أبيض زيه من قبل مش عشان انا بقول هنا عشان يبقى يشوف. لا والله بس دي هيا الحقيقه وانا كان لي شرف إني أخش بيت رغيد ويعلمني شويه من علمه فعشان كده هوا يادوب يتذكر الشباب ويعني انا مبسوط إني بعرف شخص زي الاستاذ رغيد الطيب .

رغيد الطيب
14-12-2003, 04:13 AM
السلام عليكم ورحمة الله وبركاته ...

الاخ الحبيب علاء عصام ... ان الذي كان له الشرف بالتعرف عليك هو انل عزيزي كما انك شرفتني بالزيارة فجزاك الله عني كل خير ...

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

وصدقني اخي انا لا استحق وصفك ابدا وانت كنت ادعو الله تعالى ان يجعلني خيراً مما تظنون ويغفر لي ما لا تعلمون ولا يؤاخذكم بما تقولون ...

ولله ذر القائل :

إللهي لا تعذبني فأني مقرٌ _____ بالـــــذي قـــد كان منــــــي
وكم من زلةٌ لي في البرايا _____ وانت علي ذو فضـــــــل ومنٍّ
يظن الناس بي خيراً وانـي _____ لشر الناس إن لم تعفو عني


واما العزيز نجيب فايضاً اخ اعتز بعرفتي به كاعتزازي بك اخي الكريم ...

جعل الله محبتنا خالصة لوجهه الكريم وجعلنا ممن يضلهم الله بضله يوم البعث و النشور .... اللهم آمين ...

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

Nora
14-12-2003, 04:01 PM
السلام عليكم ورحمة الله وبركاته.

Private Sub Form_Load()
Me.ScaleMode = 1 'Twip
End Sub

Private Sub Timer1_Timer()
lblShahada.ForeColor = QBColor(Int(Rnd * 15) + 1)
End Sub

Private Sub cmdExit_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
cmdExit(Index).Visible = False
cmdExit((Index + 1) Mod 8).Visible = True
End Sub

Private Sub cmdStart_Click()
Timer2.Enabled = True
End Sub

Private Sub Form_click()
Cls
End Sub

Private Sub Timer2_Timer()
Me.Circle (Rnd * Me.Width, Rnd * Me.Height), 18, QBColor(Int(Rnd * 15) + 1)
End Sub

لدي استفسار : هل هناك فرق بين أن يتم تحديد اعدادات ال Form في وقت التصميم أو في وقت التشغيل ( في الكود) كاللون والخط وغيره أقصد بالنسبة للبرامج الكبيرة المكونة من عدة نوافذ من حيث حجم البرنامج عند تحويله الى ملف تشغيلي ... وحجزه لموارد النظام عند التشغيل .
و شكرا ...