مقدمه

بازی حدس عدد یک مسئله‌ی کلاسیک مقدماتی در برنامه‌نویسی است که ما در اینجا قصد داریم آن را با استفاده از زبان برنامه‌نویسی C# پیاده‌سازی کنیم. کارکرد این بازی به این صورت است که ابتدا برنامه یک عدد صحیح تصادفی بین 1 تا 100 تولید می‌کند و سپس از بازیکن خواسته می‌شود که این عدد را حدس بزند. اگر حدس او صحیح باشد، یک پیغام تبریک برای وی نمایش داده خواهد شد و در غیر این صورت، پیغامی نمایش داده خواهد شد که مشخص می‌کند عددی که حدس زده از عدد مورد نظر کوچکتر است یا بزرگتر تا بازیکن حدس بعدی را بر اساس آن تعیین کند.


ایجاد و تنظیم یک پروژه جدید

C# زبانی است که در سال ۲۰۰۲ به همراه فریمورک .NET توسط مایکروسافت معرفی شد. از ان زمان تا امروز، تغییرات زیادی در معماری فریمورک .NET که حالا دیگر به معنای واقعی کلمه Cross-platform یا مستقل از پلتفرم است و زبان برنامه نویسی C# به وجود امده است.

C# یک زبان استاتیک و کامپایلری است که مثل جاوا کامپایل برنامه را در دو مرحله انجام می‌دهد. در مرحله‌ی اول، کدها نه به زبان ماشین بلکه به یک زبان میانی و شبه‌اسمبلی به نام CIL کامپایل می‌شود و در مرحله‌ی دوم، هنگام اجرا این کدهای CIL به کد ماشین تبدیل می‌شوند.

قبل از اینکه شروع به نوشتن بازی حدس عدد کنیم، ابتدا مطمئن شوید که .NET SDK روی سیستم شما نصب باشد. برای این کار، کامند زیر را تست کنید:

> dotnet --list-sdks
8.0.204 [C:\Program Files\dotnet\sdk]

خروجی کامند باید چیزی شبیه بالا باشد که حاکی از نصب نسخه‌ی 8 از .NET SDK است. البته روی سیستم شما ممکن است نسخه‌ی متفاوتی نصب باشد.

در ضمن، ما در اینجا از Visual Studio Code برای ساخت برنامه استفاده می‌کنیم اما شما می‌توانید از Visual Studio یا هر IDE دیگری که مایلید، استفاده کنید.

برای ایجاد پروژه، ابتدا یک دایرکتوری به نام GuessTheNumber ایجاد کنید و آن را در vscode باز کنید. سپس، کامند زیر را در ترمینال vscode اجرا کنید:

> dotnet new console --framework net8.0 --use-program-main

به این ترتیب، فایل‌های مورد نیاز پروژه و از جمله فایلی به نام Program.cs ایجاد می‌شود که دارای محتوای زیر است:

Copy Icon C#
namespace GuessTheNumber;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
    }
}
در نسخه‌های قدیمی‌تر .NET یک یا چند عبارت using نیز در بالای فایل Program.cs دیده می‌شد که باعث اضافه‌شدن چند فضای نام پرکاربرد به پروژه می‌شد. اما در نسخه‌های اخیر، این فضاهای نام و از جمله فضای نام System به طور ضمنی به پروژه اضافه می‌شوند و اعضای آنها در دسترس برنامه قرار دارند.

در اولین خط این فایل، عبارت namespace GuessTheNumber; دیده می‌شود که به این معناست که یک فضای نام هم‌نام با پروژه به برنامه اختصاص داده شده است. سپس، کلاس Program را می‌بینیم که در صورت تمایل، می‌توانیم هر نام دیگری را به آن اختصاص دهیم و درون این کلاس متد main دیده می‌شود که نقطه‌ی ورود یا Entry point برنامه‌های اجرایی C# محسوب می‌شود. یعنی با اجرای برنامه، کدهای این فایل اجرا می شوند.

در ادامه، با ویرایش این فایل و نوشتن کدهای مورد نظرمان، بازی حدس عدد را پیاده‌سازی می‌کنیم.

پیاده‌سازی بازی در C#

ابتدا می‌توانید نگاهی داشته باشید به وضعیت نهایی فایل Program.cs و در ادامه، توضیحاتی در مورد بخش‌های مختلف این کدها اراسه می‌شود.

Copy Icon C#
namespace GuessTheNumber;

class Program
{
    static void Main()
    {
        Console.WriteLine("Guess the number!");
            
        // Generate a random number between 1 and 100 (inclusive)
        Random random = new Random();
        int secretNumber = random.Next(1, 101);
            
        while (true)
        {
            Console.WriteLine("Please input your guess.");
            
            // Read input from the user
            string input = Console.ReadLine();
            
            // Try to parse the input to an integer
            if (int.TryParse(input, out int guess))
            {
                Console.WriteLine($"You guessed: {guess}");
            
                if (guess < secretNumber)
                {
                    Console.WriteLine("Too small!");
                }
                else if (guess > secretNumber)
                {
                    Console.WriteLine("Too big!");
                }
                else
                {
                    Console.WriteLine("You win!");
                    break;
                }
            }
            else
            {
                // If the input is not a valid number, continue the loop
                Console.WriteLine("Invalid input, please enter a number.");
            }
        }
    }
}

اگر می‌خواهید برنامه را اجرا کنید، کامند dotnet run را در حالی که در ایرکتوری پروژه قرار دارید، اجرا کنید.

عملکرد بخش‌های مختلف کدهای بالا به این صورت است:

  • ابتدا با استفاده از متد WriteLine از کلاس Console عنوان بازی در کنسول نمایش داده می‌شود. کلاس Console عضوی از فضای نام System است که همانطور که گفتیم، به طور ضمنی در دسترس برنامه قرار دارد و به همین دلیل است که ما می‌توانیم به جای System.Console از Console استفاده کنیم.
  • یک شیء از کلاس Random ایجاد شده و با فراخوانی متد Next روی این شیء، یک عدد صحیح تصادفی بین 1 تا 100 تولید شده و در متغیری به نام secretNumber ذخیره شده است.
  • در ادامه، یک حلقه‌ی نامتناهی ایجاد شده که کارهای درون حلقه را تا زمانی که کاربر عدد صحیح را پیدا کند، تکرار می‌کند.
  • ورودی کاربر در متغیری از نوع String و دارای نام string ذخیره شده و سپس، با استفاده از یک گزاره‌ی if و متد TryParse بررسی شده که آیا این ورودی قابل تبدیل به یک عدد صحیح هست یا خیر.
  • اگر امکان تبدیل وجود داشته باشد، برنامه با مقایسه‌ی ورودی کاربر با عدد تصادفی ذخیره‌شده در secretNumber ادامه پیدا می‌کند و در غیر این صورت، پیغامی مننی بر معتبر نبودن ورودی کاربر نمایش داده می‌شود.
  • اگر حدس کاربر درست باشد، کلمه کلیدی break باعث توقف حلقه شده و برنامه با نمایش یک پیغام تبریک به پایان می‌رسد.