Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

ملخص - تجميع الروبوت

جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 54 من 70.

challenge icon

التحدي

سهل

لنجمع Robot من أجزاء مكوّنة منفردة! بدلاً من استخدام الوراثة، ستبني روبوتًا من خلال تركيبه من كائنات منفصلة من نوع Arm وLeg وHead، لكلٍّ منها سلوك متخصص خاص به. سيتولى الروبوت تنسيق هذه الأجزاء من خلال التفويض.

ستنظّم كودك عبر خمسة ملفات:

  • Arm.lua: أنشئ فئة Arm باستخدام مُنشئ :new(side) يخزّن الجانب الذي توجد فيه (مثل "left" أو "right"). أدرج طريقة :raise() تطبع {side} arm raised وطريقة :lower() تطبع {side} arm lowered.
  • Leg.lua: أنشئ فئة Leg باستخدام مُنشئ :new(side) يخزّن الجانب. أدرج طريقة :step() تطبع {side} leg steps forward.
  • Head.lua: أنشئ فئة Head باستخدام مُنشئ :new(). أدرج طريقة :nod() تطبع Head nods وطريقة :shake() تطبع Head shakes.
  • Robot.lua: أنشئ فئة Robot يخزّن مُنشئها :new(name) الاسمَ وينشئ جميع الأجزاء المكوّنة داخليًا: ذراعًا يسرى، وذراعًا يمنى، وساقًا يسرى، وساقًا يمنى، ورأسًا. يجب أن يمتلك الروبوت الطرق التالية التي تفوّض المهام إلى أجزائه:
    • :greet(): يطبع {name} says hello!، ثم يرفع الذراع اليمنى، ثم يخفضها
    • :walk(): يجعل الساق اليسرى تخطو، ثم الساق اليمنى
    • :respond(answer): إذا كانت الإجابة "yes"، يومئ الرأس؛ وإذا كانت "no"، يهز الرأس
  • main.lua: اقرأ مدخلين لاسم الروبوت وإجابة بنعم/لا. أنشئ Robot، واجعله يحيّي، ويمشي، ثم يستجيب بناءً على المدخل.

ستتلقى مدخلين:

  1. اسم الروبوت (سلسلة نصية)
  2. إجابة: yes أو no

يجب أن يُظهر الناتج الروبوت وهو ينسّق أجزاءه:

{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nods

أو إذا كانت الإجابة no:

{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head shakes

على سبيل المثال، إذا كان المدخلان هما Robo وyes، فيجب أن يكون الناتج:

Robo says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nods

لاحظ أن Robot لا يعرف كيف تُرفع الأذرع أو تخطو الساقان. إنه يخبر كل جزء ببساطة بما يجب فعله. كل component مستقل وقابل لإعادة الاستخدام، ويعمل الروبوت منسقًا يجمعها كلها معًا!

جرّب بنفسك

-- main.lua: نقطة الدخول لتحدي تركيب Robot

local Robot = require('Robot')

-- اقرأ المدخلات
local name = io.read()
local answer = io.read()

-- TODO: أنشئ Robot بالاسم المعطى
-- TODO: اجعل الروبوت يحيي
-- TODO: اجعل الروبوت يمشي
-- TODO: اجعل الروبوت يستجيب بناءً على مدخل الإجابة

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Lua عبر الإنترنت