منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

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

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

سنحاول معكم تصميمها بلغة vb

 يتبع
بعد عناء طويل

تحصلت على هذا الشكل



ساعد شرحا مفصلا عن كيفية التصميم و البرمجة المعتمدة 
الى ذلك الحين تحياتي
في البداية  نضع الصور  على شكل 9 مربعات


نضيف علبة فارغة لوضع الاعواد التي يتم تحريكها

نضع فيه ستة انصاف اعواد

نضيف richtextbox  لعرض نص اللغز

و ليبال لعرض النتائج

في الاسفل مجموعة صور  ملونة عادية لعرض صحة او خطا الحل

في البداية سنعلن عن متغيرات
مصفوفة لصور لاعواد الكبريت
مصفوفة للاعاود المتحركة
مصفوفة للمربعات الصفراء
مصفوفة للمربعات الصغيرة 
مصفوفة للمربعات المتوسطة
مصفوفة للاسئلة
متغيرات متعلقة بعدد الكليكات  clic
 رقم السؤال  NumbeProblem
رقم العواد المزاحة AllumD
مجموع المربعات الصغيرة SommeCp
مجموع المربعات المتوسطة SommeCm
النتيجة score
المربع الكبير cgrand
و في الاخير نوع الجواب صح ا خطا joib

PHP كود :
Dim ArryallumetarryallumetdeletCaseProg As PictureBox()
 
   Dim AcpAcm As Integer()
 
   Dim Problems(15) As String
    Dim Reponse
NumbeProblemAllumDSommeCpSommeCmclicscorecgrand As Integer
    Dim joib 
As Boolean 
 

 سنضع في المصفوفات  ما يقابلها من صور و ارقام

في form_load

PHP كود :
       ' allumet
        Arryallumet = {PictureBox7, PictureBox8, PictureBox9, PictureBox10, PictureBox11,
                    PictureBox12, PictureBox13, PictureBox14, PictureBox15, PictureBox16,
                    PictureBox17, PictureBox18, PictureBox19, PictureBox20, PictureBox21,
                    PictureBox22, PictureBox23, PictureBox24, PictureBox25, PictureBox26,
                    PictureBox27, PictureBox28, PictureBox29, PictureBox30}

        ' 
allumet delet
        arryallumetdelet 
= {PictureBox2PictureBox3PictureBox4PictureBox5PictureBox6}
 
       ' activite corect
        CaseProg = {PictureBox31, PictureBox32, PictureBox33, PictureBox34, PictureBox35,
                    PictureBox36, PictureBox37, PictureBox38, PictureBox39, PictureBox40,
                    PictureBox41, PictureBox42, PictureBox43, PictureBox44, PictureBox45, PictureBox46}

        ' 
exercices

        Problems 
= {"احذف عودين لتحصل على 8 مريعات صغار",
"احذف عودين لتحصل على 6 مربعات صغار و مربع كبير و 2 مربعين متوسطين",
"احذف عودين لتحصل على 6 مربعات صغار و مربع كبير فقط",
"احذف عودين لتحصل على 7 مربعات صغار",
"احذف 3 عيدان لتحصل على مربع كبير و 5 مربعات صغار",
"احذف 3 عيدان لتحصل على 5 مربعات صغار و مربع متوسط و مربع كبير",
"احذف 3 عيدان لتحصل على 6 مربعات صغار",
"احذف 4 عيدان لتحصل على 7 مربعات صغار و مربعين متوسطين",
"احذف 4 عيدان لتحصل على مربع كبيرو 3 مربعات صغار",
"احذف 4 عيدان لتحصل على 4 مربعات صغار و مربع كبير",
"احذف 4 عيدان لتحصل على مربع كبير و مربع متوسط و 4 مربعات صغار",
"احذف 4 عيدان لتحصل على مربع كبيرو مربع متوسط و 5 مربعات صغار",
"احذف 4 عيدان لتحصل على 5 مربعات صغار فقط",
"احذف 5 عيدان لتحصل على مربع كبيرو 3 مربعات صغار",
"احذف 5 عيدان لتحصل على مربع كبير و 4 مربعات صغار",
"احذف 5 عيدان لتحصل على 5 مربعات صغار و مربعين متوسطين",
"يمكنك اعادة التمارين من جديد"



 جميل جدا

الدالة الاساسية و هي الاسئلة 
سنفترض ان لدينا 9 مربعات صغيرة
4 مربعات متوسطة 
و مربع كبير
 و لكل منها نعطي قيمة 1  و نضعها في  مصفاتها

لاحظ الشكل التالي للتفهم 


نعبر عنه بالكود 

PHP كود :
Acp = {111111111}
 
       Acm = {1111}
 
       cgrand 

و معنى ذلك اذا نقص ضلع من المربع المعني ستصبح قيمة المربع الصغير المتعلق به 0 و المربع المتوسط المتعلق به 0 و اذا كانت له علاقة بالمربع الكبير 0 
 و بالتالي لما نجمع العدد سنجد كم من مربع بقي


هل مفهوم ؟؟؟؟؟؟

يعني لما اضغط في عود ثقاب في

لذلك في دالة الاسئلة  سنضع القيم الاولية لاي سؤال 0 
و نخفي كل اعواد العلية و نظهر كل اعواد اللعبة 
و نضع نص السؤال في richtext

PHP كود :
 Sub Questions()
 
       Acp = {111111111}
 
       Acm = {1111}
 
       cgrand 1
        
''''''''''''''''''''''
 
       '''''''''''''''''''
        clic = 0
        AllumD = 0
        SommeCm = 0
        SommeCp = 0
        For i = 0 To 23
            Arryallumet(i).Visible = True
        Next

        For i = 0 To 4
            arryallumetdelet(i).Visible = False
        Next
        RichTextBox1.Text = Problems(NumbeProblem)
        NumbeProblem += 1
        Labelques.Text = " الوضعية رقم  " & NumbeProblem
        RichTextBox1.SelectionAlignment = 2

    End Sub 

لما يظهر السؤال يجب الضغط على اعواد الثقاب
لذل في كل عود سنعطي قيمة 0 لكل مربع صغير متعلق به و 0 لكل مربع متوسط و المربع الكبير ايضا 
مثال العود في اقصى اليسار اعلاه

PHP كود :
Acp(0) = 0
        Acm
(0) = 0
        cgrand 
0
        clic 
+= 1
        PictureBox7
.Visible False
        arryallumetdelet
(AllumD).Visible True
        AllumD 
+= 1
        verfication
() 

يقابلها الصورة 

[صورة مرفقة: p_1690n9xwk1.png]

و سيكون عدد الكليك + 1 
و عدد الاعواد المتحركة + 1
و بلالتالي سنخفي الصورة بها كما هي في مصفوفة العواد المتحركة 
ثم نفعل دالة التصحيح vrefication

الان في دالة التصحيح

سنحسب مجموع المربعات الصغيرة 
و مجموع المربعات المتوسطة 
و قيمة المربع الكبير

PHP كود :
 SommeCp 0
        SommeCm 
0

        For i 
0 To 8
            SommeCp 
SommeCp Acp(i)
 
       Next

        For i 
0 To 3
            SommeCm 
SommeCm Acm(i)
 
       Next 


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


إقتباس :"احذف عودين لتحصل على 8 مريعات صغار",
"احذف عودين لتحصل على 6 مربعات صغار و مربع كبير و 2 مربعين متوسطين",
"احذف عودين لتحصل على 6 مربعات صغار و مربع كبير فقط",
"احذف عودين لتحصل على 7 مربعات صغار",


في الشرط سنقول اذا كان عدد الككليكات هو 2 و رقم السؤال من 1 الى 4 
راقب التالي
اذا كان السؤال الاول : اذا كان مجموع sommecp = 8  و soomecm =0 و cgrand=0  يعني يوجد 8 ممربعات صغيرة فقط فيظهر له ميساج الصح و الصورة في الاسفل يصبح صورتها صورة صح

وهكذا لبقية الاسئلة 16

و بالتالي دالة التصحيح تصبح

PHP كود :
 Sub verfication()
 
       SommeCp 0
        SommeCm 
0

        For i 
0 To 8
            SommeCp 
SommeCp Acp(i)
 
       Next

        For i 
0 To 3
            SommeCm 
SommeCm Acm(i)
 
       Next

        
' تحريك عودين
        If clic = 2 And NumbeProblem < 5 Then
            ' 
 الثانية الثالثة الرابعة الوضعية الاولى
            If NumbeProblem 
And SommeCp 8 _
                Or NumbeProblem 
And SommeCp And SommeCm And cgrand 1 _
                Or NumbeProblem 
And SommeCp And cgrand 1 _
                Or NumbeProblem 
And SommeCp 7 Then
                joib 
True
            Else
                joib 
False
            End 
If
 
           Messag()
 
           ' تحريك 3 اعواد
        ElseIf clic = 3 And NumbeProblem > 4 And NumbeProblem < 8 Then
            ' 
الوضعية 5-6-7
            If NumbeProblem 
And SommeCp And cgrand 1 _
                Or NumbeProblem 
And SommeCp And SommeCm And cgrand 1 _
                Or NumbeProblem 
And SommeCp 6 Then
                joib 
True
            Else
                joib 
False
            End 
If
 
           Messag()
 
           ' تحريك 4 اعواد
        ElseIf clic = 4 And NumbeProblem > 7 And NumbeProblem < 13 Then
            ' 
الوضعية -11-12 8-9-10
       
            If NumbeProblem 
And SommeCp And SommeCm 2 _
                Or NumbeProblem 
And SommeCp And cgrand 1 _
                Or NumbeProblem 
10 And SommeCp And cgrand 1 _
                Or NumbeProblem 
10 And SommeCp And SommeCm And cgrand 1 _
                Or NumbeProblem 
11 And SommeCp And SommeCm And cgrand 1 _
                Or NumbeProblem 
12 And SommeCp 5 Then
                joib 
True
            Else
                joib 
False
            End 
If
 
           Messag()
 
           ' تحريك 5 اعواد
        ElseIf clic = 5 And NumbeProblem > 12 Then
            ' 
الوضعية 13-14-15
            If NumbeProblem 
13 And SommeCp And cgrand 1 _
                Or NumbeProblem 
14 And SommeCp And cgrand 1 _
                Or NumbeProblem 
15 And SommeCp And SommeCm 2 Then
                joib 
True
            Else
                joib 
False
            End 
If
 
           Messag()
 
       End If

 
       If NumbeProblem 17 Then
            MessageBox
.Show("شكرا على تفاعلك مع اللعبة ممكن تعيد من جديد""عبد الهادي بهاب")
 
           restart()
 
       End If
 
   End Sub 

اذا كان  في كل حالة نشغل ميساج الصح او الخطا
ثم ننتقل الى السؤال التالي
PHP كود :
Sub Messag()
 
       If joib True Then
            score 
+= 1
            Labscore
.Text score
            MessageBox
.Show("جميل جدا تابع تقدمك""عبد الهادي بهاب")
 
           CaseProg(NumbeProblem 1).Image My.Resources.yes
        Else
            MessageBox
.Show("بقي في الشكل" vbNewLine SommeCp "  مربعات صغيرة   " vbNewLine SommeCm "  مربعات متوسطة  " vbNewLine cgrand "  مربع كبير  "" للاسف لقد اخطات اعد من جديد "MessageBoxButtons.OKMessageBoxIcon.Information)
 
           CaseProg(NumbeProblem 1).Image My.Resources.no
        End 
If
 
       Questions()
 
   End Sub 

اذا وصل الى السؤال الاخير  سنظهر له ميساج الاعادة و نعيد من جديد

PHP كود :
Sub restart()
 
       NumbeProblem 0
        For i 
0 To 16
            CaseProg
(i).BackColor Color.Yellow
            CaseProg
(i).Image Nothing
        Next
        Questions
()
 
   End Sub 


اظنني اتمتت شرح اكواد البرنامج

الملف السورس للتعديل و الاستفادة

[attachment=25457]

mp = http://vb4arb.com/

بالتوفيق في مشاريعكم
كلمة شكر و تقيم لا تفيك حقك مشكور جدا على هذه الامثلة و جزاك الله عنا كل خير موفق انشاء الله .
(17-08-20, 05:28 PM)asemshahen5 كتب : [ -> ]كلمة شكر و تقيم لا تفيك حقك مشكور جدا على هذه الامثلة و جزاك الله عنا كل خير موفق انشاء الله .

ما تعلمناه استاذ عاصم يجب ان نفيد به
شكرا على المرور الطيب
بارك الله بك اخي عبد الهادي على ماتقدمه 
وجزاك الله كل الخير
(19-08-20, 12:48 AM)ابراهيم ايبو كتب : [ -> ]
بارك الله بك اخي عبد الهادي على ماتقدمه 
وجزاك الله كل الخير

شكرا استاذ ابراهيم
و منكم نتعلم