الحلقات المتداخلة

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

تسمح لك الحلقات المتداخلة بتكرار المهام على دفعات. على سبيل المثال، خبز ثلاث دفعات من ستة كب كيك، أو تخصيص أسلحة للاعبين في فريقين.

كيف تعمل الحلقات المتداخلة

عندما تكون الحلقات متداخلة، تقوم السكربتات بالمرور خطًا بخط حتى تصل إلى الحلقة التالية. ستعمل الحلقة الداخلية حتى يتم استيفاء شرطها قبل العودة إلى الحلقة الخارجية.

منطق الحلقة المتداخلة

يوضح المخطط التالي الخطوات التي تتخذها الحلقة.

  • حلقة خارجية: يتم تشغيل الكود سطرًا بسطر حتى تصل إلى الحلقة الداخلية.
  • حلقة خارجية: يتم تشغيل الكود سطرًا بسطر حتى تصل إلى الحلقة الداخلية.
  • حلقة خارجية: يتم تشغيل الكود سطرًا بسطر حتى تصل إلى الحلقة الداخلية.

مثال على الحلقة المتداخلة

يمكن أن تبدو الحلقات المتداخلة مجردة نوعًا ما، لذا يمكن أن تساعدك مثال مرئي. في هذا التمرين، انسخ والصق سكربت عينة وقم بتشغيله في الاستوديو. سيقوم هذا السكربت بإنشاء أبراج من الأجزاء. ستتحكم الحلقة الخارجية في عدد الأجزاء التي يجب صنعها، بينما ستقوم الحلقة الداخلية بإنشاء الدفعة الفعلية.

  1. أنشئ سكربتًا جديدًا في ServerScriptService يسمى PartMaker. انسخ الكود أدناه.


    local numberOfBatches = 7
    local partsPerBatch = 5
    local partsMade = 0
    -- يصنع مكعبًا واحدًا
    local function createPart()
    local part = Instance.new("Part")
    part.Size = Vector3.new(2, 2, 2)
    part.CFrame = CFrame.new(20, 0, 20)
    part.Color = currentColor
    part.Parent = workspace
    end
    -- حلقة خارجية
    for partBatch = 1, numberOfBatches do
    print("أعلى حلقة خارجية: دفعة الأجزاء " .. partBatch)
    currentColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
    -- حلقة داخلية
    for partNumber = 1, partsPerBatch do
    createPart()
    print("حلقة داخلية: الجزء " .. partNumber)
    partsMade += 1
    task.wait(0.5)
    end
    print("أسفل حلقة خارجية: " .. partsMade .. " أجزاء تم صنعها حتى الآن.")
    task.wait(2)
    end
  2. راقب كيف يقوم السكربت بتوليد دفعة مختلفة من الأجزاء الملونة. بعد المرور بدفعة واحدة، سيتوقف لمدة ثانيتين. ستعمل جملة الطباعة في الحلقة الخارجية مرة واحدة فقط لكل حلقة داخلية مكتملة.

برج الحلقة المتداخلة

تمتلك كل حلقة مجموعتها الخاصة من التعليمات البرمجية، لذلك يمكن أن تكون مسؤولة عن مهام مختلفة. واحدة من الأشياء التي يمكن أن تفعلها الحلقات المتداخلة هي تغيير مكان ظهور الشيء لإنشاء برج مثل البرج في هذا الفيديو. هناك ثلاث حلقات مختلفة، واحدة لكل منها للتحكم في المكان على العرض والطول والارتفاع الذي يظهر فيه المكعب.

برمجة سكربت صانع مكعب

لممارسة الحلقات المتداخلة، ستقوم بإنشاء سكربت يقوم بإنشاء برج من المكعبات. بالنسبة لسكربت برج المكعب، أولاً قم ببرمجة دالة تقوم بتوليد مكعب واحد. سيتم بناء البرج من خلال استدعاء هذه الدالة بشكل متكرر.

إعداد السكربت

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

  1. احذف سكربت PartMaker أو قم بإيقاف تشغيله (في خصائص السكربت، تحقق من Disabled). إذا لم تفعل ذلك، سيكون هناك اثنان من السكربتات يصنعان الأجزاء في نفس الوقت في نفس المكان.

  2. أنشئ سكربتًا جديدًا يسمى TowerBuilder. أضف متغيرات لحجم البرج وحجم المكعب في الأعلى.


    local TOWER_SIZE = 4
    local CUBE_SIZE = 2
  3. أضف دالة محلية باسم makeCube() التي تخلق مكعبًا مربعًا واحدًا باستخدام CUBE_SIZE.


    local TOWER_SIZE = 4
    local CUBE_SIZE = 2
    -- يصنع مكعبات فردية
    local function makeCube()
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    end
  4. عيّن لون المكعب إلى متغير سيتم تحديثه في الحلقات المتداخلة.


    local function makeCube()
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    cube.Color = currentColor
    end
  5. وأخيرًا، قم بإضافة المكعب الجديد إلى مساحة العمل بحيث يظهر.


    local function makeCube()
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    cube.Color = currentColor
    cube.Parent = workspace
    end

ظهور في اتجاهات مختلفة

لإنشاء برج، قم بإنتاج المكعبات في نقاط محددة عن طريق ضبط خصائص X، Y، Z لكل مكعب جديد. X و Z هما من جانب إلى جانب. Y هو لأعلى ولأسفل.

  1. في makeCube(), أضف معلمات لـ spawnX و spawnY و spawnZ. ستحدد هذه الأرقام موقع ظهور كل مكعب جديد.


    -- يصنع مكعبات فردية
    local function makeCube(spawnX, spawnY, spawnZ)
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    cube.Color = currentColor
    cube.Parent = workspace
    end
  2. داخل الدالة، عيّن خاصية CFrame للمكعب إلى CFrame جديدة باستخدام معلمات spawnX و spawnY و spawnZ.


    local function makeCube(spawnX, spawnY, spawnZ)
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    cube.Color = currentColor
    cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
    cube.Parent = workspace
    end

الظهور بحلقات متداخلة

سيحتوي السكربت على ثلاث حلقات إجمالًا، واحدة لكل من طول البرج وعرضه وارتفاعه. لإكمال طابق كامل قبل الانتقال لأعلى، ابدأ بتعيين الإحداثي Y في الحلقة الأولى، الخارجية.

  1. تحت دالة makeCube(), أنشئ حلقة for لتعيين مدى ارتفاع كل مكعب يظهر.

    • متغير التحكم: heightIndex = 1
    • نقطة النهاية: TOWER_SIZE
    • داخل الحلقة، أضف: local spawnY = (heightIndex - 1) * CUBE_SIZE

    -- يبني البرج
    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    end
  2. مع الانتهاء من الحلقة الأولى للارتفاع، ابدأ في الثانية. داخل الحلقة for الأولى، أضف حلقة for جديدة لمكان وضع المكعب على طول البرج.

    • متغير التحكم: lengthIndex = 1
    • نقطة النهاية: TOWER_SIZE
    • داخل تلك الحلقة أضف: local spawnX = lengthIndex * CUBE_SIZE

    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    for lengthIndex = 1, TOWER_SIZE do
    local spawnX = lengthIndex * CUBE_SIZE
    end
    end
  3. داخل الحلقة الثانية، أضف حلقة for ثالثة لعرض البرج. في هذه الحلقة النهائية، قم باستدعاء makeCube() ومرر معلمات X، Y، Z.

    • متغير التحكم: widthIndex = 1
    • نقطة النهاية: TOWER_SIZE
    • داخل الحلقة أضف:
      • local spawnZ = widthIndex * CUBE_SIZE
      • makeCube(spawnX, spawnY, spawnZ)
      • زمن الانتظار قدره 0.25 حتى تتمكن من مشاهدة بناء البرج.

    -- يبني البرج
    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    for lengthIndex = 1, TOWER_SIZE do
    local spawnX = lengthIndex * CUBE_SIZE
    for widthIndex = 1, TOWER_SIZE do
    local spawnZ = widthIndex * CUBE_SIZE
    makeCube(spawnX, spawnY, spawnZ)
    task.wait(0.25)
    end
    end
    end
  4. لجعل كل طابق لونًا عشوائيًا، غير currentColor إلى أرقام RGB عشوائية في نفس الحلقة التي تقوم فيها بإنشاء طابق جديد.


    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    currentColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
    for lengthIndex = 1, TOWER_SIZE do
    local spawnX = lengthIndex * CUBE_SIZE
    for widthIndex = 1, TOWER_SIZE do
    local spawnZ = widthIndex * CUBE_SIZE
    makeCube(spawnX, spawnY, spawnZ)
    task.wait(0.25)
    end
    end
    end
  5. قم بتشغيل المشروع وانتظر لترى أن برجًا كاملًا تم إنشاؤه دون أي أخطاء في نافذة الإخراج.

تحديات اختيارية

أدناه توجد تحديات ذاتية التوجيه تستخدم الحلقات المتداخلة بطرق مختلفة. حاول البرمجة لوحدك قبل النظر إلى الحل.

تلاشي الأجزاء

أثناء بناء البرج، اجعل الأجزاء تتلاشى في الشفافية من اليسار إلى اليمين.

حل الكود أدناه.


local TOWER_SIZE = 6
local CUBE_SIZE = 2
-- يصنع مكعبات فردية
local function makeCube(spawnX, spawnY, spawnZ)
local cube = Instance.new("Part")
cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
cube.Color = currentColor
cube.Transparency = cubeTransparency -- تعيين الشفافية
cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
cube.Parent = workspace
end
-- يبني البرج
for heightIndex = 1, TOWER_SIZE do
local spawnY = (heightIndex - 1) * CUBE_SIZE
currentColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
for lengthIndex = 1, TOWER_SIZE do
local spawnX = lengthIndex * CUBE_SIZE
cubeTransparency = (lengthIndex - 1) * 0.10 -- تحديث كل حلقة بدءًا من 0
for widthIndex = 1, TOWER_SIZE do
local spawnZ = widthIndex * CUBE_SIZE
makeCube(spawnX, spawnY, spawnZ)
task.wait(0.05)
end
end
end

هطول الأشياء

بدلاً من الأجزاء، حاول إنتاج كائن فعلي. المثال هنا استخدم الكب كيك.

بمفردك، تحقق مما إذا كان يمكنك:

  • إنشاء كائن من أجزاء أساسية. تأكد من لحام جميع الأجزاء معًا حتى لا ينفصل الكائن.
  • ضع الكائن في ServerStorage
  • عدل PartMaker الموجود في مثال الحلقة المتداخلة لاستخدام كائنك بدلاً من الأجزاء.

مثال موضح هنا.

تشمل حل الكود باستخدام الكب كيك.


local numberOfBatches = 30
local cupcakesPerBatch = 6
local cupcakesBaked = 0
-- يصنع كب كيك واحد
local function makeCupcake()
local ServerStorage = game:GetService("ServerStorage")
local cupcake = ServerStorage.Cupcake:Clone()
local cup = cupcake.Cup
local frosting = cupcake.Frosting
cupcake:SetPrimaryPartCFrame(CFrame.new(0, 20, 0) * CFrame.Angles(0, 0, -90))
frosting.Color = frostingColor
cup.Color = cupColor
cupcake.Parent = workspace
end
-- حلقة خارجية
for cupcakeBatch = 1, numberOfBatches do
print("أعلى حلقة خارجية: دفعة الكب كيك " .. cupcakeBatch)
frostingColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
cupColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
-- حلقة داخلية
for cupcakeNumber = 1, cupcakesPerBatch do
makeCupcake()
print("حلقة داخلية: كب كيك " .. cupcakeNumber)
-- تتبع الكب كيك المخبوزة
cupcakesBaked += 1
task.wait(0.5)
end
print("أسفل حلقة خارجية: " .. cupcakesBaked .. " كب كيك مخبوزة حتى الآن.")
end

خلاصة

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

©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.