תיאור פתרון מטלה מתגלגלת – תהליך ליבה (סבביח)

המשחק הוא גרסה דו־ממדית בסיסית של "סבביח". שחקן עומד מאחורי הדוכן ובוחר רכיבי מזון (פיתה, חציל, ביצה, טחינה) מתוך מגש הרכיבים. לקוח יחיד מגיע לדוכן ומזמין מנה מוגדרת. השחקן צריך לבחור את הרכיבים הנכונים ולהגיש אותם בזמן, לפני שהלקוח מאבד סבלנות.

תהליך הליבה

  • השחקן לוחץ על רכיבי המזון, וכל רכיב נרשם בלוח המודעות בצד ימין.
  • הלקוח מגיע אל הדלפק באמצעות MoveToCounter.
  • לכל לקוח יש טיימר סבלנות אישי: פניו משתנים כל כמה שניות באמצעות CustomerMoodTimer.
  • בלחיצה על הלקוח מתבצעת בדיקת התאמה בין הרכיבים שנבחרו לבין ההזמנה שלו.
  • אם המנה נכונה – הלקוח מרוצה, עוצר את הטיימר, והולך הצידה מהמסך.
  • אם הזמן נגמר – הלקוח כועס ועוזב את הדוכן.

איך מפעילים?

  • להריץ את הסצנה הראשית ב־Unity.
  • ללחוץ על רכיבים כדי להוסיף אותם לרשימה.
  • ללחוץ על הלקוח כדי לבדוק האם המנה תואמת להזמנה.
  • לראות את תגובת הלקוח: שמח → הולך הצידה. כועס → עוזב.

ארכיטקטורת קוד

  • Player/Item: מייצג רכיב מזון. בעת לחיצה מפעיל OnClick() שמוסיף את הרכיב ל־SelectionList.
  • Manager/SelectionList: מנהל את רשימת הרכיבים שנבחרו ומציג אותם בטקסט בלוח המודעות. כולל גם בדיקת התאמה להזמנה.
  • Manager/clickManager: אחראי על Raycast וקבלת אינפוט עכבר מהמסך.
  • Enemies/CheckOrder: בודק את ההזמנה בעת לחיצה על לקוח (התאמה בין SelectionList להזמנה הנכונה).
  • Enemies/CustomerMoodTimer: מנהל את טיימר הסבלנות ואת שינוי פני הלקוח, וגם את "הליכה הצידה" כשהוא עוזב.
  • Enemies/MoveToCounter: גורם ללקוח ללכת אל הדוכן בתחילת הסצנה.

תרשים UML

+-----------------------+          +--------------------------+
|      clickManager     |          |      SelectionList       |
+-----------------------+          +--------------------------+
| +Update()             |          | - selectedText           |
| +RaycastToItem()      |          | - selectedIngredients    |
+-----------------------+          | - Instance (static)      |
                                   +--------------------------+
                                   | +AddIngredient(name)     |
                                   | +ClearIngredients()      |
                                   | +IsSelectionMatching()   |
                                   +--------------------------+
                                              ^
                                              |
                               uses          |
+--------------------------+                 |
|          Item            |                 |
+--------------------------+                 |
| - ingredientName         |-----------------+
+--------------------------+
| +OnClick()               |
+--------------------------+
+--------------------------+        +---------------------------+
|        CheckOrder        |        |     CustomerMoodTimer     |
+--------------------------+        +---------------------------+
| - correctOrder[]         |        | - moodFaces[]             |
| - selectionList          |        | - timer, currentFace      |
+--------------------------+        | - moodStopped             |
| +OnMouseDown()           |        +---------------------------+
| (בודק מול SelectionList) |        | +CustomerServed()         |
+--------------------------+        | +Update()                 |
                                     | +WalkAwayAndDestroy()     |
                                     +---------------------------+
+---------------------------+
|       MoveToCounter       |
+---------------------------+
| - target : Transform      |
| - speed : float           |
+---------------------------+
| +Update()                 |
+---------------------------+

סיכום

המימוש מציג בבירור את תהליך הליבה: בחירת רכיבים, בדיקת התאמה להזמנת הלקוח, והתנהגות הלקוח בהתאם לזמן ולדיוק. כל האלמנטים גרפיים פשוטים, בהתאם לדרישת המטלה להתמקד במשחקיות ולא בעיצוב סופי.


גיטהב

Leave a comment

Log in with itch.io to leave a comment.