الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لعبة مفيدة مع شرح مختصر للكود

مغلق
بدأه HMS في 11 نوفمبر 2004 · 8 رد · 1,271 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أخواني الأحبة أعضاء المنتدى الجدد،

أقدم لكم هذه اللعبة الصغيرة، مرفقاً إياها ومرفقاً الكود كاملاً:

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

أما اللعبة التي أرفقتها هنا فلا يوجد بها صور بل عبارة عن 52 زراً مقسمة الى أربعة صفوف، الصف الأول والثاني يوجد فيهما حروف اللغة الإنجليزية Capital Letters (لون خلفية الأزرار حمراء) والصفان الثالث والرابع Small Letters (لون خلفية الأزرار زرقاء)، ويقوم المستخدم بالنقر على زر ما من الأزرار الحمراء (أو الزرقاء) ليظهر الحرف الأبجدي الذي يخفيه، فيذهب الى المجموعة الثانية وينقر على ما يشاء من أزرتها ليظهر الحرف الذي يخفيه، فإن تطابق الحرفان (مثلاً حرف D وd) فإن البرنامج يقوم بشطبهما من النموذج ويسجل نقطة للمستخدم، وهكذا يستمر المستخدم على هذا المنوال حتى ينهي الأزرة كاملة وهنا تظهر رسالة للمستخدم تبين له الوقت المستغرق لإنهاء اللعبة وعدد نقرات الفأرة.

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

* قد تكون اللعبة مفيدة للأطفال الذين يودون تعلم الأبجدية الإنجليزية (ربط الحروف الكبيرة والصغيرة).

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

الفوائد المتوخاة من دراسة كود اللعبة:

1) تعلم كيف إضافة الأدوات الى البرنامج في وقت التشغيل، فقد أضفت الأزرار ال 52 بهذه الطريقة وقمت بإضافة Handler لها يطلق حدث Click.

2) تعلم كيف إستخدام loop وكيف إستخدام ال For Next، وقد إستعنت بهاتين الخاصتين بالتحديد لترتيب الحروف عشوائياً بصورة لا يمكن أن تتطابق مواقع الحروف في أي لعبتين على الإطلاق.

3) تعلم كيفية إستخدام Timer.

4) كيفية إستخدام جمل الشرط، فالبرنامج مليء بها.

هذا بالإضافة الى فوائد أخرى يمكن ملاحظتها من الكود.

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

HMS.rar

Learn Japanese :>>> http://www.nouben.com/

#2

في ركن التعريفات،نكتب الكود التالي

Private Vis1 As Boolean
    Private Vis2 As Boolean
    Private Button1_Text As String
    Private Button2_Text As String
    Private rand As New Random
    Private Duplicated As Boolean
    Private NewGame As Boolean
    Private Panel1 As Panel
    Private Score As Integer
    Private Clicks As Integer

Learn Japanese :>>> http://www.nouben.com/

#3

هذا الكود هو ال Handler للأزرة ال 52

Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        With CType(sender, Button)
            If Vis1 = False And .Text = "" Then
                .Text = .Tag
                Button1_Text = .Tag
                Vis1 = True
            ElseIf Vis1 = True And Vis2 = False And .Text = "" Then
                .Text = .Tag
                Button2_Text = .Tag
                Vis2 = True
            ElseIf Vis1 = True And Vis2 = True And .Text = "" Then
                MessageBox.Show("لا يمكنك فتح أكثر من حرفين في نفس الوقت، أغلق أحدهما", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
            ElseIf Vis1 = True And Vis2 = True And .Text <> "" Then
                .Text = ""
                Button2_Text = ""
                Vis2 = False
            ElseIf Vis1 = False And .Text <> "" Then
                .Text = ""
                Button1_Text = ""
                Vis1 = False
            ElseIf Vis2 = False And .Text <> "" Then
                .Text = ""
                Button1_Text = ""
                Vis1 = False
            End If
        End With

        If Button1_Text <> "" And Button2_Text <> "" Then
            If Button1_Text.ToUpper = Button2_Text.ToUpper Then
                Score += 1
                For x As Short = 0 To 51
                    With Panel1.Controls(x)
                        If .Text <> "" Then
                            .Enabled = False
                            .BackColor = Color.White
                        End If
                    End With
                Next
                Vis1 = False
                Vis2 = False
                Button1_Text = ""
                Button2_Text = ""
            End If
            If Score = 26 Then
                Timer1.Enabled = False
                If MessageBox.Show("لقد أنهيت اللعبة في " & lblTimer.Text & " ثانية" & vbCrLf & " وكان عدد نقرات الفأرة " & Clicks & vbCrLf & "هل تريد أن تلعب ثانية؟", "Well Done", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign) = DialogResult.Yes Then
                    btnNewGame.PerformClick()
                End If
            End If
        End If
        Clicks += 1
        lblClicks.Text = "No. of Clicks = " & Clicks
    End Sub

Learn Japanese :>>> http://www.nouben.com/

#4

وهذا كود الزر الوحيد الذي وضعته في وقت التصميم:

Private Sub btnNewGame_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNewGame.Click
        Me.SuspendLayout()

        Dim Button(52) As Button
        Dim Capital(25) As String
        Dim Small(25) As String

        If NewGame = True Then
            Me.Panel1.Dispose()
            Vis1 = False
            Vis2 = False
            Clicks = 0
            Score = 0
            lblTimer.Text = 0
        End If

        Panel1 = New Panel
        Panel1.Size = New Size(416, 128)
        Panel1.Location = New Point(8, 8)
        Controls.Add(Panel1)

        Capital(0) = rand.Next(65, 91)
        For x As Integer = 1 To 25
            Do
                Dim temp As Integer = rand.Next(65, 91)
                For Y As Integer = 0 To x - 1
                    If Capital(Y) = temp Then
                        Duplicated = True
                        Exit For
                    Else
                        Capital(x) = temp
                        Duplicated = False
                    End If
                Next
            Loop While Duplicated = True
        Next

        Small(0) = rand.Next(97, 123)
        For x As Integer = 1 To 25
            Do
                Dim temp As Integer = rand.Next(97, 123)
                For Y As Integer = 0 To x - 1
                    If Small(Y) = temp Then
                        Duplicated = True
                        Exit For
                    Else
                        Small(x) = temp
                        Duplicated = False
                    End If
                Next
            Loop While Duplicated = True
        Next

        Try
            For X As Integer = 1 To 52

                Button(X) = New Button
                With Button(X)
                    .Size = New Size(32, 32)
                    .Font = New Font("Times New Roman", 18, FontStyle.Bold, GraphicsUnit.Point, 1)
                    .Left = ((X - 1) Mod 13) * .Width
                    .Top = ((X - 1) \ 13) * .Height
                    If X <= 26 Then
                        .BackColor = Color.Red
                        .ForeColor = Color.White
                        .Tag = Chr(Capital(x - 1))
                    Else
                        .BackColor = Color.Blue
                        .ForeColor = Color.White
                        .Tag = Chr(Small(x - 27))
                    End If
                End With
                AddHandler Button(X).Click, New EventHandler(AddressOf Button_Click)
                Panel1.Controls.Add(Button(X))
            Next
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

        NewGame = True
        lblClicks.Visible = True
        lblTimer.Visible = True
        Timer1.Enabled = True
    End Sub
    Private Sub menuNewGame_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuNewGame.Click
        btnNewGame.PerformClick()
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        lblTimer.Text = Val(lblTimer.Text) + 1
    End Sub
    Private Sub menuExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuExit.Click
        Me.Dispose()
    End Sub
    Private Sub menuAbout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuAbout.Click
        Dim formAbout As New Form2
        formAbout.ShowDialog()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

Learn Japanese :>>> http://www.nouben.com/

#5

المعذرة، كان الأصل أن أرفق ال Solution للعبة وليس فقط الملف التنفيذي، ها هي ال Solution.

HMS.rar

Learn Japanese :>>> http://www.nouben.com/

#6

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

بارك الله فيك

الفريق المصري للبرمجة

تحليل وتصميم برامج قواعد بيانات لاتصال بينا masry4u@hotmail.com

#7

شكراً أخي الحبيب كفاح، أنت دوماً تفرحني بردودك على مشاركاتي.

كل عام وأنت بألف خير بحلول عيد الفطر السعيد.

Learn Japanese :>>> http://www.nouben.com/

#8

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

الكود بتاع البرنامج جميل جداً

شكراً أخي العزيز ................................................ز

#9

شكراً أخي الحبيب على تشجيعك.

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

شكراً لك ثانية.

Learn Japanese :>>> http://www.nouben.com/

هذا الموضوع مغلق.

مواضيع مشابهة