Menu
CoddyTech

حالات اللعبة

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

تكون اللعبة في حالة واحدة في كل مرة: انتظار اللاعب، أو قيد التشغيل، أو منتهية. قد ينتهي الأمر بقيمتين منطقيتين مثل 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 بطريقة خاطئة تؤدي إلى خطأ في الترجمة البرمجية، لذا يظهر الخطأ قبل أن تضغط على «العب».

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

challenge icon

التحدي

سهل

امنح عبور الحمم البركانية ثلاث حالات.

  1. أعلِن public enum GameState { Ready, Playing, GameOver } فوق الصنف GameManager، وأضِف إليه public GameState state;.
  2. في Update()، عندما تكون الحالة Ready، يجعل Space الحالة Playing ويسجّل Go!. وفي HitLava()، عندما تكون الحالة Playing، عيّن GameOver وسجّل Game over.
  3. في Player.cs، اقرأ مدخلات مفاتيح الأسهم فقط عندما تكون GameManager.Instance.state == GameState.Playing.

اضغط «العب»: ستنتظر مفاتيح الأسهم الضغط على Space. ثم اضغط «تحقق».

جرّب بنفسك

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
    }
}

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

تدرّب بنفسك: Playground لـ Unity