ألعاب Jedlik

ألعاب Jedlik

تمرين تعلّمي

مقدمة

الأصناف

البنية الأساسية للبرمجة كائنية التوجه في C# هي الصنف، وهو مزيج من البيانات (الحقول) والسلوك (الطُرق). تُعرف حقول الصنف وطُرقه باسم أعضائه.

يمكن تقييد الوصول إلى الأعضاء عبر محدّدات الوصول، وأكثرها شيوعًا اثنان:

  • public: يمكن لأي كود الوصول إلى العضو (دون قيود).
  • private: لا يمكن الوصول إلى العضو إلا من كود داخل الصنف نفسه.

يمكنك أن تتخيل الصنف كقالب لإنشاء نسخ منه. ولإنشاء نسخة من صنف (وتُعرف أيضًا باسم كائن)، تُستخدم الكلمة المفتاحية new:

class Car
{
}

// Create two car instances
var myCar = new Car();
var yourCar = new Car();

للحقول نوع، ويمكن تعريفها في أي مكان داخل الصنف. تُعرّف الحقول العامة بترميز PascalCase، أما الحقول الخاصة فتُعرّف بترميز camelCase مع بادئة شرطة سفلية _:

class Car
{
    // Accessible by anyone
    public int Weight;

    // Only accessible by code in this class
    private string _color;
}

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

class Car
{
    // Will be set to specified value
    public int Weight = 2500;

    // Will be set to default value (0)
    public int Year;
}

var newCar = new Car();
newCar.Weight; // => 2500
newCar.Year;   // => 0

// Update value of the field
newCar.Year = 2018;

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

class CarImporter
{
    private int _carsImported;

    public void ImportCars(int numberOfCars)
    {
        // Update private field from public method
        _carsImported = _carsImported + numberOfCars;
    }
}

التعليمات

في هذا التمرين ستتلاعب بسيارة تحكّم عن بُعد، وقد ادّخرت أخيرًا ما يكفي من المال لشرائها.

تبدأ السيارات ببطارية ممتلئة (100%). في كل مرة تقود فيها السيارة باستخدام جهاز التحكم عن بُعد، تقطع 20 مترًا وتستهلك واحدًا بالمئة من شحن البطارية.

تحتوي سيارة التحكم عن بُعد على شاشة LED أنيقة تعرض معلومتين:

  • المسافة الإجمالية التي قطعتها، وتُعرض بالشكل: "Driven <METERS> meters".
  • شحن البطارية المتبقي، ويُعرض بالشكل: "Battery at <PERCENTAGE>%".

إذا وصل شحن البطارية إلى 0%، فلن تستطيع قيادة السيارة بعد ذلك، وستعرض شاشة البطارية "Battery empty".

لديك ست مهام، وستتعامل كل مهمة مع نسخة من سيارة التحكم عن بُعد.

1. اشترِ سيارة تحكّم عن بُعد جديدة تمامًا

نفّذ طريقة (static) RemoteControlCar.Buy() لتُرجع نسخة جديدة تمامًا من سيارة التحكم عن بُعد:

RemoteControlCar car = RemoteControlCar.Buy();

2. اعرض المسافة المقطوعة

نفّذ طريقة RemoteControlCar.DistanceDisplay() لتُرجع المسافة كما تظهر على شاشة LED:

var car = RemoteControlCar.Buy();
car.DistanceDisplay();
// => "Driven 0 meters"

3. اعرض نسبة شحن البطارية

نفّذ طريقة RemoteControlCar.BatteryDisplay() لتُرجع نسبة شحن البطارية كما تظهر على شاشة LED:

var car = RemoteControlCar.Buy();
car.BatteryDisplay();
// => "Battery at 100%"

4. حدّث عدد الأمتار المقطوعة عند القيادة

نفّذ طريقة RemoteControlCar.Drive() التي تُحدّث عدد الأمتار المقطوعة:

var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.DistanceDisplay();
// => "Driven 40 meters"

5. حدّث نسبة شحن البطارية عند القيادة

حدّث طريقة RemoteControlCar.Drive() لتُحدّث نسبة شحن البطارية:

var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.BatteryDisplay();
// => "Battery at 98%"

6. امنع القيادة عندما تكون البطارية فارغة

حدّث طريقة RemoteControlCar.Drive() بحيث لا تزيد المسافة المقطوعة ولا تنقص نسبة شحن البطارية عندما تكون البطارية فارغة (عند 0%):

var car = RemoteControlCar.Buy();

// Drain the battery
// ...

car.DistanceDisplay();
// => "Driven 2000 meters"

car.BatteryDisplay();
// => "Battery empty"
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
C# Exercism

مستعد لبدء ألعاب Jedlik؟

سجّل في Exercism لتتعلّم وتتقن C# عبر 62 مفهومًا178 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.