שקף שער - קרב ראש בראש
00:00-03:00
שתף מסך עם המשחק המוכן - שני טנקים, אחד יורה והקליע עף בפרבולה ופוגע
"ערב טוב לכולם! ברוכים הבאים לשיעור האחרון של הקורס - השיעור הכי מגניב שיש."
"אתם רואים את זה? שני טנקים. כל אחד מכם תשלוט על טנק. תבחרו זווית, תבחרו עוצמה, ותירו."
הדגם ירייה - הקליע עף בפרבולה, פוגע, פיצוץ!
"תסתכלו על הקליע. הוא לא זז בקו ישר - הוא עף בפרבולה. כמו בחיים האמיתיים. כוח הכבידה מושך אותו למטה בדיוק כמו כדור שזורקים."
"היום אנחנו לא רק בונים משחק. אנחנו לומדים פיזיקה אמיתית."
"ובסוף השיעור? תשחקו אחד נגד השני. טנק נגד טנק. מקלדת אחת, שני שחקנים, קרב אמיתי."
היסטוריה - המשחק הראשון והקרבות התורניים
Tank Wars / Artillery Games (שנות ה-80) לקחו את הרעיון צעד קדימה: במקום רפלקסים מהירים, חשיבה אסטרטגית.
"לפני שנתחיל לבנות, בואו נדבר רגע על היסטוריה."
"המשחק המסחרי הראשון בהיסטוריה היה Pong - 1972. שני שחקנים, משוטים, כדור. פשוט אבל מהפכני."
"למה? כי זה היה חברתי. שני אנשים ליד מכונה אחת, מתחרים. לא מחשב נגד אדם - אדם נגד אדם."
"המשחק שאנחנו בונים היום שייך לז'אנר אחר: Artillery Games - משחקי תותחים. הז'אנר הזה התחיל בשנות ה-80 עם משחקים כמו Tank Wars."
"במקום רפלקסים מהירים, צריך חשיבה. איזו זווית? איזו עוצמה? אם טעיתי - יריב שלי מנצל את זה."
Multiplayer Local - שני שחקנים, מקלדת אחת
03:00-08:00Online Multiplayer: שני שחקנים במכשירים שונים דרך האינטרנט. מורכב - דורש שרתים, סנכרון, Netcode.
"יש שני סוגים של Multiplayer: Local ו-Online."
"Online - זה כשכל אחד במחשב שלו, אנחנו מחוברים דרך האינטרנט. זה מסובך. צריך שרתים, סנכרון, הרבה קוד."
"Local - זה פשוט. שני שחקנים, אותה מקלדת. אחד משתמש ב-WASD, השני בחצים. אחד יושב משמאל, השני מימין."
"וזה לא רק פשוט - זה גם יותר כיף. אתם רואים את הביטוי על הפנים של היריב כשהוא מפספס. אתם שומעים אותו צועק כשאתם פוגעים."
"Local Multiplayer זה הרבה יותר מקוד - זה חוויה חברתית."
Input Handling - ניהול קלט מרובה
Player 1: W (למעלה), S (למטה), D (ירי)
Player 2: ↑ (למעלה), ↓ (למטה), → או SPACE (ירי)
בקוד: צריך לזהות איזה מקש נלחץ, ולעדכן את השחקן הנכון.
"כשיש שני שחקנים, יש בעיה: שני סטים של מקשים."
"שחקן 1 משתמש ב-WASD. למה? כי זה בצד שמאל של המקלדת - נוח למי שיושב משמאל."
"שחקן 2 משתמש ב-חצים. למה? כי זה בצד ימין - נוח למי שיושב מימין."
"בקוד, אנחנו צריכים לזהות: 'רגע, האם נלחץ W או חץ למעלה? אם W - עדכן את השחקן הראשון. אם חץ - עדכן את השני'."
"זה נקרא Key Mapping - מיפוי מקשים. זה הבסיס לכל משחק מולטיפלייר מקומי."
הפרומפט הראשון - בניית המנוע
08:00-15:001. שני טנקים - מיקום קבוע בצדי המסך, עם קנה שזז
2. מערכת זוויות - כל טנק יכול לכוון את הקנה למעלה/למטה
3. מערכת עוצמה - כמה חזק הירי (מד Power)
4. קליע בפרבולה - עף לפי חוקי הפיזיקה
פתח Antigravity, פרויקט חדש בשם TankDuel
"כולם פותחים Antigravity. פרויקט חדש. תקראו לו TankDuel או BattleTanks."
"אנחנו הולכים לבקש מהסוכן לבנות את הבסיס. שני טנקים, מערכת כיוון, ופיזיקה אמיתית."
הקלד את הפרומפט ולחץ Generate
"שימו לב להוראות. אני מבקש פיזיקה אמיתית - 'realistic parabolic trajectory with gravity'."
"אני גם מבקש מד עוצמה - Power Meter. למה? כי ככל שנחזיק את המקש יותר זמן, הירי יהיה חזק יותר. זה מוסיף שכבת מיומנות."
המתן לסיום ולחץ Preview
"הסוכן סיים. בואו נראה מה יש לנו..."
הדגם את המשחק - שנה זווית, ירה, הקליע עף
"וואו. תסתכלו על זה. יש לנו שני טנקים. אני לוחץ W - הקנה זז למעלה. S - למטה. D - פוגעת!"
"ותראו את הקליע. הוא לא זז בקו ישר. הוא עושה קשת. זו פרבולה מתמטית אמיתית."
Projectile Motion - תנועת קליע
אופקית (X): מהירות קבועה (אין התנגדות אוויר במשחק שלנו)
אנכית (Y): התחלה במהירות גבוהה למעלה, אבל כוח הכבידה מאט אותה עד שהקליע נופל
הנוסחאות:
vx = power * cos(angle) - מהירות אופקיתvy = power * sin(angle) - מהירות אנכית התחלתיתvy += gravity - כל פריים הכבידה מוסיפה למהירות האנכית
"בואו נבין מה קורה כשהקליע עף. יש פה פיזיקה אמיתית."
"כשיורים, הקליע מקבל מהירות בשני כיוונים: X (צד לצד) ו-Y (למעלה-למטה)."
"המהירות האופקית (X) נשארת קבועה. אבל המהירות האנכית (Y)? היא משתנה כל הזמן בגלל כוח הכבידה."
"בהתחלה, הקליע זז מהר למעלה. אבל הכבידה מאטה אותו... מאטה... עד שהוא עוצר באוויר לרגע, ואז מתחיל ליפול."
"זה בדיוק כמו כשזורקים כדור למעלה בחיים האמיתיים. הוא עולה, עוצר, יורד. אותה פיזיקה."
"הסוכן שלנו כתב את המתמטיקה הזו. הוא לקח את הזווית שבחרנו, את העוצמה, והפך את זה לתנועה מציאותית."
Angle & Power - זווית ועוצמה
15:00-22:00Power (עוצמה): כמה חזק הירי. 0% = הקליע נופל ליד הטנק, 100% = הקליע עף רחוק
Power Bar: מד ויזואלי שמראה את העוצמה בזמן אמת - ככל שמחזיקים את המקש יותר זמן, העוצמה עולה.
"יש לנו בעיה קטנה. כרגע, העוצמה תמיד אותו דבר. זה משעמם."
"בואו נוסיף Power Bar - מד עוצמה שמלמד את השחקן שליטה."
הקלד את הפרומפט לשיפור
"אני מבקש מהסוכן: 'כשאני מחזיק את מקש הירי, תראה לי מד שממלא. ככל שאני מחזיק יותר - העוצמה גדלה'."
הרץ את המשחק עם Power Bar
"עכשיו תסתכלו. אני מחזיק D... והמד מתחיל להימלא. ירוק... צהוב... אדום. עכשיו אני עוזב - פוגעת!"
"זה מוסיף שכבת מיומנות. אתם צריכים לדעת מתי לעזוב. יותר מדי עוצמה - הקליע עובר מעל היריב. פחות מדי - נופל מתחתיו."
"זו האומנות של המשחק."
Turn-based Gameplay - משחק תורות
Turn-based: כל שחקן בתורו (שחמט, Civilization, Worms)
יתרונות Turn-based:
- זמן לחשוב ולתכנן
- פחות לחץ, יותר אסטרטגיה
- מתאים למשחק עם מקלדת אחת
- מנגנון פשוט ליישום
הלוגיקה:
1. שחקן 1 יורה → הקליע עף → פגע/החטיא
2. currentPlayer = 2 (החלפת תור)
3. שחקן 2 יורה → הקליע עף → פגע/החטיא
4. currentPlayer = 1 (חזרה לשחקן 1)
UI: הדגשה ויזואלית של מי התור - הטנק הפעיל זוהר, יש טקסט "PLAYER 1 TURN" וכו'.
"עכשיו בואו נדבר על Turn-based Gameplay - משחק תורות."
"רוב המשחקים שבנינו עד כה היו Real-time - הכל קורה בו-זמנית. ב-Snake, הנחש זז כל הזמן. ב-Flappy Bird, אתם צריכים לקפוץ מהר."
"אבל במשחק שלנו? תור אחד בכל פעם. שחקן 1 יורה. אז התור עובר לשחקן 2. שחקן 2 יורה. חזרה לשחקן 1."
"למה זה טוב? כי זה נותן לכם זמן לחשוב. אתם לא צריכים רפלקסים מהירים. אתם צריכים אסטרטגיה."
"איזו זווית תפגע ביריב? איזו עוצמה בדיוק צריך? זה כמו שחמט - אתם מתכננים את המהלך."
"והמשחק עוקב אחרי currentPlayer - משתנה שאומר 'עכשיו התור של שחקן 1' או 'עכשיו התור של שחקן 2'."
Collision & Explosions - התנגשות ופיצוצים
22:00-30:00הבדיקה:
if (projectileX >= tankX && projectileX <= tankX + tankWidth &&
projectileY >= tankY && projectileY <= tankY + tankHeight)אם התנאי מתקיים → פגיעה! → פיצוץ + נקודה + החלפת תור
1. Visual: מעגל/כדור שגדל ומתפוגג (או מערכת חלקיקים)
2. Audio: צליל פיצוץ (Sawtooth wave בתדר נמוך)
3. Screen Shake: רעידת מצלמה קלה - הזזת Canvas ב-2-3 פיקסלים אקראית למשך 200ms
"המשחק עובד, אבל חסר לו משהו. דרמה."
"כשהקליע פוגע, הוא פשוט... נעלם. אין משוב. אין הרגשה של פגיעה."
"בואו נוסיף פיצוץ!"
הקלד את הפרומפט
"אני מבקש מהסוכן שלושה דברים:"
"1. פיצוץ ויזואלי - עיגול כתום-אדום שגדל ומתפוגג.
2. צליל פיצוץ - Buzz נמוך בעזרת Web Audio.
3. רעידת מסך - Camera Shake קל."
הרץ את המשחק והדגם פגיעה
"עכשיו תראו... אני יורה... BOOM!"
[תן לפיצוץ לנחות]
"המסך רעד רגע! היה פיצוץ! היה סאונד! זה מרגיש כמו פגיעה אמיתית!"
Particle System - מערכת חלקיקים
שימושים: אש, עשן, פיצוצים, ניצוצות, גשם, שלג, קסמים
איך זה עובד?
1. כל חלקיק = אובייקט קטן עם: מיקום, מהירות, צבע, גודל, אורך חיים
2. בכל פריים: מעדכנים מיקום, מקטינים אורך חיים, משנים שקיפות
3. כשאורך החיים מגיע ל-0 → מוחקים את החלקיק
"הפיצוץ שלנו נראה טוב. אבל יש משהו שיכול להיות מדהים יותר."
"במקום עיגול אחד שמתפוגג, מה אם נשתמש ב-Particle System - מערכת חלקיקים?"
"זה אומר: במקום אובייקט אחד גדול, עשרות אובייקטים קטנים שמתפזרים לכל הכיוונים."
הקלד את הפרומפט
"אני מבקש מהסוכן ליצור 20-30 חלקיקים. כל אחד עף לכיוון אקראי, צבע אקראי (כתום/צהוב/אדום), ומתפוגג."
הרץ והדגם פיצוץ עם חלקיקים
"עכשיו תראו... אני יורה... BOOM!!!"
[תן לפיצוץ לנחות]
"תסתכלו על זה! חלקיקים עפים לכל מקום! זה נראה כמו פיצוץ אמיתי!"
"זה Particle System - אחד הכלים החשובים ביותר ביצירת אפקטים במשחקים."
Polishing - הוספת אפקטים ומצבי משחק
30:00-40:003 מצבים במשחק שלנו:
MENU: מסך התחלה - "TANK DUEL", "Press SPACE to Start"
PLAYING: המשחק פעיל - ירי, תורות, ניקוד
GAME_OVER: מישהו ניצח - "PLAYER X WINS!", "Press R to Restart"
"יש לנו משחק עובד. עכשיו בואו נהפוך אותו למוצר מלא."
"משחק אמיתי צריך שלושה דברים:"
"1. תפריט התחלה - מסך שמסביר איך לשחק.
2. תנאי ניצחון - מי שמגיע ל-5 נקודות מנצח.
3. מסך Game Over - 'Player 1 Wins!' עם אפשרות להתחיל מחדש."
הקלד את הפרומפט
"אני מבקש מהסוכן להוסיף את כל זה. ובונוס - Trajectory Preview - קו מקווקו שמראה לאן הקליע יעוף."
הרץ את המשחק, הראה תפריט
"עכשיו כשאני פותח את המשחק, יש תפריט! 'TANK DUEL' בגדול. הוראות. לוחץ Space..."
שחק עד ניצחון
"המשחק מתחיל. שחקן 1 יורה... פגע! 1-0. שחקן 2 יורה... פגע! 1-1..."
[המשך לשחק]
"5-3... PLAYER 1 WINS!"
"זהו. יש לנו משחק שלם עם התחלה, אמצע, וסוף. מוצר אמיתי."
סיכום והמשך המסע
40:00-50:00Input Handling - ניהול קלט מרובה (WASD + חצים)
Key Mapping - הקצאת מקשים לשחקנים
Projectile Motion - פיזיקת קליע (פרבולה)
Angle & Power - מערכת זווית ועוצמה
Turn-based Gameplay - משחק תורות
Player Switching - החלפת תורות
Hit Detection - זיהוי פגיעה
Particle System - מערכת חלקיקים לאפקטים
Camera Shake - רעידת מצלמה
Game States - מצבי משחק (Menu, Playing, Game Over)
Win Condition - תנאי ניצחון
עצור שיתוף מסך, חזור למצלמה
"חברים, זהו. סיימנו את השיעור האחרון."
"בואו נעצור רגע ונסתכל מה עשינו היום:"
"בנינו משחק עם פיזיקה אמיתית - קליעים שעפים בפרבולות כמו בטבע."
"למדנו Local Multiplayer - איך שני שחקנים משחקים יחד על מכשיר אחד."
"יצרנו Particle System - אפקטים שנראים כמו במשחקי AAA."
"ובנינו משחק שלם - עם תפריט, תורות, ניצחון, והתחלה מחדש."
"אבל זה לא הסוף."
"זה רק ההתחלה. בקורס הזה למדתם את היסודות:"
"• איך לדבר עם AI
• איך לבנות משחקים
• איך לפתור בעיות
• איך להפוך רעיונות למוצרים"
"עכשיו תוכלו לקחת את זה לכל מקום. רוצים לבנות משחק מרוצים? תבנו. רוצים משחק קלפים? תבנו. יש לכם את הכלים."
"האתגר הסופי: קחו את Tank Duel, והוסיפו לו משהו משלכם. רוח שמשנה את מסלול הקליע? שטח משתנה? נשק מיוחד? תהיו יצירתיים!"
"ואם רציתם ללמוד עוד - אנחנו נפגש בקורס הבא. נלמד איך להפוך משחקים לאפליקציות אמיתיות, איך להעלות לחנות אפליקציות, ואיך לבנות משחקים עם רשתות נוירונים."
"תודה רבה לכולם על קורס מדהים. אתם מתכנתי משחקים עכשיו! 🎮"