שקף שער - בניתי אימפריה ב-10 דקות
00:00-05:00
שתף מסך עם המשחק המוכן - מספרים רצים למעלה, כפתור ענק ולחיצות
"ערב טוב לכולם! ברוכים הבאים לשיעור השני שלנו. בשיעור שעבר בנינו את 'סנייק'. זה היה משחק של
רפלקסים – צריך להיות מהיר, צריך לא להתנגש."
"היום? היום אנחנו הולכים לעבוד על חלק אחר במוח. החלק שמתמכר למספרים
שעולים למעלה."
"תסתכלו על המסך שלי. זה נראה פשוט, נכון? לוחצים על כפתור, מקבלים כסף. קונים מכונה, היא עושה
כסף
בשבילנו."
"אבל המשחקים האלה – שנקראים Clicker Games או Idle Games – הם מהמשחקים המצליחים ביותר בהיסטוריה. 'Cookie
Clicker'
התחיל כבדיחה והפך לתופעה עולמית."
"היום אנחנו הולכים לבנות מכונה שמדפיסה כסף וירטואלי."
מה נלמד היום - שלושה דברים חדשים
2. כלכלה של משחק (Game Economy): איך גורמים למשחק להיות מאתגר ולא משעמם - באמצעות עליית מחירים.
3. שמירת נתונים (Persistence): איך גורמים למחשב לזכור את ההתקדמות גם אחרי סגירת הדפדפן.
"אנחנו נלמד שלושה דברים סופר-חשובים שלא נגענו בהם בשיעור הקודם:"
"ממשק משתמש (UI) – איך בונים כפתורים וחנויות, ולא רק ציורים
זזים."
"כלכלה של משחק – איך גורמים למשחק להיות מאתגר ולא קל מדי."
"הדבר הכי חשוב: איך גורמים למחשב לזכור את הכסף שלכם גם אחרי שסוגרים את הדפדפן."
"אז תפתחו את Antigravity, תכינו את האצבעות, אנחנו מתחילים."
DOM vs Canvas - למה לא ציור הפעם?
05:00-10:00DOM (שיעור 2): אלמנטים מוכנים של הדפדפן - כפתורים, טקסטים, רשימות. מתאים לממשקי משתמש, חנויות, ותצוגות מידע. הדפדפן מנהל את הכל.
פתח פרויקט חדש ב-Antigravity - מסך נקי
"דבר ראשון, כולם לפתוח פרויקט חדש. File, New Project. תקראו לו CupcakeClicker או איזה שם שבא לכם."
"לפני שאנחנו כותבים את הפרומפט, אני רוצה שנבין משהו טכני קטן. זוכרים שבסנייק כתבנו פרומפט עם
המילה Canvas? Canvas זה כמו לוח ציור. ה-AI היה צריך לחשב כל
פיקסל."
"היום, אנחנו לא צריכים לצייר נחש שזז. אנחנו צריכים כפתורים, טקסטים,
ורשימות."
"לכן, היום אנחנו נשתמש בכוח של הדפדפן עצמו – ה-DOM. אנחנו נבקש
מהסוכן לבנות לנו ממשק משתמש רגיל, כמו של אתר אינטרנט."
בדיקת דופק בצ'אט - כולם עם פרויקט חדש?
"כולם עם פרויקט חדש וריק פתוח מול העיניים? תכתבו לי 'כן' בצ'אט."
UI - ממשק משתמש
"בשיעור הקודם הסוכן צייר לנו נחש על Canvas. היום הוא יבנה לנו ממשק
משתמש - כפתורים, חנויות, מונים. זה נקרא UI - User
Interface."
"חשבו על זה ככה: Canvas זה כמו לצייר ציור חופשי על נייר. DOM זה כמו להרכיב לגו - יש חלקים
מוכנים
שמסדרים על המסך."
"הסוכן שלנו הוא אלוף עולם בזה. הוא יודע לעצב כפתורים ב-CSS הרבה יותר טוב משהוא יודע לצייר
נחשים."
הפרומפט הראשון - המנוע
10:00-20:00
הצבע על חלונית ה-Manager / Chat
"אנחנו הולכים לבנות את הלב של המשחק בפרומפט אחד. אנחנו צריכים להגדיר לסוכן:"
"1. מה המטרה? לאפות קאפקייקס."
"2. מה הפעולה? ללחוץ על כפתור האפייה."
"3. מה הפרס? חנות שדרוגים."
"אני שולח לכם בצ'אט את הפרומפט. תעתיקו ותדביקו."
המתנה לסיום יצירת הקוד. לחץ Preview כשהסוכן מסיים
"תסתכלו על התוכנית שהוא יוצר. הוא לא רק כותב קוד. הוא מתכנן את הלוגיקה:"
"הוא יוצר משתנה score שישמור כמה קאפקייקס יש לנו. הוא יוצר פונקציה bake() שתופעל כל פעם שנלחץ. והוא משתמש ב-setInterval – טיימר שרץ כל שנייה כדי לאפות קאפקייקס אוטומטית."
פתח Preview והדגם לחיצות
"אוקיי, הסוכן סיים. בואו נלחץ על Preview."
[תן לתלמידים לראות את התוצאה]
"וואו. תראו את זה. יש לנו כפתור ענק, יש לנו מונה למעלה, ויש לנו חנות בצד ימין."
"תנסו לשחק רגע. תלחצו על הכפתור... תצברו קאפקייקס... תקנו שדרוג בחנות. עכשיו תעזבו את
העכבר."
"אתם רואים את המספר עולה לבד? מזל טוב, יצרתם הכנסה פסיבית!"
State Management - ניהול מצבים
State Management הוא האופן שבו הקוד מנהל את המידע הזה - מעדכן אותו כשקורה משהו (לחיצה, קנייה) ומציג אותו על המסך.
"הסוכן יצר לנו משתנים שמנהלים את המצב של המשחק. בכל רגע, המחשב
יודע:"
"כמה קאפקייקס יש לכם. כמה שדרוגים קניתם. כמה קאפקייקס נאפים כל שנייה."
"זה נקרא State Management - ניהול מצבים. בכל פעם שאתם לוחצים
על
הכפתור, ה-State מתעדכן. בכל פעם שקונים שדרוג, ה-State מתעדכן. וה-UI מציג את ה-State על המסך."
בעיית האינפלציה - למה המשחק משעמם
20:00-30:00
שחק במשחק מול כולם - הדגם את הבעיה
"רגע, חברים. יש לנו בעיה במשחק. מישהו שם לב מה היא?"
"תסתכלו עליי. אני קונה Mixing Bowl ב-10. עכשיו יש לי אפייה אוטומטית. הקאפקייקס נכנסים מהר. אני קונה
עוד
קערה. כמה היא עולה? עדיין 10. ועוד אחת? עדיין 10."
"תוך דקה אני יכול לקנות אלף קערות. המשחק נהיה קל מדי ומשעמם תוך שתי
דקות."
"במשחקים אמיתיים, ככל שאתה מתעשר, הדברים נהיים יקרים יותר.
קוראים
לזה עלות אקספוננציאלית."
"בואו נלמד את הסוכן שלנו שיעור בכלכלה."
עלות אקספוננציאלית - תיקון הכלכלה
זה יוצר עקומת קושי טבעית: ההתחלה קלה ומהנה, אבל ככל שמתקדמים, צריך לעבוד יותר קשה. זה העיקרון מאחורי כמעט כל משחק Idle מצליח.
"תעתיקו את הפרומפט הזה. שימו לב להוראה: 'Increase by 15%'."
"זה אומר שאם המחיר היה 10, הוא יהפוך ל-12 אחרי עיגול. אחר כך ל-14, אחר כך ל-16... זה נראה
כמו
שינוי קטן, אבל זה מה שהופך את המשחק למאתגר לאורך זמן."
הרץ את המשחק ב-Preview ובדוק שהמחיר עולה
"בואו נבדוק. אני קונה ב-10... הופה! המחיר השתנה ל-12. אני קונה
ב-12... המחיר השתנה ל-14. עכשיו אני צריך לעבוד קשה יותר בשביל
השדרוג הבא. מעולה."
LocalStorage - שמירת נתונים
30:00-40:00
עשה פרצוף דרמטי
"עכשיו הגענו לחלק הכי חשוב בשיעור. אני רוצה שכולכם תצברו קצת כסף במשחק. תגיעו ל-100 מטבעות."
[חכה 30 שניות]
"הגעתם? יופי. עכשיו... תלחצו על כפתור ה-Refresh בדפדפן."
לחץ Refresh אצלך - המספר מתאפס ל-0
"לאאאא! הכל נעלם. חזרנו לאפס."
"תארו לעצמכם ששיחקתם בזה שבוע, צברתם מיליונים, בטעות סגרתם את החלון – והכל הלך. הייתם שוברים
את
המקלדת."
"למה זה קרה? כי HTML ו-JavaScript בברירת מחדל לא 'זוכרים'
כלום. הם
חיים את הרגע. ברגע שסגרתם, הזיכרון נמחק."
"כדי לתקן את זה, אנחנו צריכים להשתמש ב'כספת' סודית שיש לכל דפדפן. הכספת הזו נקראת LocalStorage."
"שימו לב מה ביקשנו:"
"Auto-save: תשמור לבד, אל תחכה שאני אלחץ."
"Every second: כל הזמן."
"Restore: כשהמשחק נפתח מחדש, תחזיר את המצב לקדמותו."
הרץ, שחק קצת, צבור ניקוד, ואז עשה Refresh
"רגע האמת... יש לי 50 מטבעות. אני עושה Refresh..."
[לחץ Refresh]
"בום! המספר נשאר 50!"
"זה הרגע שבו הפרויקט שלכם הפך מ'סתם דף אינטרנט' לאפליקציה
אמיתית
שזוכרת את המשתמש."
סיכום ושיעורי בית
40:00-45:00UI - ממשק משתמש, מה שהמשתמש רואה ולוחץ
State Management - ניהול המצב של המשחק (כמה קאפקייקס, כמה שדרוגים)
Game Balance - איזון המשחק כדי שישאר מאתגר
Exponential Cost - מחיר שעולה באחוז אחרי כל קנייה
LocalStorage - "כספת" של הדפדפן לשמירת נתונים
Persistence - שמירת מידע שנשאר גם אחרי סגירה
setInterval - טיימר שמריץ פעולה כל X שניות
עצור שיתוף מסך, חזור למצלמה
"חברים, תראו מה הספקנו ב-45 דקות:"
"בנינו משחק עם ממשק משתמש אמיתי."
"יצרנו כלכלה חכמה שמעלה מחירים."
"וגרמנו למשחק לשמור את עצמו לנצח (או עד שתנקו קוקיז)."
"המשימה שלכם לבית: המשחק שלנו כרגע הוא על 'קאפקייקס' ו'מאפייה'.
אני
רוצה לראות את היצירתיות שלכם. עשו Reskinning - החלפת עור
למשחק."
"תבקשו מהסוכן: 'Change the theme to a Space Factory. Change Cupcakes to Rockets and Mixing Bowl to
Launch Pad.' או תשנו למפעל מכוניות, חנות חיות, למה שבא לכם."
"בשיעור הבא, אנחנו ניקח את הסנייק משיעור 1 ואת הקליקר משיעור 2, נבנה להם אתר פורטפוליו משותף, ונעלה אותו לאינטרנט כדי שתוכלו לשלוח לינק לחברים בווטסאפ."
"תודה רבה לכולם, נתראה בשיעור הבא!"