6.3 KiB
יצירת משחק: יישום תבניות עיצוב
סקירת המשימה
השתמשו בידע החדש שלכם על תבניות עיצוב כדי ליצור אב-טיפוס של משחק פשוט! משימה זו תעזור לכם לתרגל הן תבניות ארכיטקטורה (ירושה או קומפוזיציה) והן מערכת התקשורת pub/sub שלמדתם בשיעור.
הוראות
צרו ייצוג משחק פשוט שמדגים את תבניות העיצוב מהשיעור. המשחק שלכם צריך להיות פונקציונלי אך לא חייב לכלול גרפיקה מורכבת – התמקדו בארכיטקטורה ובתבניות התקשורת הבסיסיות.
דרישות
בחרו את תבנית הארכיטקטורה שלכם:
- אפשרות א': השתמשו בירושה מבוססת מחלקות (כמו הדוגמה
GameObject→Movable→Hero) - אפשרות ב': השתמשו בקומפוזיציה (כמו גישת פונקציית מפעל עם התנהגויות משולבות)
יישום תקשורת:
- כללו מחלקת
EventEmitterלמערכת הודעות pub/sub - הגדירו לפחות 2-3 סוגי הודעות שונים (כמו
PLAYER_MOVE,ENEMY_SPAWN,SCORE_UPDATE) - חברו קלט משתמש (מקלדת/עכבר) לאירועי משחק דרך מערכת האירועים
אלמנטים במשחק שיש לכלול:
- לפחות דמות אחת הנשלטת על ידי השחקן
- לפחות אובייקט משחק אחד נוסף (אויב, פריט לאיסוף או אלמנט סביבתי)
- אינטראקציה בסיסית בין אובייקטים (התנגשות, איסוף או תקשורת)
רעיונות למשחקים מוצעים
משחקים פשוטים לשקול:
- משחק נחש – חלקי הנחש עוקבים אחרי הראש, מזון מופיע באופן אקראי
- גרסה של פונג – מחבט מגיב לקלט, כדור מקפץ מהקירות
- משחק איסוף – השחקן נע ואוסף פריטים תוך הימנעות ממכשולים
- יסודות הגנת מגדלים – מגדלים מזהים ויורים על אויבים נעים
הנחיות למבנה הקוד
// Example starting structure
const Messages = {
// Define your game messages here
};
class EventEmitter {
// Your event system implementation
}
// Choose either class-based OR composition approach
// Class-based example:
class GameObject { /* base properties */ }
class Player extends GameObject { /* player-specific behavior */ }
// OR Composition example:
const gameObject = { /* base properties */ };
const movable = { /* movement behavior */ };
function createPlayer() { /* combine behaviors */ }
בדיקת היישום שלכם
וודאו שהקוד שלכם עובד על ידי:
- בדיקה שאובייקטים זזים או משתנים כאשר אירועים מופעלים
- אישור שאובייקטים מרובים יכולים להגיב לאותו אירוע
- בדיקה שניתן להוסיף התנהגויות חדשות מבלי לשנות קוד קיים
- ווידוא שקלט מקלדת/עכבר מפעיל אירועי משחק כראוי
הנחיות להגשה
ההגשה שלכם צריכה לכלול:
- קובץ/י JavaScript עם יישום המשחק שלכם
- קובץ HTML להרצת ובדיקת המשחק (יכול להיות פשוט)
- הערות שמסבירות איזו תבנית בחרתם ולמה
- תיעוד קצר של סוגי ההודעות ומה הן עושות
קריטריונים להערכה
| קריטריון | מצטיין (3 נקודות) | מספק (2 נקודות) | דורש שיפור (1 נקודה) |
|---|---|---|---|
| תבנית ארכיטקטורה | מיישם כראוי ירושה או קומפוזיציה עם היררכיית מחלקות/אובייקטים ברורה | משתמש בתבנית שנבחרה עם בעיות או אי-עקביות קלות | ניסיון להשתמש בתבנית אך היישום כולל בעיות משמעותיות |
| יישום pub/sub | EventEmitter עובד כראוי עם סוגי הודעות מרובים וזרימת אירועים תקינה | מערכת pub/sub בסיסית עובדת עם טיפול באירועים מסוים | מערכת אירועים קיימת אך לא עובדת באופן אמין |
| פונקציונליות המשחק | שלושה או יותר אלמנטים אינטראקטיביים שמתקשרים דרך אירועים | שני אלמנטים אינטראקטיביים עם תקשורת אירועים בסיסית | אלמנט אחד מגיב לאירועים או אינטראקציה בסיסית |
| איכות הקוד | קוד נקי, מתועד היטב עם ארגון לוגי ושימוש ב-JavaScript מודרני | קוד מאורגן באופן כללי עם הערות מספקות | הקוד עובד אך חסר ארגון או תיעוד ברור |
נקודות בונוס:
- מכניקת משחק יצירתית שמדגימה שימוש מעניין בתבניות
- שיטות קלט מרובות (אירועי מקלדת וגם עכבר)
- ארכיטקטורה ניתנת להרחבה שתהיה קלה להוספת תכונות חדשות
כתב ויתור:
מסמך זה תורגם באמצעות שירות תרגום AI Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי אנושי. איננו אחראים לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.