ماذا سنتعلم اليوم؟ سنتعلم كيف نجعل ألعابنا تتخذ قرارات ديناميكية وتتفاعل مع أحداث مختلفة باستخدام الجمل الشرطية If/Else في C#. سنقوم ببناء منطق بسيط داخل لعبة Unity.
الخطوة 1: الفكرة الأساسية للجمل الشرطية (If)
تخيل أن لديك لاعبًا يجمع العملات في لعبتك. تريد أن تحدث شيئًا معينًا (مثل رفع المستوى) فقط عندما يجمع اللاعب عددًا كافيًا من العملات. هنا يأتي دور جملة if. إنها تسمح لك بتنفيذ كتلة معينة من التعليمات البرمجية إذا كان شرط معين صحيحًا.
لنبدأ بإنشاء سكربت C# بسيط في Unity (مثلاً، GameLogicManager.cs) يحدد عدد العملات التي يمتلكها اللاعب وعدد العملات المطلوبة لرفع المستوى.
using UnityEngine;
public class GameLogicManager : MonoBehaviour
{
public int playerCoins = 15; // عدد العملات التي يمتلكها اللاعب
public int requiredCoinsForLevelUp = 10; // عدد العملات المطلوبة لرفع المستوى
void Start()
{
// التحقق مما إذا كان لدى اللاعب ما يكفي من العملات لرفع المستوى
if (playerCoins >= requiredCoinsForLevelUp)
{
Debug.Log("تهانينا! لقد قمت برفع المستوى!"); // رسالة تظهر عند تحقق الشرط
// هنا يمكن إضافة كود لرفع مستوى اللاعب، مثل زيادة سرعته أو فتح قدرات جديدة
}
Debug.Log("عملية التحقق من المستوى انتهت."); // رسالة تظهر دائمًا بعد التحقق
}
}
في هذا المثال، إذا كانت قيمة playerCoins أكبر من أو تساوي requiredCoinsForLevelUp، فسيتم طباعة رسالة "تهانينا! لقد قمت برفع المستوى!" في وحدة التحكم (Console) الخاصة بـ Unity.
الخطوة 2: إضافة خيارات متعددة باستخدام (else if)
ماذا لو أردنا أن تتصرف اللعبة بشكل مختلف بناءً على عدة شروط متتالية؟ على سبيل المثال، إذا كان مستوى صحة اللاعب منخفضًا جدًا، نعرض تحذيرًا حرجًا؛ وإذا كان منخفضًا فقط (وليس حرجًا)، نعرض تحذيرًا آخر. هنا نستخدم else if.
using UnityEngine;
public class GameLogicManager : MonoBehaviour
{
public int playerHealth = 40; // مستوى صحة اللاعب
public int criticalHealthThreshold = 20; // عتبة الصحة الحرجة
public int lowHealthThreshold = 50; // عتبة الصحة المنخفضة
void Start()
{
// ... (كود الخطوة الأولى هنا إذا أردت، لكننا نركز على هذا الجزء الآن)
// التحقق من مستوى صحة اللاعب
if (playerHealth <= criticalHealthThreshold) // إذا كانت الصحة حرجة جداً
{
Debug.Log("تحذير! صحة اللاعب حرجة للغاية!"); // رسالة للتحذير الحرج
// يمكن هنا تشغيل مؤثرات صوتية أو بصرية لتحذير اللاعب
}
else if (playerHealth <= lowHealthThreshold) // وإلا إذا كانت الصحة منخفضة (لكن ليست حرجة)
{
Debug.Log("الصحة منخفضة، يرجى الحذر!"); // رسالة للتحذير المنخفض
}
Debug.Log("فحص حالة الصحة اكتمل.");
}
}
في هذا الجزء، يتم فحص الشرط الأول (playerHealth <= criticalHealthThreshold). إذا كان صحيحًا، يتم تنفيذ الكود الخاص به وتنتهي سلسلة if/else if. إذا لم يكن صحيحًا، يتم فحص الشرط التالي (playerHealth <= lowHealthThreshold)، وهكذا. يتم تنفيذ كتلة واحدة فقط من التعليمات البرمجية التي ينطبق عليها الشرط الأول.
الخطوة 3: التعامل مع جميع الاحتمالات باستخدام (else)
في بعض الأحيان، نريد تنفيذ كود معين إذا لم يتحقق أي من الشروط السابقة. هذا هو المكان الذي يأتي فيه else. إنها بمثابة "الخطة البديلة" أو الإجراء الافتراضي الذي يتم اتخاذه إذا لم يكن أي من شروط if أو else if صحيحًا.
using UnityEngine;
public class GameLogicManager : MonoBehaviour
{
public string playerStatus = "Idle"; // حالة اللاعب الحالية (مثلاً: Idle, Attacking, Defending)
void Start()
{
// ... (كود الخطوتين السابقتين هنا إذا أردت)
// تحديد الإجراء بناءً على حالة اللاعب
if (playerStatus == "Attacking") // إذا كان اللاعب يهاجم
{
Debug.Log("اللاعب يهاجم العدو!");
}
else if (playerStatus == "Defending") // وإلا إذا كان اللاعب يدافع
{
Debug.Log("اللاعب يتخذ وضعية الدفاع!");
}
else // وإلا (إذا لم يكن يهاجم أو يدافع، أي حالة أخرى)
{
Debug.Log("اللاعب في وضعية الخمول (Idle)."); // الإجراء الافتراضي
// يمكن هنا تشغيل رسوم متحركة للخمول
}
Debug.Log("تحديد حالة اللاعب اكتمل.");
}
}
هنا، إذا كانت playerStatus هي "Attacking"، فسيتم تنفيذ الكتلة الأولى. إذا لم تكن كذلك ولكنها كانت "Defending"، فسيتم تنفيذ الكتلة الثانية. وإذا لم تكن أيًا من الحالتين، فسيتم تنفيذ الكتلة الثالثة (else). يضمن else أن يتم تنفيذ شيء ما دائمًا.
ملاحظة تقنية: الترتيب مهم جدًا في سلاسل
if/else if/else. يتم تقييم الشروط من الأعلى إلى الأسفل، ويتم تنفيذ أول كتلة يكون شرطها صحيحًا فقط. بمجرد تنفيذ كتلة، يتم تخطي بقية السلسلة. لذا، يجب وضع الشروط الأكثر تحديدًا أو الأكثر تقييدًا أولاً.
الكود النهائي الكامل
إليك السكربت كاملاً، والذي يمكنك إرفاقه بأي GameObject في مشهد Unity الخاص بك لتجربته. تأكد من أن اسم الملف هو GameLogicManager.cs.
using UnityEngine;
public class GameLogicManager : MonoBehaviour
{
// متغيرات للخطوة 1: العملات ورفع المستوى
public int playerCoins = 15; // عدد العملات التي يمتلكها اللاعب
public int requiredCoinsForLevelUp = 10; // عدد العملات المطلوبة لرفع المستوى
// متغيرات للخطوة 2: صحة اللاعب
public int playerHealth = 40; // مستوى صحة اللاعب الحالي
public int criticalHealthThreshold = 20; // عتبة الصحة الحرجة (أقل من 20)
public int lowHealthThreshold = 50; // عتبة الصحة المنخفضة (أقل من 50 ولكن ليس حرجًا)
// متغيرات للخطوة 3: حالة اللاعب
public string playerStatus = "Idle"; // حالة اللاعب الحالية (مثلاً: Idle, Attacking, Defending)
void Start()
{
Debug.Log("بدء تقييم منطق اللعبة...");
// الجزء الأول: التحقق من العملات ورفع المستوى (If)
if (playerCoins >= requiredCoinsForLevelUp)
{
Debug.Log("تهانينا! لقد قمت برفع المستوى!"); // رسالة عند رفع المستوى
}
Debug.Log($"لديك {playerCoins} عملة."); // عرض عدد العملات دائمًا
Debug.Log("---"); // فاصل للوضوح
// الجزء الثاني: التحقق من مستوى صحة اللاعب (If / Else If)
if (playerHealth <= criticalHealthThreshold)
{
Debug.Log("تحذير! صحة اللاعب حرجة للغاية!"); // رسالة للتحذير الحرج
}
else if (playerHealth <= lowHealthThreshold)
{
Debug.Log("الصحة منخفضة، يرجى الحذر!"); // رسالة للتحذير المنخفض
}
else // إذا كانت الصحة أعلى من عتبة الانخفاض
{
Debug.Log("صحة اللاعب جيدة."); // رسالة عند الصحة الجيدة
}
Debug.Log($"صحة اللاعب الحالية: {playerHealth}."); // عرض الصحة دائمًا
Debug.Log("---"); // فاصل للوضوح
// الجزء الثالث: تحديد الإجراء بناءً على حالة اللاعب (If / Else If / Else)
// قم بتغيير 'playerStatus' في Unity Inspector لاختبار حالات مختلفة
if (playerStatus == "Attacking")
{
Debug.Log("اللاعب يهاجم العدو!");
}
else if (playerStatus == "Defending")
{
Debug.Log("اللاعب يتخذ وضعية الدفاع!");
}
else
{
Debug.Log("اللاعب في وضعية الخمول (Idle)."); // الإجراء الافتراضي
}
Debug.Log($"حالة اللاعب الحالية: {playerStatus}."); // عرض الحالة دائمًا
Debug.Log("تم الانتهاء من تقييم منطق اللعبة.");
}
}
النتيجة المتوقعة
عند تشغيل اللعبة في Unity، سيقوم السكربت GameLogicManager بتنفيذ التعليمات في دالة Start(). بناءً على القيم الافتراضية للمتغيرات (playerCoins = 15, playerHealth = 40, playerStatus = "Idle")، ستظهر الرسائل التالية في وحدة التحكم (Console) الخاصة بـ Unity:
بدء تقييم منطق اللعبة...
تهانينا! لقد قمت برفع المستوى!
لديك 15 عملة.
---
الصحة منخفضة، يرجى الحذر!
صحة اللاعب الحالية: 40.
---
اللاعب في وضعية الخمول (Idle).
حالة اللاعب الحالية: Idle.
تم الانتهاء من تقييم منطق اللعبة.
يمكنك تغيير قيم المتغيرات playerCoins و playerHealth و playerStatus مباشرة في Unity Inspector أثناء وضع التحرير، ثم تشغيل اللعبة مرة أخرى لمشاهدة كيف تتغير المخرجات بناءً على الشروط المختلفة.