Menu
Coddy logo textTech

סיכום – הרכבת רובוט

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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 לא יודע איך זרועות מתרוממות או רגליים צועדות. הוא פשוט אומר לכל חלק מה לעשות. כל רכיב עצמאי וניתן לשימוש חוזר, והרובוט משמש כמתאם שמחבר את כולם יחד!

נסו בעצמכם

-- main.lua: נקודת הכניסה לאתגר הקומפוזיציה של Robot

local Robot = require('Robot')

-- קראו את הקלטים
local name = io.read()
local answer = io.read()

-- TODO: צרו Robot עם השם הנתון
-- TODO: גרמו לרובוט לברך לשלום
-- TODO: גרמו לרובוט ללכת
-- TODO: גרמו לרובוט להגיב בהתאם לקלט answer

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Lua אונליין