تعلم كيفية البرمجة ب #C


الدرس: TP: لعبة أكثر أو أقل


الصفحة السابقة
نجاح باهر ، و زيادة مطردة في عدد الأشياء التي نعرفها. إنه لشيء رائع. لقد بدأنا في أن نكون قادرين على كتابة التطبيقات التي تحتوي على القليل من الصداع! 

وأخيرا ... أنا ، أنا هناك! و أنتم ؟ هذا هو ما سوف نتحقق منه في هذا TP .
معرفة كيفية التفاعل مع المستخدم أمر مهم. إليك لعبة TP صغيرة في شكل إنشاء لعبة بسيطة تتيح لك التدرب. الفكرة هي جعل اللعبة الكلاسيكية أكثر أو أقل ...

تعليمات للقيام بالعمل


أذكرك بالقواعد. يقوم الكمبيوتر بحساب رقم عشوائي لنا وعلينا تخمينه. في كل مرة يتم إدخال عدد ، يخبرنا ما إذا كان الرقم الذي تم إدخاله أكبر أو أقل من الرقم الذي نبحث عنه. بمجرد العثور عليه ، يخبرنا عدد المرات التي تمكنا فيها من العثور على الرقم السري.
لهذا TP ، يمكنك فعل كل شيء تقريبًا. كل ما تحتاجه هو التعليمات للحصول على رقم عشوائي. ومن هنا ، تقوم هذه التعليمة بإرجاع رقم يتراوح بين 0 و 100 (مستبعد). لا تركز كثيرًا على بناء الجملة ، فستكون لدينا الفرصة لفهم ما هو بالضبط في الفصل التالي:

    int valeurATrouver = new Random().Next(0, 100); 
    
المبدأ هو ما يلي تقريبًا: حتى يتم العثور على القيمة الصحيحة ، يجب علينا إدخال قيمة جديدة. في هذه الحالة ، تخبرنا وحدة التحكم ما إذا كانت القيمة كبيرة جدًا أم صغيرة جدًا. سيكون من الضروري بالطبع زيادة العداد في كل محاولة.

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

الحل المقترح


إليكم الحل المقترح لهذا TP .
بالطبع ، هناك العديد من الطرق لبرمجة هذه اللعبة الصغيرة ، فإذا نجحت ، فهذا يعني أن حلك جيد. حلي يعمل ، ومن هنا:

static void Main(string[] args)
{
    int valeurATrouver = new Random().Next(0, 100);
    int nombreDeCoups = 0;
    bool trouve = false;
    Console.WriteLine("Veuillez saisir un nombre compris entre 0 et 100 (exclu)");
    while (!trouve)
    {
        string saisie = Console.ReadLine();
        int valeurSaisie;
        if (int.TryParse(saisie, out valeurSaisie))
        {
            if (valeurSaisie == valeurATrouver)
                trouve = true;
            else
            {
                if (valeurSaisie < valeurATrouver)
                    Console.WriteLine("Trop petit ...");
                else
                    Console.WriteLine("Trop grand ...");
            }
            nombreDeCoups++;
        }
        else
            Console.WriteLine("La valeur saisie est incorrecte, veuillez recommencer ...");
    }
    Console.WriteLine("Vous avez trouvé en " + nombreDeCoups + " coup(s)");
} 
نبدأ بالحصول على رقم عشوائي بالتعليمات التي قدمتها في البيان. ثم لدينا التهيئات المتغيرات .  سيسمح العدد الصحيح nombreDeCoups بتخزين عدد الاختبارات وسيسمح "trouve" المنطقي بوجود شرط خروج من حلقة.
تبدأ الحلقة الخاصة بنا ولا تنتهي حتى تنتقل "trouve" المنطقية إلى قيمة صحيحة ( true) .

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

في جميع الحالات ، سنزيد العدّاد.
أخيرًا ، في نهاية الحلقة ، سنشير إلى فوز اللاعب بالإضافة إلى قيمة العدّاد المستخدمة للعثور على الرقم السري.
جزء من اللعبة يمكن أن يكون:
c sharp .net framework

اذهب أبعد من ذلك


بالطبع من الممكن دائمًا تحسين اللعبة ، ويمكننا على سبيل المثال إضافة عنصر تحكم على أطراف الإدخال. وبالتالي ، إذا أدخل المستخدم رقمًا أكبر من أو يساوي 100 أو أقل من 0 ، فيمكننا تذكيره بحدود الرقم العشوائي.

وبالمثل ، في النهاية ، بدلاً من عرض "حركة (coup)" ، يمكننا اختبار قيمة عدد الحركات. إذا كان يساوي 1 ، فإننا نعرض "coup" في صيغة المفرد ، وإلا "coups" في صيغة الجمع.
حلقة يمكن أيضا أن تكون مختلفة قليلا. بدلاً من اختبار حالة الإخراج على قيمة منطقية ، يمكننا استخدام الكلمة الأساسية break . وبالمثل ، يمكننا تخفيف الكتابة بالكلمة الرئيسية continue .
مثلا :

static void Main(string[] args)
{
    int valeurATrouver = new Random().Next(0, 100);
    int nombreDeCoups = 0;
    Console.WriteLine("Veuillez saisir un nombre compris entre 0 et 100 (exclu)");
    while (true)
    {
        string saisie = Console.ReadLine();
        int valeurSaisie;
        if (!int.TryParse(saisie, out valeurSaisie))
        {
            Console.WriteLine("La valeur saisie est incorrecte, veuillez recommencer ...");
            continue;
        }
        if (valeurSaisie < 0 || valeurSaisie >= 100)
        {
            Console.WriteLine("Vous devez saisir un nombre entre 0 et 100 exclu ...");
            continue;
        }
        nombreDeCoups++;
        if (valeurSaisie == valeurATrouver)
            break;
        if (valeurSaisie < valeurATrouver)
            Console.WriteLine("Trop petit ...");
        else
            Console.WriteLine("Trop grand ...");
    }
    if (nombreDeCoups == 1)
        Console.WriteLine("Vous avez trouvé en " + nombreDeCoups + " coup");
    else
        Console.WriteLine("Vous avez trouvé en " + nombreDeCoups + " coups");
} 
كل هذا مسألة ذوق. أنا شخصيا أفضل النسخة السابقة لا أفضل كثيرا استعمال  break و continue . ولكن قبل كل شيء ، الجميع يفعلون كما يحلو لهم ، الشيء المهم هو أن لدينا متعة في كتابة البرنامج وتشغيله.

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

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

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