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

الجدران

الدرس 4 من 14 في دورة لعبة الثعبان ثلاثية الأبعاد في Unity على Coddy.

تمتد خلايا اللوحة من -7 إلى 7 على المحور x وعلى المحور z، لذا تكون الخلية على اللوحة عندما تكون قيمة كلٍّ من x وz بين -7 و7. وبما أن اللوحة متمركزة عند 0، فإن اختبارًا واحدًا يغطي الجانبين: تكون Mathf.Abs(x) > 7 صحيحة بعد تجاوز أيٍّ من الحافتين.

اختبر الخلية التي يوشك الرأس على دخولها قبل أن يتحرك إليها. عندئذٍ، إذا اصطدمت الأفعى بجدار، فستبقى في آخر خلية على اللوحة بدلًا من أن ينتهي بها الأمر داخل الحدود. ويُتحقَّق بالطريقة نفسها من رخٍّ على رقعة شطرنج مرقّمة من 0 إلى 7:

Vector3 target = transform.position + move;
if (target.x < 0 || target.x > 7 || target.z < 0 || target.z > 7)
{
    return;   // خارج رقعة الشطرنج: تبقى القلعة في مكانها
}
transform.position = target;

يؤدي الاصطدام بجدار إلى إنهاء اللعبة، وتتوقف الأفعى نهائيًا. وتُحقّق ذلك قيمة bool يختبرها Update() أولًا: إذ يؤدي return في الأعلى إلى تخطي المفاتيح والمؤقّت معًا.

challenge icon

التحدي

سهل
  1. أضف public int edge = 7; (تمتد خلايا اللوحة من -edge إلى edge) وpublic bool alive = true;.
  2. في Step()، بعد تعيين direction، احسب next، وهي الخلية التي سيتحرك الرأس إليها. إذا كانت خارج اللوحة، فاستدعِ Die() ثم أعد التنفيذ دون تحريك الرأس؛ وإلا فحرّك الرأس إلى next.
  3. اكتب void Die()، التي تعيّن alive إلى false.
  4. ابدأ Update() بإرجاع التنفيذ عندما لا يكون الثعبان حيًا، حتى لا ينعطف الثعبان الميت ولا يتحرك.

اضغط على Play، ووجّه الثعبان نحو أحد الجدران، ثم اضغط على Check.

جرّب بنفسك

using UnityEngine;
using UnityEngine.InputSystem;

public class Snake : MonoBehaviour
{
    public float tick = 0.15f;   // الثواني بين خطوتين
    private float timer;
    private Vector3 direction = Vector3.right;       // الاتجاه الذي تحرّك فيه الرأس في خطوته الأخيرة
    private Vector3 nextDirection = Vector3.right;   // الانعطاف المنتظر حتى الخطوة التالية

    void Update()
    {
        Keyboard keyboard = Keyboard.current;
        if (keyboard != null)
        {
            if (keyboard.upArrowKey.wasPressedThisFrame || keyboard.wKey.wasPressedThisFrame) Turn(Vector3.forward);
            if (keyboard.downArrowKey.wasPressedThisFrame || keyboard.sKey.wasPressedThisFrame) Turn(Vector3.back);
            if (keyboard.leftArrowKey.wasPressedThisFrame || keyboard.aKey.wasPressedThisFrame) Turn(Vector3.left);
            if (keyboard.rightArrowKey.wasPressedThisFrame || keyboard.dKey.wasPressedThisFrame) Turn(Vector3.right);
        }

        timer += Time.deltaTime;
        if (timer >= tick)
        {
            timer -= tick;
            Step();
        }
    }

    void Turn(Vector3 newDirection)
    {
        if (newDirection != -direction)
        {
            nextDirection = newDirection;
        }
    }

    void Step()
    {
        direction = nextDirection;
        transform.position += direction;
    }
}
quiz iconاختبر نفسك

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

جميع دروس لعبة الثعبان ثلاثية الأبعاد في Unity