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


الدرس: وحدة تحكم ++


الصفحة السابقة
لقد وصلت إلى نهاية الدورة ، أحسنت! أقترح عليك الانتهاء مع بعض النصائح لإيضاح قليلا  وحدة التحكم الخاصة بك. 
لقد تعلمنا الكتابة على الشاشة ، مع الوظيفة   Console.WriteLine (أو حتى Console.Write ) . لقد تعلمنا أيضًا قراءة إدخال المستخدم ، خاصةً مع الوظيفة  Console.ReadLine(). ولكن هناك الكثير الذي يمكننا القيام به! هذا هو ما سنراه الآن.

اكتب بالألوان في وحدة التحكم


واحدة من أول الأشياء السهلة المتعلقة بوحدة التحكم هي تغيير اللون الذي نكتب به ، مما سيؤدي إلى زيادة سطوع وحدة التحكم الصارمة هذه. حسنًا ، لا يكفي عمل لوحة بيكاسو لأن لدينا 16 لونًا فقط تحت تصرفنا ، لكن هذا قد يكون كافياً لرؤية الحياة باللون الوردي .
الألوان هي عمل تعداد ConsoleColor  . لديك تحت تصرفك الألوان التالية: 
اللون ترجمة
Black أسود
Blue أزرق
Cyan سماوي (الأزرق والأخضر)
DarkBlue الأزرق الداكن
DarkCyan سماوي غامق (الأزرق الداكن والأخضر)
DarkGray رمادي غامق
DarkGreen اللون الأخضر الداكن
DarkMagenta أرجواني داكن (أحمر غامق أرجواني)
DarkRed احمر داكن
darkyellow أصفر داكن (مغرة)
Gray رمادي
Green أخضر
Magenta أرجواني (أحمر أرجواني)
Red أحمر
White أبيض
Yellow أصفر
هذه هي الألوان التي يمكنك استخدامها إما للكتابة أو في الخلفية. ولهذا سنستخدم الخصائص ForegroundColor و BackgroundColor .
لا شيء مثل القيام ببعض التجارب للفهم:

Console.ForegroundColor = ConsoleColor.DarkBlue;
Console.BackgroundColor = ConsoleColor.Yellow;
Console.Write("Hello ");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.BackgroundColor = ConsoleColor.Red;
Console.Write("les couleurs");
Console.ForegroundColor = ConsoleColor.Black;
Console.BackgroundColor = ConsoleColor.White;
Console.Write(" dans la console\n");
مما يعطينا:
c sharp .net framework
في وحدة التحكم
يمكنك أيضًا إعادة تعيين الألوان المحددة باستخدام الوظيفة:

Console.ResetColor();

شاشة واضحة


لا شيء يمكن أن يكون أكثر بساطة لمسح الشاشة. فقط استدعاء الوظيفة Console.Clear ()  .
في المثال التالي ، كل 10 عروض ننتظر إدخالًا يمسح الشاشة:

for( int i = 1; i <= 40; i++ )
{
    Console.WriteLine("Ligne numéro " + i);
    if( i % 10 == 0 )
    {
        Console.ReadKey();
        Console.Clear();
    }
}
ليس لدي الكثير لقوله... أنه يمسح الشاشة!

وضع النص في مكانه


يمكنك أيضًا عرض النص في أي مكان في وحدة التحكم. لا يوجد عرض يبدأ من أعلى اليسار ، مع الوظيفة Console.SetCursorPosition ستتمكن من وضع النص في المكان الذي تريده. هذه الوظيفة تأخذ مُدخلين:
  • الأول هو عدد صحيح يتوافق مع عدد الأعمدة إزاحة من الزاوية اليسرى العليا؛
  • والثاني يتوافق مع عدد خطوط الإزاحة ، نسبةً إلى الزاوية اليسرى العليا دائمًا.
فيما يلي مثال على التعليمات البرمجية للكتابة إلى مواقع مختلفة في وحدة التحكم:

Console.WriteLine("Hello world");
Console.SetCursorPosition(25, 7);
Console.WriteLine("Hello world aussi");
Console.WriteLine("Encore Hello world");
يعطي :
c sharp .net framework
الكتابة في أماكن مختلفة في وحدة التحكم
ستلاحظ أننا إذا أعدنا الكتابة بعد تغيير مؤشر المكان ، فإنه يكتب ولكنه يعيد وضعه في أقصى اليسار.
لاحظ أنه من الممكن معرفة مكان المؤشر ، وذلك بفضل الخصائص Console.CursorLeft و Console.CursorTop . لنعدّل المثال السابق:

Console.WriteLine("Hello world");
int x = Console.CursorLeft;
int y = Console.CursorTop;
Console.SetCursorPosition(25, 7);
Console.WriteLine("Hello world aussi");
Console.SetCursorPosition(x, y);
Console.WriteLine("En dessous du premier");
وسوف نحصل على:
c sharp .net framework
حفظ موقف المؤشر
أخيرًا ، أدناه طريقة صغيرة لتوسيط النص في وحدة التحكم:

static void Main(string[] args)
{
    CentrerLeTexte("Hello world");
    CentrerLeTexte("Je suis un texte plus long");
}

private static void CentrerLeTexte(string texte)
{
    int nbEspaces = (Console.WindowWidth - texte.Length) / 2;
    Console.SetCursorPosition(nbEspaces, Console.CursorTop);
    Console.WriteLine(texte);
}
يعطي :
c sharp .net framework
مركز النص على وحدة التحكم
سيكون لديك تخمين أن الخاصية Console.WindowWidth تُرجع عرض وحدة التحكم ، في عدد الأعمدة.

نقل النص


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

Console.MoveBufferArea(5, 6, 7, 8, 9, 10);
النص الموجود في ((5,6),(12,14)) سينتقل إلى الموضع (9،10) .
بدلاً من الكلام الطويل ، لاحظ وقم بتنفيذ التعليمات البرمجية التالية:

private static void Main(string[] args)
{
    int i = 0;
    int j = 0;
    int largeur = 21;
    int hauteur = 4;
    Console.WriteLine(@"      .--------.");
    Console.WriteLine(@" ____/_____|___ \___");
    Console.WriteLine(@"O    _   - |   _   ,*");
    Console.WriteLine(@" '--(_)-------(_)--'");
    while (true)
    {
        ConsoleKeyInfo info = Console.ReadKey(true);
        switch (info.Key)
        {
            case ConsoleKey.LeftArrow:
                if( i > 0 )
                {
                    Console.MoveBufferArea(i, j, largeur, hauteur, i - 1, j);
                    i--;
                }
                break;                       
            case ConsoleKey.RightArrow:
                if (i < Console.WindowWidth - largeur)
                {
                    Console.MoveBufferArea(i, j, largeur, hauteur, i + 1, j);
                    i++;                         
                }
                break;                       
            case ConsoleKey.UpArrow:
                if( j > 0 )
                {
                    Console.MoveBufferArea(i, j, largeur, hauteur, i, j - 1);
                    j--;
                }
                break;                       
            case ConsoleKey.DownArrow:
                Console.MoveBufferArea(i, j, largeur, hauteur, i, j + 1);
                j++;
                break;
        }
        if (info.Key == ConsoleKey.Q)
            break;
    }
}
يعرض سيارة صغيرة في الفن ascii على وحدة التحكم ونقلها مع سهام الاتجاه.
لذلك ، أليس هذا التطبيق القاتل في المستقبل ؟

ارسم بأحرف خاصة


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

public static void Main()
{
    char cLight = Encoding.GetEncoding(850).GetChars(new byte[] { 176 })[0];
    char cDark = Encoding.GetEncoding(850).GetChars(new byte[] { 177 })[0];
    char cDarkLight = Encoding.GetEncoding(850).GetChars(new byte[] { 178 })[0];

    DessinerHerbe(cLight);
    DessinerMaison(cDark);
    DessinerToit(cDark);
    DessinerPorte(cDarkLight);

    Console.ResetColor();
    Console.SetCursorPosition(0, 20);
    Console.CursorVisible = false;
    Console.ReadKey(true);
}

private static void DessinerPorte(char cDarkLight)
{
    Console.BackgroundColor = ConsoleColor.Red;
    for (int j = 0; j < 3; j++)
    {
        Console.SetCursorPosition(33, 11 + j);
        for (int i = 0; i < 4; i++)
        {
            Console.Write(cDarkLight);
        }
    }
}

private static void DessinerToit(char cDark)
{
    Console.BackgroundColor = ConsoleColor.DarkRed;
    for (int i = 0; i < 6; i++)
    {
        Console.SetCursorPosition(35 + i, i + 2);
        Console.Write(cDark);
        Console.SetCursorPosition(35 - i, i + 2);
        Console.Write(cDark);
    }
}

private static void DessinerMaison(char cDark)
{
    Console.BackgroundColor = ConsoleColor.DarkMagenta;
    for (int j = 0; j < 7; j++)
    {
        Console.SetCursorPosition(30, 7 + j);
        for (int i = 0; i < 11; i++)
        {
            Console.Write(cDark);
        }
    }
}

private static void DessinerHerbe(char cLight)
{
    Console.SetCursorPosition(0, 10);
    Console.BackgroundColor = ConsoleColor.Green;
    for (int j = 0; j < 10; j++)
    {
        for (int i = 0; i < Console.WindowWidth; i++)
        {
            Console.Write(cLight);
        }
    }
} 
حسنًا ، أنا بعيدًا عن امتلاك مواهب مصمم جرافيك ، لكن إليك ما يعطيه:
c sharp .net framework
ارسم في وحدة التحكم
جميل أليس كذلك؟

تشغيل الصوت الأساسي


طريقة Console.Beep  قادرة على تشغيل صوت صغير عبر السماعة الداخلية للكمبيوتر. يمكن استخدامه من خلال توفير تردد الصوت وكذلك الوقت (بالميلي ثانية) الذي يجب أن يستمر الصوت فيه.
أنا استخدمه في هذا المثال لتشغيل الملاحظات الأولى من Au clair de la lune :

int noteDo = 262;
int noteRe = 294;
int noteMi = 330;
int noire = 400;
int blanche = 800;

Console.Beep(noteDo, noire);
Console.Beep(noteDo, noire);
Console.Beep(noteDo, noire);
Console.Beep(noteRe, noire);
Console.Beep(noteMi, blanche);
Console.Beep(noteRe, blanche);
Console.Beep(noteDo, noire);
Console.Beep(noteMi, noire);
Console.Beep(noteRe, noire);
Console.Beep(noteRe, noire);
Console.Beep(noteDo, noire); 
أنا متأكد من أنك تلاحظ موهبتي كموسيقي !
بالطبع ، لا توجد بطاقة صوت هنا ، فقط السماعة التي تترك جودتها شيئًا مطلوبًا ... لكن للحصول على تأثير صوتي صغير ، من السهل القيام به ، أليس كذلك؟

في الخلاصة


  • يمكن إثراء وحدة التحكم عن طريق أساليب أخرى من وحدة التحكم.
  • من الممكن تعيين نص في اللون أو خلفيته.
  • يمكنك مسح الشاشة مع Console.Clear() .
  • يمكنك نقل النص مع Console.MoveBufferArea() .
  • يمكنك وضع المؤشر باستخدام Console.SetCursorPosition() .
  • يمكننا تشغيل الصوت بفضل Console.Beep() .
وهنا أنت ، أكملت هذه الدورة! أنت تعرف الآن أساسيات لغة C# ويمكنك الآن إنشاء تطبيقات تفاعلية صغيرة من وحدة التحكم الخاصة بك ... لكن لا يزال لدى C# الكثير لتقدمه.