Menu
CoddyTech
flag Ar iconالعربيةdown icon

حالات اللعبة

جزء من قسم بناء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 14 من 56.

تكون اللعبة في حالة واحدة في كل مرة: انتظار اللاعب، أو قيد التشغيل، أو منتهية. قد تصبح قيمتا bool مثل isPlaying وisOver صحيحتين معًا عن طريق الخطأ، كما أن سلسلة نصية مثل "Playng" تُترجم برمجيًا دون خطأ ولا تطابق أبدًا. تحتوي C# على نوع لقائمة ثابتة من الخيارات، وهو enum. يستخدم ضوء عبور المشاة هذا النوع:

public enum Signal { Red, Yellow, Green }

public class Crossing : MonoBehaviour
{
    public Signal signal;

    void Update()
    {
        if (signal == Signal.Red && Input.GetMouseButtonDown(0))
        {
            signal = Signal.Green;
            Debug.Log("Walk!");
        }
    }

    public bool CanWalk()
    {
        return signal == Signal.Green;
    }
}

ينشئ enum Signal { Red, Yellow, Green } نوعًا جديدًا له ثلاث قيم بالضبط، تُكتب Signal.Red وSignal.Yellow وSignal.Green. يحتفظ الحقل Signal بإحدى هذه القيم في كل مرة؛ وتُجري المقارنة باستخدام == وتغيّر القيمة باستخدام =. يؤدي الخطأ الإملائي في Signal.Gren إلى خطأ في الترجمة البرمجية، لذا يظهر الخطأ قبل أن تضغط على Play.

يُعرَّف enum خارج الصنف، لذا يمكن لكل سكربت استخدام Signal، ويمكن لسكربت أحد المشاة استدعاء crossing.CanWalk(). يبدأ حقل enum جديد بالقيمة الأولى، وهي هنا Red. في Inspector، يظهر حقل enum عام على شكل قائمة منسدلة بقيمه. وتكون قيمة كل خيار في الداخل رقمًا يبدأ العدّ من 0: (int)Signal.Green تساوي 2.

challenge icon

التحدي

سهل

اعبر الأرضية دون لمس الحمم. السكريبتان GameManager (وهو مفرد) وLava موجودان؛ أضف حالات اللعبة.

  • في GameManager.cs، فوق الصنف، عرّف تعدادًا GameState بالقيم Ready وPlaying وGameOver بهذا الترتيب، وأضف إلى GameManager حقلًا عامًا من النوع GameState اسمه state. تبدأ اللعبة بحالة Ready.
  • عندما تكون اللعبة في حالة Ready، يبدأها مفتاح المسافة: تصبح الحالة Playing ويُسجَّل Go!.
  • يستدعي الحمم HitLava(). عندما تكون اللعبة في حالة Playing، ينهي ذلك اللعبة: تصبح الحالة GameOver ويُسجَّل Game over. لا يعيد مفتاح المسافة بدء لعبة انتهت أبدًا.
  • في Player.cs، تحرّك الأسهم اللاعب فقط عندما تكون الحالة Playing.

اضغط Play، وجرّب الأسهم قبل الضغط على مفتاح المسافة، ثم امشِ إلى الحمم، ثم اضغط Check.

جرّب بنفسك

using UnityEngine;

// صرّح عن التعداد GameState هنا: Ready, Playing, GameOver

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;
    // حقل عام من النوع GameState اسمه state

    void Awake()
    {
        Instance = this;
    }

    void Update()
    {
        // عندما تكون الحالة Ready، يبدأ Space اللعبة ويسجّل Go!
    }

    public void HitLava()
    {
        // عندما تكون الحالة Playing، تنتهي اللعبة: سجّل Game over
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس بناء ألعاب حقيقية