תכנות לילדים באמצעות Game Maker/פק-מן/גרסה להדפסה


פק-מן (Pac Man) הוא אחד ממשחקי הווידאו המוכרים והאהובים ביותר בכל הזמנים. כשהופץ לראשונה נחל הצלחה מסחררת ובלתי צפויה. כשם שהמשחק הופץ למספר קונסולות ומחשבים במרוצת השנים, קיימות כיום מאות גרסאות ברחבי האינטרנט.

מסלול ההתקדמות

עריכה

"לכתוב את הרעיון זה הצעד הראשון בדרך למימושו." (לי איאקוקה)

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פק-מן

צעד 1: פקמן

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פק-מן

הכנה לדרך

עריכה
 

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



  כדאי לשמור את המשחק בשם pacman - פקמן.




עכשיו צריך להתחיל להוסיף לו אובייקטים. אלו אובייקטים נצטרך במשחק?

 

עכשיו תורכם:

לכתוב את כל האובייקטים שצריכים להופיע במשחק פקמן. כדי לוודא שלא שכחת אף אובייקט, כדאי לשחק שוב במשחק, או לצפות במישהו אחר משחק.

אם הגעת לרשימה דומה לשלי, אז יש לך די הרבה אובייקטים לתכנת:

רשימת אובייקטים
  • פקמן
  • רוחות רפאים
  • נקודות שפקמן אוכל
  • כדורי כוח שהופכים את הרוחות לאיטיות ופגיעות
  • פירות שנותנים הרבה נקודות
  • קירות המבוך שמונעים מעבר מפקמן ומהרוחות

(יכול להיות שהרשימה שלך קצת שונה. זה בסדר - כמו הרבה דברים, גם תוכנה אפשר ליצור בדרכים שונות.)

כדי ליצור את המשחק, נעבור על האובייקטים האלה אחד-אחד עד שנגמור לתכנת את כולם. הרשימה הזאת תהיה רשימת העבודה שלנו, ובעזרתה נוכל לראות מה נשאר לעשות כדי להשלים את המשחק.

ממה מתחילים?
לדעתי כדאי תמיד להתחיל ממה שיאפשר לבדוק את המשחק כמה שיותר. אחרת עלולים לתכנת הרבה מאוד דברים, להשקיע הרבה זמן, מרץ ומאמץ, ורק בסוף לגלות פתאום כל מיני שגיאות או דברים שלא מתאימים או שעדיף לשנות. כשכבר יש הרבה דברים במשחק, קשה יותר לשנות אותו, ואם יש בעיות קשה יותר לגלות מה גרם להן. לכן חשוב מהתחלה לבדוק כמה שיותר.

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

אובייקט פקמן

עריכה

אז בואו ניצור את פקמן. בשביל זה צריך:

  1. להוסיף אובייקט חדש.
  2. לשנות את שמו ל-pacman.
  3. ליצור לו דמות חדשה. ניקח את הפקמן שמחייך אלינו - pacman_stand, מכאן. לחצו על הקישור עם כפתור העכבר הימני, ובחרו "שמירה בשם", "שמירת קישור בשם" או "Save as" (משתנה קצת בין דפדפני אינטרנט).


שקיפות

עריכה

 

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

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

במסך שבו אנחנו בוחרים דמות, Game Maker מאפשר לנו להפוך אחד מהצבעים לשקוף אוטומטית. הוא יבדוק באיזה צבע הפיקסל שבפינה השמאלית למטה של התמונה, ויהפוך את כל הפיקסלים בצבע הזה לשקופים. כדי לעשות זאת, סמנו את Remove Background (רִימוּב בֶּקְגְּרָאוּנְדְּ) - הסר רקע, שמסומן בתמונה בחץ כחול. ככה רק הפקמן יוצג במשחק שלנו, בלי המסגרת שלו.

כדאי גם לסמן Smooth Edges (סְמוּת' אֶדְגְ'סְ) - החלק קצוות, שמסומן בתמונה בחץ כתום. זה יגרום למסגרת של הפקמן להיראות חלקה יותר ויפה יותר.

עכשיו אפשר להקליק על Open.

הוסיפו מופע של האובייקט פקמן לחדר שיצרנו קודם.


  רואה את פקמן על המסך?




תנועה באמצעות החצים

עריכה

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

 

עכשיו תורכם:

לתכנת את פקמן כך שינוע בתגובה להקשה על מקשי החצים. באנגלית הם נכתבים כך:
  • Right (רַייט) - ימין
  • Left (לֵפְט) שמאל
  • Up (אַפּ) - למעלה
  • Down (דַאוּן) - למטה

  לא לשכוח לוודא שכשלוחצים על כל אחד מהחצים פקמן באמת זז לכיוון המתאים.



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

 

עכשיו תורכם:

לקבוע את מהירות התנועה של פקמן באמצעות משתנה, שאפשר לקרוא לו move_speed (מוּוְ סְפִּיד) - מהירות תנועה. חשוב לזכור לאתחל את המשתנה הזה בארוע היצירה של פקמן, ולבדוק את המשחק כדי לראות שהשינוי שעשינו באמת עובד.

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


אז בואו ניכנס יותר לעומק לטיפול באיך שפקמן נראה - צעד 2: דמויות מונפשות

צעד 2: דמויות מונפשות

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פק-מן


הנפשה

עריכה

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

 

בצד ימין ייפתח חלון תכונות הדמות. שם צריך להקליק על הכפתור לעריכת הדמות - Edit Sprite.

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

 

כדאי לדעת:

להחלפה של תמונות בשביל ליצור תחושת תזוזה קוראים הנפשה או אנימציה, ובאנגלית: animation (אַנִימֵיישֵן). דמות מונפשת נראית יותר חיה - כאילו יש לה נפש.

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

החלפת דמות

עריכה

בשביל שפקמן יוכל להחליף דמויות, צריך קודם להוסיף למשחק דמויות מתאימות:

  1. הורידו את הדמויות של פקמן פונה לארבעת הכיוונים, מהקישורים הבאים (זה משתנה קצת בין דפדפני אינטרנט שונים; לחצו על כל קישור עם כפתור העכבר הימני, ובחרו "שמירה בשם", "שמירת קישור בשם" או "Save as"): ימינה שמאלה למעלה ולמטה.
  2. להקליק על הכפתור להוספת דמות בסרגל הכלים.  
  3. להקליק על הכפתור Load Sprite כדי לטעון דמות מקובץ.
  4. לבחור דמות מתאימה של פקמן, לסמן את Smooth Edges ואת Remove Background, ולהקיש אנטר.

על התהליך הזה צריך לחזור ארבע פעמים - פעם לכל כיוון של פקמן.

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

  • לדמות של פקמן פונה ימינה, לשנות את השם ל-pacman_right.
  • לדמות של פקמן פונה שמאלה, לשנות את השם ל-pacman_left.
  • לדמות של פקמן פונה למעלה, לשנות את השם ל-pacman_up.
  • לדמות של פקמן פונה למטה, לשנות את השם ל-pacman_down.
  • לדמות של פקמן פונה אלינו ומחייך, לשנות את השם ל-pacman_stand.

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

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

 

  עכשיו צריך לבדוק שפקמן באמת מחליף דמות בהתאם לכיוון התנועה.



פקמן מסתובב לכיוון התנועה, אבל הוא פותח וסוגר את הפה מאוד מהר. מהר כל כך שהוא נראה לא רעב אלא מבוהל!

כוונון ההנפשה

עריכה

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

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


  האם עכשיו קצב פתיחת וסגירת הפה טוב יותר? כדאי לנסות ערכים שונים בשדה speed ולראות מה הכי מתאים.




 

עכשיו מהירות ההנפשה טובה, אבל כשלוחצים שוב ושוב על אותו חץ זה הורס את רצף ההנפשה וסוגר לפקמן את הפה. בשביל לתקן את זה נשנה את השדה subimage (סַבּ-אִימֵג') - תת-תמונה.

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

נחזור לחלון תכונות הפעולה של פעולת החלפת הדמות  . בשדה subimage אפשר לקבוע באיזו תת-תמונה להתחיל את ההנפשה כשמחליפים דמות. כתוב שם 0, ולכן ההנפשה מתחילה בתמונה מספר 0 - תמונת הפה הסגור. אם נשנה את זה ל-2, ההנפשה תתחיל בתמונת הפה הפתוח. אבל בכל פעם שיש ארוע לחיצה על חץ ההנפשה תתחיל בתת-תמונה שנכתוב, ואנחנו לא רוצים שכל ארוע כזה יחזיר את ההנפשה לאותה תת-תמונה.


למרבה המזל, יש מספר מיוחד שמסמן ל-Game Maker להתחיל את ההנפשה בתמונה הבאה ברצף. המספר הזה הוא -1 (מספר שממילא לא מסמן אף תת-תמונה אמיתית). לכן צריך לכתוב -1 בשדה subimage.



  עכשיו צריך לוודא שההנפשה ממשיכה ברצף גם כשלוחצים שוב ושוב על אותו חץ.




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

 

עכשיו תורכם:

לכוונן את ההנפשה של פקמן המחייך בארוע היצירה של אובייקט פקמן.


עדכון רשימת העבודה

עריכה

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

  • פקמן
  • רוחות רפאים
  • נקודות שפקמן אוכל
  • כדורי כוח שהופכים את הרוחות לאיטיות ופגיעות
  • פירות שנותנים הרבה נקודות
  • קירות המבוך שמונעים מעבר מפקמן ומהרוחות

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

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

  • פקמן
  • קירות המבוך
  • נקודות שפקמן אוכל
  • פירות
  • רוחות
  • כדורי כוח

עכשיו אנחנו יודעים מה הדבר הבא לעבוד עליו - צעד 3: תנועה במבוך

צעד 3: תנועה במבוך

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פק-מן


מבט מקרוב על המבוך

עריכה

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

 

 

בהרבה משחקים התנועה של האובייקטים מוגבלת לרשת כזו. לרשת נהוג לקרוא grid (גְּרִיד) - שָׂרִיג. למרבה המזל, ל-Game Maker יש פעולות מיוחדות בשביל לתכנת תנועה בשריג.

תנועה בשריג

עריכה

כרגע פקמן יכול לפנות בכל נקודה וככה הוא "דורך" על הקוים של השריג. אפשר לגרום לו להתייצב בדיוק במשבצת של השריג באמצעות פעולת היישור לשריג שנמצאת בלשונית move  .

 

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

 

כדאי לדעת:

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

  כשפקמן מסתובב, הוא קופץ למשבצות השריג וככה הוא נע רק בין קוי השריג.




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

פעולות תנאי

עריכה

הבדיקה אם פקמן מיושר לשריג נעשית באמצעות פעולה מיוחדת, שנמצאת בלשונית control ונקראת בדיקת יישור לשריג:  .

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

 

כדאי לדעת:

 

בלשונית control יש עוד פעולות תנאי: כל הפעולות שהכפתור שלהן בצורת מתומן הן פעולות תנאי. כל אחת מהן בודקת תנאי מסוג אחר.

 

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

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

אבל רגע! מה עם פעולת שינוי הדמות? גם אותה צריך לבצע רק אם פקמן מיושר לשריג!

בלוק

עריכה

כשרוצים שפעולת תנאי תקבע אם יתבצעו כמה פעולות, אפשר לצרף את כל הפעולות האלה לגוש אחד, שנקרא block (בְּלוֹק). Game Maker מתייחס לכל הבלוק כאל פעולה אחת.

 

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

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

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

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

 



  עכשיו פקמן לא קופץ ולא פונה כשהוא לא מיושר לשריג בדיוק. אבל איך אפשר לדייק וללחוץ בדיוק ברגע שהוא מיושר?




שינוי ארוע

עריכה

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

אבל הארוע של הקשה על חץ לא מתאים לזה - הוא קורה רק כשהמשתמש מתחיל ללחוץ על החץ. צריך להחליף אותו בארוע של מקש חץ לחוץ - הארוע שקורה שוב ושוב כל עוד המשתמש ממשיך ללחוץ על החץ.  

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

  1. ברשימת הארועים של האובייקט, להקליק על אחד מארועי החצים כדי לבחור אותו.
  2. מתחת לרשימת הארועים יש שלושה כפתורים; ללחוץ על הכפתור Change (צֵ'יינְג') - שנה.
  3. מופיע חלון סוגי הארועים. כאן צריך לבחור בארוע החדש - ארוע מקש לחוץ.  
  4. בתפריט שצץ, לבחור את המקש המתאים. (אותו המקש של הארוע הישן)

את שינוי הארוע צריך לעשות לכל ארבעת ארועי החצים.



  עכשיו הכל עובד.




התאמת היישור לשריג

עריכה

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

שנו את בדיקת השריג שלפני כל תנועה, כך שלפני תנועות למעלה ולמטה, המשחק יבדוק יישור לשריג של 32 לרוחב (הציבו 32 בתא snap hor) ו-0 לגובה (הציבו ערך 0 בתא snap vert), ולפני תנועה לימין ולשמאל, המשחק יבדוק יישור לשריג של 0 לרוחב (snap hor) ו-32 לגובה (snap vert).


  יותר קל לסובב את פקמן עכשיו. אבל האם הוא תמיד מסתובב כשצריך? או שהוא עובר כמה משבצות בשריג עד שהוא מסתובב?




צעדים

עריכה
 

עכשיו תורכם:

לשנות את מהירות התנועה של פקמן, אותה המהירות שקבעתם בארוע היצירה שלו באמצעות המשתנה move_speed (מוּב סְפִּיד) - מהירות תנועה.

איך מהירות התנועה משפיעה על הסיבובים של פקמן? כדאי לנסות מהירויות שונות ולראות מה קורה בכל מהירות.

מהניסויים בטח למדת שיש מהירויות שבהן פקמן מסתובב רק בשריג הרבה יותר גדול ממה שאמרנו לו (למשל מהירות 5), ויש מהירויות אחרות שבהן פקמן מסתובב בדיוק בזמן ובמקום המתאים (למשל מהירות 4). למה זה קורה? בשביל להבין את זה צריך להבין מה זו בדיוק המהירות של אובייקט.

כשאנחנו מתכנתים אובייקט לנוע במהירות 5, Game Maker יזיז אותו 5 פיקסלים בכל צעד של המשחק.


מה זה צעד?

עריכה

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

 

הצעדים של Game Maker הרבה יותר מהירים משלנו (30 צעדים בכל שניה!) וככה אנחנו לא מבחינים בהם אלא רואים תנועה רצופה של האובייקטים במשחק.

אם פקמן מתקדם 4 פיקסלים בכל צעד, אז אחרי שני צעדים הוא יעבור 8 פיקסלים, ואחרי שלושה צעדים הוא יעבור כבר 12 פיקסלים. ואם נחכה 8 צעדים - הוא יעבור בדיוק 32 פיקסלים ויוכל לפנות.

 

אבל מה קורה כשפקמן נע במהירות 5? אז אחרי שני צעדים הוא יתקדם 10 פיקסלים, אחרי שלושה צעדים הוא יתקדם 15 פיקסלים, וכך הוא ימשיך הלאה. אחרי 6 צעדים הוא כבר יתקדם 30 פיקסלים, אבל בצעד הבא הוא כבר יגיע ל-35 פיקסלים - הוא יעבור את המקום המתאים לפנייה, מבלי להגיע אליו בדיוק! רק כשהוא יעבור חמש משבצות שריג - 160 פיקסלים - פקמן יגיע בדיוק למקום מתאים לפנייה.

זאת אומרת שבשביל שפקמן יוכל לפנות בשריג בגודל 32 פיקסלים, המהירות שלו צריכה להכנס מספר שלם של פעמים ב-32. למשל, 4 זה בדיוק 32/8 (32 לחלק ל-8), כלומר ב-8 צעדים של 4 פיקסלים פקמן עובר בדיוק 32 פיקסלים. לכן מהירות 4 מתאימה לתנועה בשריג בגודל 32 על 32 פיקסלים. עוד מהירויות שמתאימות הן 32/9, או 32/10, או 32/7, וכן הלאה. אפשר לכתוב אחד הביטויים האלה בתור הערך של move_speed, ואז Game Maker כבר יחשב בעצמו את התוצאה.


  כדאי לוודא שפקמן באמת מסתובב עכשיו כמו שצריך.




ומה אם נרצה לשנות למהירות אחרת בעתיד, כדי לעשות את המשחק מאתגר יותר? בואו נשאיר את זה לעתיד כרגע, ורק נוסיף את זה לרשימת העבודה כדי שלא נשכח.

עדכון רשימת העבודה

עריכה

אז עכשיו הרשימה שלנו נראית ככה:

  • פקמן
  • קירות המבוך
  • נקודות שפקמן אוכל
  • פירות
  • רוחות
  • כדורי כוח
  • (אולי) להאיץ את מהירות התנועה

אם עשינו כל כך הרבה דברים, איך זה שרשימת העבודה רק התארכה? כי למדנו דברים שלא ידענו קודם. עכשיו אנחנו יודעים יותר על התנועה של פקמן ועל המבוך.


באמת הגיע הזמן לחזור למבוך, עכשיו כשפקמן זז כמו שצריך - צעד 4: המבוך

צעד 4: המבוך

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פק-מן


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

אז לעבודה:

  1. ליצור אובייקט חדש ולשנות את שמו ל-wall (וּוֹל) - קיר.
  2. ליצור לו דמות חדשה בגודל 32 על 32 פיקסלים - גודל השריג שלנו. (אפשר להשתמש בדמות המוכנה wall שיש באותה תיקייה ממנה לקחנו את הדמויות של פקמן.) כדאי לתת לדמות הזו שם משמעותי, כמו wall_sprite (וּוֹל סְפְּרַייט) - דמות קיר.
  3. בחלון בחירת הדמות, להוריד את הסימון מתיבת הסימון Remove Background, כדי שלא יהיו בקיר חריצים ושקעים שקופים.
  4. בחלון תכונות האובייקט, לסמן את תיבת הסימון Solid כי הקיר שלנו תמיד נשאר יציב במקומו.
 

עכשיו צריך להגיד לפקמן לעצור כשהוא מגיע לקיר - בארוע ההתנגשות שלו בקיר. בשביל זה צריך:

  1. לפתוח את חלון תכונות האובייקט של פקמן (באמצעות הקלקה כפולה על הפקמן שבתיקיית האובייקטים objects ברשימת המשאבים משמאל).
  2. להוסיף לו ארוע התנגשות באובייקט הקיר.  
  3. להוסיף לרשימת הפעולות של הארוע פעולת תנועה   בשביל לעצור את פקמן.

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


  מה קורה כשפקמן מגיע לקיר? מה קורה כשמנסים להזיז אותו משם?




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


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



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

בדיקת התנגשות

עריכה

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

 

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

השדות בחלון אפשרויות הפעולה מגדירים באיזה מקום לבדוק את ההתנגשות, ואיזה מין התנגשויות לבדוק. נעבור עליהם אחד-אחד כדי להבין מה כל אחד מהם אומר.

 

x הוא מספר הפיקסלים בין המקום שרוצים לבדוק לבין הקצה השמאלי של החדר. אם מסמנים את תיבת הסימון Relative, אז x זה מספר הפיקסלים ימינה מהמקום שבו נמצא האובייקט. אם רוצים לבדוק התנגשות דווקא משמאל לאובייקט, אפשר לכתוב בשדה x מספר שלילי, כמו למשל -5.

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

objects אומר אם לבדוק רק התנגשות באובייקטים יציבים (כמו הקיר) או בכל האובייקטים. מאחר שאין לנו בעיה שפקמן יפנה ויתקל ברוחות או פירות, נשאיר את התוכן של השדה הזה Only solid (אוֹנְלִי סוֹלִיד) - רק יציבים.

 

כדאי לדעת:

x ו-y נקראים קורדינטות. כשמדברים על קורדינטות של נקודה, מתכוונים לזוג המספרים האלה: המרחק האופקי (לרוחב) של הנקודה מהמקום שממנו מתחילים לספור, והמרחק האנכי (לגובה) של הנקודה מהמקום שמתחילים לספור. המקום שממנו מתחילים לספור את המרחקים נקרא "ראשית הצירים". במקרה שלנו ראשית הצירים היא הפינה השמאלית עליונה של החדר. אם מסמנים Relative, אז ראשית הצירים היא המיקום של האובייקט.

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

מה צריך לכתוב בשדות x ו-y?

  • בארוע של חץ ימינה, נרצה לבדוק מיקום שנמצא קצת מימין לפקמן אבל באותו גובה. לכן נכתוב 10 (למשל) בשדה x, ונשאיר 0 בשדה y.
  • בארוע של חץ למעלה, נרצה לבדוק מיקום שנמצא קצת מעל פקמן. לכן נשאיר 0 בשדה x, ונכתוב -10 בשדה y.
 

עכשיו תורכם:

למלא את הערכים המתאימים בפעולות בדיקת ההתנגשות של הארועים חץ למטה וחץ שמאלה.

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




מבנה המבוך

עריכה
 

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



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




קיצורי דרך

עריכה

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

 

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

בחלון אפשרויות הפעולה נשנה את השדה direction לערך האחרון בתפריט: in both directions (אִין בּוֹס' דַיירֵקְשֵנְס) - בשני בכיוונים, גם לרוחב וגם לגובה. כך פעולת הגלישה תתאים גם למנהרות אופקיות (כמו זו שבתמונה) וגם למנהרות אנכיות.


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




עדכון רשימת העבודה

עריכה

השלמנו את המבוך וכל התנועות שקשורות בו. עכשיו רשימת העבודה המעודכנת נראית ככה:

  • פקמן
  • קירות המבוך
  • נקודות שפקמן אוכל
  • פירות
  • רוחות
  • כדורי כוח
  • (אולי) להאיץ את מהירות התנועה

עכשיו אפשר להתקדם לפריט הבא ברשימה - צעד 5: נקודות

צעד 5: נקודות

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פק-מן


לאכול

עריכה

מנקודת המבט של המשתמש, הסיפור פשוט:

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

מה זה אומר מבחינת תכנות?

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

נעשה את שלושת הדברים האלה לפי הסדר.

 

עכשיו תורכם:

 
  • ליצור אובייקט לנקודה ולקרוא לו dot (דוט) - נקודה. אפשר להשתמש בדמות dot שנמצאת באותה תיקיה שממנה לקחנו את הדמויות של פקמן.
  • להציב מופעים של האובייקט הזה ברחבי החדר, בין קירות המבוך. עצה: בשביל להוסיף הרבה מופעים בבת אחת, אפשר לגרור את העכבר בזמן שמחזיקים את מקש Shift לחוץ.

מחיקת מופעים

עריכה

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

הפעולה שצריך לעשות בארוע הזה היא מחיקת מופע, שנמצאת בלשונית main1   .

 

בחלון אפשרויות הפעולה כמעט אין מה למלא - אין שדות. אבל הפעם נשתמש באפשרות שעד עכשיו התעלמנו ממנה, למרות שהיא מופיעה ברוב הפעולות: Applies to (אַפְּלַייז טוּ) - מתייחס אל, האפשרות לקבוע על איזה מופע לבצע את הפעולה. שלושת הערכים שאפשר לבחור ביניהם הם:

Self (סֵלְף) - עצמי. הפעולה תתבצע על המופע עצמו. אם נבחר שפעולת המחיקה תתבצע על האובייקט עצמו, אז פקמן יהיה זה שיימחק מהמשחק ברגע שהוא יגיע לנקודה. (נסו ותראו!)
עד עכשיו כל הפעולות שביצענו פעלו על האובייקט עצמו, ולכן תמיד השארנו את הבחירה הזו.

Other (אַזֵר) - האחר. הפעולה תתבצע על מי שהתנגשנו בו. זה בדיוק מה שצריך במקרה שלנו: למחוק את הנקודה שבה פקמן פגע.

Object (אוֹבְּגֵ'קְט) - אובייקט. הפעולה תתבצע על כל המופעים של אובייקט מסוים (אפשר לבחור איזה). למשל, אם נבחר כאן באובייקט הנקודה, אז כל הנקודות ימחקו מהמשחק ברגע שפקמן יפגע באחת מהן. (נסו ותראו!)



  עכשיו הנקודות אמורות להמחק כשפקמן עובר.




 

כדאי לדעת:

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

כששני מופעים מתנגשים, לרוב עדיף להוסיף את ארוע ההתנגשות לאובייקט שיש לו פחות מופעים במשחק. (במקרה שלנו, יש רק מופע אחד של פקמן, אבל יש עשרות נקודות.) הסיבה היא שאם מוסיפים לאובייקט ארוע התנגשות, Game Maker עובר על כל אחד מהמופעים שלו ובודק לגבי כל אחד מהם עם מי הוא מתנגש.

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

מה נשאר לנו?

 

עכשיו תורכם:

1. להעלות את הניקוד בכל פעם שפקמן אוכל נקודה.

2. בתחילת המשחק, להציג את הניקוד בכותרת החלון. (באמצעות הפעולות     בלשונית הניקוד score.)

סוף המבוך

עריכה

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

פעולות התנאי נמצאות בלשונית control. הפעולה שנשתמש בה בודקת את מספר המופעים שנמצאים כרגע במשחק:  

 

בחלון אפשרויות הפעולה יש שלושה שדות:

  • object: מופעים של איזה אובייקט צריך לספור. במקרה שלנו, אנחנו רוצים לבדוק את מספר המופעים של אובייקט הנקודה.
  • number (נַמְבֵּר) - מספר: איזה מספר מופעים לבדוק. אנחנו רוצים לבדוק מתי לא נשארו יותר נקודות בכלל, כלומר: 0 מופעים.
  • operation (אוֹפֵּרֵיישֵן) - פעולת ההשוואה: האם לבדוק אם מספר המופעים שווה, קטן יותר, או גדול יותר מאשר המספר שכתבנו בשדה number. את השדה הזה נשאיר על Equal to (אִיקְוּאֵל טוּ) - שווה.

חשוב לוודא שפעולת הבדיקה מופיעה אחרי פעולת מחיקת האובייקט ברשימת הפעולות של הארוע, אחרת כשהיא תתבצע עדיין תהיה קיימת נקודה אחת - הנקודה שתימחק בפעולה הבאה!

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



  עכשיו צריך לאכול את כל הנקודות ולודא שהמשחק נגמר.



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


הדרך של Game Maker לעשות עוד מבוכים (או "רמות" או "מסכים") היא באמצעות חדרים - צעד 6: עוד חדרים

צעד 6: עוד חדרים

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פק-מן


עוד חדרים

עריכה

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

 

עכשיו תורכם:

 

להוסיף למשחק עוד חדר וליצור בו מבוך. להוסיף לחדר גם נקודות וגם פקמן.

עכשיו אפשר לשנות את הפעולה שמתבצעת כשפקמן אוכל את הנקודה האחרונה:

  1. למחוק את פעולת סיום המשחק מרשימת הפעולות (של ארוע ההתנגשות של פקמן בנקודה).
  2. במקומה להוסיף את פעולת המעבר לחדר הבא שנמצאת בלשונית main1:  . באפשרויות הפעולה אפשר לבחור כל מיני אפקטים גרפיים שיקרו כשעוברים חדר. אפשר להשאיר את זה על ברירת המחדל (בלי שום אפקט) או לנסות אפקטים שונים ולראות מה מוצא חן בעיניך.

  מה קורה כשפקמן משלים את המבוך? ומה קורה כשהוא משלים את המבוך השני?



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

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

פעולת בדיקת ההפך

עריכה

בלשונית control יש פעולת בדיקה מיוחדת, שבודקת את ההפך מפעולת הבדיקה שלפניה  . ככה שאם בדקנו אם יש עוד חדר, היא תפעיל את הפעולה שנשים אחריה רק אם אין עוד חדר. (או למשל, אם בדקנו אם נגמרו הנקודות, היא תפעיל את הפעולה שאחריה רק אם יש עוד נקודות.) לפעולה הזו קוראים Else (אֵלְס) - אחרת.

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

איפה נשים את הפעולה "אחרת"? אחרי פעולת המעבר לחדר הבא. ככה ניצור את המשפט "אם יש עוד חדר - תעבור אליו, אחרת - ..."

 

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

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



  עכשיו צריך לוודא שהמשחק מסתיים יפה כשמשלימים את שני המבוכים.




 

עכשיו תורכם:

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

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

עדכון רשימת העבודה

עריכה

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

  • פקמן
  • קירות המבוך
  • נקודות שפקמן אוכל
  • פירות
  • רוחות
  • כדורי כוח
  • עוד מבוכים
  • (אולי) להאיץ את מהירות התנועה

נתקדם לפריט הבא ברשימה - צעד 7: פירות

צעד 7: פירות

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פק-מן


חפץ בונוס

עריכה

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

קודם כל, צריך ליצור אובייקט לחפץ המיוחד. נקרא לו bonus - בּוֹנוּס. אפשר להשתמש בשבילו בדמות של הארטיק מהתיקייה שממנה לקחנו גם את שאר הדמויות למשחק, או למצוא דמות אחרת, או לצייר דמות משלך.

את האובייקט צריך להציב בכל אחד משני החדרים שיצרת, אבל הפעם אי אפשר סתם להקליק בשביל להציב אותו בחדר! אם מציבים אובייקט במקום שיש בו כבר אובייקט אחר, זה מוחק את האובייקט שהיה שם קודם. בדרך כלל זה טוב, כי לא נרצה שתהיה נקודה על קיר, למשל. אבל הפעם זה לא מתאים, כי חפץ הבונוס יופיע במקום שבו כבר הצבנו נקודה או את פקמן עצמו. לכן לפני שמקליקים כדי להציב אותו בחדר, צריך להוריד את הסימון מתיבת הסימון Delete underlying (דִילִיט אַנְדֵרְלַיִינְג) - מחק מה שמתחת.

 

עכשיו אפשר להקליק במקום של פקמן (או במקום אחר) ואז להציב את הבונוס.


  החפץ יופיע עכשיו מיד עם הופעת המבוך. אבל אנחנו רוצים שהוא יופיע רק אחר כך, במפתיע, ושאז ישוב ויעלם...




הופעת והעלמת הבונוס

עריכה

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

את ההעברה למקום אחר צריך לעשות מיד בהתחלה - בארוע היצירה של האובייקט  . בחלון אפשרויות הפעולה של פעולת ההעברה למקום אחר, צריך להגיד לאיזה מקום להעביר את האובייקט. השדות הם x ו-y - הקורדינטות של המקום החדש. אנחנו רוצים לתת קורדינטות של מקום מחוץ לחדר, לכן נכתוב שם, למשל, -100 באחד השדות - זה יציב את האובייקט מעל החדר או משמאלו, במקום שבכלל לא מוצג.

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


שעונים

עריכה

Game Maker מאפשר לאובייקטים להשתמש בשעונים מעוררים. השימוש בשעונים הוא באמצעות פעולה של כיוון שעון כדי שיעיר את האובייקט לפעולה אחרי כמה זמן, ובאמצעות ארוע של "צלצול" שעון שבו אפשר לעשות פעולות. (כמובן שהמשתמש לא ישמע שום צלצול - זה רק האובייקט שיתעורר לפעילות.) לכל אובייקט יש 12 שעונים מעוררים, וכל אחד מהם יכול להעיר את האובייקט לבצע רשימת פעולות שונה.

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

 

בחלון אפשרויות הפעולה יש שני שדות:

  • number of steps (נַמְבֵּר אוֹף סְטֵפְּס) - מספר הצעדים. כאן קובעים בעוד כמה זמן השעון יצלצל. את הזמן סופרים לא בשעות או דקות או שניות, אלא בצעדים של המשחק. מאחר שמשחק מתקדם בקצב של 30 צעדים כל שניה, כתבתי 300 צעדים - ככה הבונוס יופיע אחרי עשר שניות.
  • in alarm no (אִין אַלַרְם נַמְבֵּר) - בשעון מס'. כאן קובעים איזה מ-12 השעונים לכוון (וכרגיל בתכנות, סופרים אותם מ-0 עד 11).


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

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


  האם הבונוס באמת מופיע אחרי 10 שניות?




אבל זה לא מספיק - הבונוס צריך להשאר על המסך רק לכמה שניות, ואחר כך להעלם שוב. איך נעלים אותו? שוב בעזרת שעון מעורר! נוסיף גם לארוע הזה פעולה של כיוון שעון מעורר  . הפעם לא נכוון את שעון 0, כי כשהוא יצלצל זה יגרום לאובייקט שוב להופיע. במקום זאת נכוון את שעון 1. הפעם נכוון אותו לצלצל אחרי פחות זמן, למשל 150 צעדים.

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

  •   להוסיף ארוע נוסף של צלצול שעון - הפעם לבחור את שעון 1 מהתפריט שצץ.
  •   להוסיף לארוע הזה את פעולת ההעברה למקום אחר, ולשלוח את הבונוס שוב מחוץ למסך.

  הבונוס אמור להופיע אחרי עשר שניות, ולהעלם אחרי חמש שניות נוספות.




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

 

עכשיו תורכם:

להשתמש בשעונים נוספים כדי לגרום לבונוס להופיע ולהעלם פעם שניה.

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

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

  נסו לאכול את הבונוס ולראות שבאמת קיבלתם ניקוד בהתאם.




עדכון רשימת העבודה

עריכה

השלמנו את נושא הפירות - לפחות כרגע, לשני המבוכים הראשונים. רשימת העבודה שלנו עכשיו היא:

  • פקמן
  • קירות המבוך
  • נקודות שפקמן אוכל
  • פירות
  • רוחות
  • כדורי כוח
  • עוד מבוכים
  • (אולי) להוסיף חפצי בונוס שווים יותר למבוכים המתקדמים
  • (אולי) להאיץ את מהירות התנועה

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


הפריט הבא ברשימה - צעד 8: רוחות

צעד 8: רוחות

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פק-מן


רוחות

עריכה

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

 

עכשיו תורכם:

# ליצור אובייקט רוח. אפשר להשתמש באחת מדמויות הרוחות שנמצאות באותה תיקייה שממנה לקחנו את שאר הדמויות. לאובייקט כדאי לקרוא ghost (גוֹוּסְט) - רוח רפאים.
  1. להציב מופע אחד של אובייקט הרוח בחדר.
  2. לתת לפקמן 3 חיים בתחילת המשחק.  
  3. להציג את כמות החיים בכותרת החלון.  
  4. כשפקמן מתנגש ברוח, להוריד לו חיים  , להשמיע צליל  , להחזיר את פקמן והרוח לנקודות ההתחלה שלהם   ולעצור את התנועה שלהם  , ולהשהות לרגע את המשחק כדי לתת לשחקן להרגע ולהתכונן להמשך  .
  5. כשנגמרים החיים - להציג את טבלת האלופים   ולהתחיל מחדש את המשחק  .

לא לשכוח להפעיל את המשחק ולהתנגש ברוח כדי לראות שהכל באמת עובד.

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

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

לכן במקום זה נשתמש בארוע אחר: ארוע צעד.

ארוע צעד

עריכה

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

לכן נוסיף לאובייקט הרוח ארוע צעד:  . בתפריט שצץ יש שלוש אפשרויות:

  • Step (סְטֵפּ) - צעד. הארוע הזה קורה אחרי הארועים האחרים שקורים באותו רגע (כגון ארועי מקשים וצלצולי שעון) אבל לפני הזזת האובייקטים למקומות החדשים שלהם.
  • Begin Step (בִּיגִין סְטֵפּ) - תחילת צעד. הארוע הזה קורה לפני כל הארועים האחרים שקורים באותו רגע, כאן ניתן לבצע פעולות שרוצים לעשות לפני כל דבר אחר.
  • End Step (אֵנְד סְטֵפּ) - סוף צעד. הארוע הזה קורה לאחר שהאובייקטים כבר במקומות החדשים שלהם וכבר יודעים מי התנגש במי.

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

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


  הרוח אמורה לנוע באופן אקראי, אבל בהתאם לשריג.



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


  עכשיו הרוח צריכה לנוע בתוך המבוך בצורה אקראית.



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

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


  נסו לכתוב מספרים שונים לפעולת הטלת הקוביה ולראות איך זה משפיע על תנועת הרוח.




יצרת רוח שזזה יפה, אבל היא לא כל כך מאיימת - זה לא אתגר גדול להתחמק ממנה. כדי שהמשחק יהיה מאתגר, צריך רוח קצת יותר חכמה.

עוד רוח

עריכה

אם היית רוח, מה היית עושה?

אני, למשל, הייתי מנסה לרדוף אחרי פקמן. אז בואו ננסה ליצור רוח רודפת כזאת.

הפעם לא נוסיף אובייקט חדש מהתחלה, אלא פשוט נשכפל את אובייקט הרוח הקיים. בשביל זה צריך להקליק על אובייקט הרוח בכפתור הימני של העכבר, ולבחור בתפריט שצץ Duplicate (דוּפְּלִיקֵייט) - שכפל.

לאובייקט החדש כדאי לתת דמות שונה - אחת מדמויות הרוחות בצבע אחר. וצריך לתת לו שם משמעותי, למשל shadow (שַדוֹוּ) - צל, הכינוי של הרוח האדומה בפקמן המקורי, שמנסה לרדוף אחרי פקמן כמו צל.

את הרוח החדשה צריך להוסיף לחדר כדי שיהיה אפשר לבדוק אותה.


  עכשיו אמורות להיות שתי רוחות שנעות בצורה אקראית. נסו להתנגש בשתיהן.




הרוח החדשה לא הורגת את פקמן? אז צריך לשכפל גם את ארוע ההתנגשות של פקמן ברוח  . בשביל זה צריך לפתוח את חלון תכונות האובייקט של פקמן, להקליק בכפתור הימני על ארוע ההתנגשות ברוח, ובתפריט שצץ לבחור Duplicate Event (דוּפְּלִיקֵייט אֵוֵונְט) - שכפל ארוע. מופיע החלון של סוגי הארועים, ובו צריך לבחור שהארוע המשוכפל יהיה ארוע ההתנגשות ברוח החדשה.


  מה קורה כשמתנגשים ברוחות?




כדי שגם הרוח שפקמן לא התנגש בה תחזור לנקודת ההתחלה, צריך להוסיף לארוע ההתנגשות עוד פעולת העברה לנקודת ההתחלה - הפעם בשביל הרוח השניה. בשביל זה, בחלון אפשרויות הפעולה צריך לבחור שהפעולה מתייחסת אל (Applies to) האפשרות השלישית: object. בתפריט שצץ בוחרים את הרוח השניה.


  עכשיו שתי הרוחות אמורות לחזור לנקודת ההתחלה כשמתנגשים בהן.




רוח הצל עובדת, אז עכשיו אפשר ללמד אותה לעבוד בחוכמה: לרדוף אחרי פקמן - צעד 9: תנועה חכמה

צעד 9: תנועה חכמה

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פק-מן


משתני הקורדינטות

עריכה

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

בחלון אפשרויות הפעולה צריך לכתוב הקורדינטות (x ו-y) של הנקודה אליה רוצים לזוז, ואת מהירות התנועה (speed). המהירות צריכה להיות אותה מהירות שנתת לצל בפעולת התנועה הפשוטה. אבל איך נדע מה הקורדינטות?

למרבה המזל, הקורדינטות של אובייקט הן משתנים, בדיוק כמו משתנה המהירות speed שראינו במשחק פונג. למשתנים האלה קוראים (באופן לא מפתיע) x ו-y. ככה שאם נכתוב x באיזשהו שדה, Game Maker יציב במקומו את המרחק של האובייקט מהקצה השמאלי של החדר.

הבעיה היא שאנחנו לא רוצים את x של האובייקט שלנו, של הצל. אנחנו צריכים את x (ואת y) של פקמן, כדי להגיד לצל לנוע לכיוונו. הפתרון של Game Maker לבעיה הזאת הוא לאפשר לנו להגיד שאנחנו רוצים x של אובייקט אחר. איך אומרים את זה? ככה: pacman.x כשאנחנו כותבים לפני שם המשתנה (x) את שם האובייקט (pacman) וביניהם שמים נקודה, Game Maker יבין שאנחנו מתכוונים למשתנה של האובייקט שאותו כתבנו.

לכן צריך לכתוב pacman.x בשדה x, ו-pacman.y בשדה y.

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

משתנה הכיוון

עריכה
 

כדי ליישר את כיוון התנועה נצטרך לשנות עוד משתנה: direction. המשתנה הזה קובע את כיוון התנועה של האובייקט. הערך שלו הוא מספר המעלות של כיוון האובייקט ביחס לתנועה ימינה. אנחנו צריכים שהערך של המשתנה direction יהיה אחד מהמספרים 0 (ימינה), 90 (למעלה), 180 (שמאלה) או 270 (למטה).

בשביל לשנות את הערך של המשתנה direction צריך להוסיף פעולה נוספת אחרי פעולת התנועה - פעולת קביעת ערך של משתנה, שנמצאת בלשונית control:  .

 

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

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

אנחנו צריכים לשנות את הערך של משתנה הכיוון direction כדי שיהיה אחד מהכיוונים הישרים: 0, 90, 180, או 270. כלומר, צריך לעגל את הערך של direction לכפולה של 90.


 

כדאי לדעת:

כשאומרים "לעגל" מספר אין לזה קשר לעיגול. הכוונה היא למצוא את "המספר העגול" הכי קרוב. מה זה "מספר עגול"? זה תלוי בהקשר. בהקשר שלנו, למשל, הכוונה למספר מעלות שנותן כיוון לא אלכסוני. בהקשרים אחרים, מתכוונים למספר שלם - מספר שאין לו ספרות אחרי הנקודה העשרונית. למשל, אם מעגלים את המספר 2.3 מקבלים 2, ואם מעגלים 5.9 מקבלים 6. יש עוד הקשרים, אבל הם כרגע לא חשובים לנו.

ב-Game Maker יש פונקציה שמעגלת מספר כלשהו למספר השלם הקרוב ביותר: הפונקציה round (רַאוּנְד) - עַגֵּל. למשל, אם נכתוב round(2.8) אז Game Maker יציב במקום זה את התוצאה של הפונקציה: 3.

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

  1. נחלק את הכיוון ב-90. אז אם הכיוון היה ימינה (0 מעלות) נקבל 0, אם הכיוון היה למעלה למעלה (90 מעלות) נקבל 1, אם שמאלה (180 מעלות) נקבל 2, ואם למטה (270 מעלות) נקבל 3. במלים אחרות, הביטוי direction/90 (כלומר, הכיוון לחלק ל-90) ייתן לנו מספר בין 0 ל-4, שבו הכיוונים הישרים הופכים בדיוק למספרים השלמים. כיוונים אחרים יהפכו למספרים לא שלמים (למשל, כיוון 45 יהפוך ל-0.5).
  2. נעגל את המספר שקיבלנו באמצעות הפונקציה round. מה שיצא יהיה הביטוי: round( direction/90 ). ככה שאם קיבלנו קודם 3.1 זה יהפוך ל-3, ואם קיבלנו 0.7 זה יהפוך ל-1.
  3. ולבסוף, נכפיל את התוצאה ב-90, כדי ששוב יהיה לנו כיוון במעלות: 90 * round( direction/90 ) (הסימן * מסמן פעולת כפל). ככה שאם בשלב הקודם היה לנו 1, אז נקבל עכשיו 90, אם היה 2 אז נקבל 180, וכן הלאה.

השורה התחתונה: נכתוב בשדה הערך את הביטוי 90 * round( direction/90 ) וככה נהפוך את הכיוון האלכסוני לכיוון הישר הקרוב ביותר.


  איך הצל נע עכשיו?




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


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




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


  עכשיו הצל אמור לרדוף אחרי פקמן יותר מוקדם במשחק.




חוכמות אחרות

עריכה

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

במקום זה, נוסיף עוד רוח אחת: speedy (סְפִּידִי) - מהיר. בפקמן המקורי, זו הרוח הורודה. היא מנסה להגיע לא למיקום של פקמן, אלא למיקום שנמצא כמה משבצות לפניו.

 

עכשיו תורכם:

לשכפל את אובייקט הצל ואת ארוע ההתנגשות של פקמן בצל. לאובייקט החדש לקרוא speedy ולתת לו דמות חדשה של רוח.

כדי שספידי ינוע למיקום שלפני פקמן, צריך לשנות את פעולת התנועה לנקודה שהוא עושה בארוע הצעד. במקום שהוא ינוע לנקודה שה-x שלה הוא pacman.x וה-y שלה הוא pacman.y (המיקום של פקמן), צריך לכוון אותו לנקודה שנמצאת כמה משבצות לפני פקמן: נקודה שה-x שלה הוא pacman.x ועוד משהו או פחות משהו (תלוי אם פקמן מתקדם ימינה או שמאלה), וה-y שלה הוא pacman.y ועוד משהו או פחות משהו (תלוי אם פקמן מתקדם למטה או למעלה).

איך נדע מה להוסיף ל-pacman.x ול-pacman.y? בשביל זה נשתמש בעוד שני משתנים:

  • hspeed זה קיצור של horizontal speed (הוֹרִיזוֹנְטַל סְפִּיד) - מהירות אופקית, כלומר המהירות ימינה או שמאלה. אם פקמן נע ימינה, המהירות האופקית שלו תהיה מספר חיובי (למשל 4) ואם הוא נע שמאלה אז המהירות האופקית שלו תהיה מספר שלילי (למשל -4).
  • vspeed זה קיצור של vertical speed (וֵרְטִיקַל סְפִּיד) - מהירות אנכית, כלומר המהירות למטה או למעלה. אם פקמן נע למטה, המהירות האנכית שלו תהיה מספר חיובי (למשל 4) ואם הוא נע למעלה אז המהירות האנכית שלו תהיה מספר שלילי (למשל -4).

אם נוסיף ל-pacman.x את המשתנה pacman.hspeed, נקבל מקום שנמצא כמה פיקסלים לפני פקמן בכיוון האופקי. ואם נוסיף ל-pacman.x את הביטוי pacman.hspeed * 32 נקבל מקום שנמצא כמה משבצות לפני פקמן בכיוון האופקי. לכן, בפעולת התנועה לכיוון נקודה של ספידי, נכתוב בשדה x את הביטוי:
pacman.x + pacman.hspeed * 32
בדומה, בשדה y נכתוב את הביטוי:
pacman.y + pacman.vspeed * 32


  נסו למשוך את ספידי לרדוף אחרי פקמן ואחר כך לברוח ממנו.




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

 

עכשיו תורכם:

לשכפל את אחת הרוחות, ולשנות את הפעולות בארוע הצעד שלה כך שתנוע לפי חוקים קצת שונים.

עדכון רשימת העבודה

עריכה

המצב שלנו עכשיו בתהליך העבודה הוא זה:

  • פקמן
  • קירות המבוך
  • נקודות שפקמן אוכל
  • פירות
  • רוחות
  • כדורי כוח
  • עוד מבוכים
  • (אולי) להוסיף חפצי בונוס שווים יותר למבוכים המתקדמים
  • (אולי) להאיץ את מהירות התנועה

למרבה המזל, הפריט הבא ברשימה יקל קצת על השחקן להתמודד מול צבא הרוחות שיצרנו לו - צעד 10: כדורי כוח

צעד 10: כדורי כוח

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פק-מן


הכדורים

עריכה

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

זה הרבה מאוד דברים לעשות! בואו נסדר אותם ברשימת עבודה:

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

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

 

עכשיו תורכם:

# ליצור אובייקט כדור כוח ולקרוא לו power (פַּאוּאֵר) - כוח. אפשר להשתמש בשבילו בדמות special מהתיקייה שממנה לקחנו את כל הדמויות.
  1. להציב ארבעה מופעים שלו במבוך, קרוב לפינות.
  2. ליצור לו ארוע התנגשות עם פקמן שדומה לארוע ההתנגשות של פקמן בנקודה, רק נותן יותר נקודות ולא בודק את מספר המופעים שנשארו. (אפשר פשוט לשכפל את ארוע ההתנגשות בנקודה, ואז למחוק מרשימת הפעולות את הפעולות המיותרות ולשנות את פעולת קביעת הניקוד.)

  נסו לאכול את כדורי הכוח ולראות שהניקוד עולה.




יש כדור כוח - אז אפשר לעבור לרוחות.

רוח מפוחדת

עריכה

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

אז צריך להכין אובייקט כזה:

  1. ליצור אובייקט חדש בשם scared (סְקֵרְד) - מפוחד.
  2. לתת לו דמות של רוח מפוחדת, כמו הדמות scared בתיקייה שממנה לקחנו את שאר הדמויות.

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

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

 

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

  • change into (צֵ'יינְג' אִינְטוּ) - שנה אל: אל איזה אובייקט לשנות את הצל. כאן צריך לבחור את אובייקט הרוח המפוחדת.
  • perform events (פֵּרְפוֹרְם אֵוֵונְטְס) - בצע ארועים: האם לבצע את הפעולות בארוע המחיקה של אובייקט הצל ובארוע היצירה של אובייקט הרוח המפוחדת. אנחנו נרצה לשנות כל מיני דברים בארוע היצירה של הרוח המפוחדת (כמו הכיוון והמהירות) לכן נשנה את השדה הזה ל-yes.

  צריך לוודא שהצל באמת הופך לרוח מפוחדת כשפקמן אוכל כדור כוח.




הרוח המפוחדת עדיין לא יודעת איך לזוז במבוך. אבל זה משהו שכבר עשינו, אז לא תהיה לך בעיה לתכנת אותה לעשות את זה.

 

עכשיו תורכם:

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

עצה: אפשר להעתיק את רשימות הפעולות מהארועים של הרוח הישנה לארועים של הרוח המפוחדת, ואז לשנות את שדה המהירות של פעולות התנועה.

לא לשכוח לבדוק: לאכול כדור כוח ואז לראות איך הרוח המפוחדת נעה במבוך.

עוד דבר אחד נשאר לנו לעשות בסעיף הזה שברשימת העבודה: מיד כשהרוח הופכת למפוחדת, להאט את המהירות שלה ולהפוך את כיוון התנועה שלה (כדי שבמקום לרדוף אחרי פקמן היא תברח ממנו). בשביל זה נוסיף לרוח המפוחדת ארוע יצירה  . בארוע הזה נשים את פעולת התנועה המדוייקת  . בחלון אפשרויות הפעולה נכתוב את המהירות האיטית בשדה speed. בשדה direction נרצה להכניס את הכיוון ההפוך לכיוון הנוכחי. הכיוון הנוכחי הוא המשתנה direction, והכיוון ההפוך לו הוא פשוט direction+180, לכן זה מה שנכתוב שם.


  צריך לוודא שמיד כשפקמן אוכל כדור כוח, הרוח הופכת כיוון ונהיית איטית (ומפוחדת).




השלמנו עוד פריט ברשימת העבודה של כדורי הכוח. עכשיו הרשימה נראית ככה:

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

אז אפשר לעבור לפריט הבא: הבהוב.

הבהוב

עריכה

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

  1. להקליק פעמיים על הדמות של הרוח המפוחדת, ברשימת המשאבים מצד שמאל, בתיקיית הדמויות Sprites.
  2. בחלון תכונות הדמות להקליק על הכפתור Edit Sprite.
  3. הגענו לחלון עריכת דמות. התפריט הימני ביותר בחלון הזה נקרא Animation (אַנִימֵיישֵן) - הנפשה. בתפריט הזה יש כל מיני אפשרויות ליצור הנפשות מתמונה. אנחנו נבחר באפשרות פשוטה יחסית: Fade to Color (פֵייד טוּ קוֹלוֹר) - לעמעם לצבע. האפשרות הזו יוצרת רצף תמונות שבהן התמונה מתעמעמת עד שהיא הופכת כולה לצבע אחד (שאפשר לבחור). כשבוחרים באפשרות הזו, מתבקשים לבחור כמה תמונות צריכות להיות ברצף העמעום. לנו יספיקו שתי תמונות, כי אנחנו רק צריכים לגרום לרוח להבהב. אחר כך מקבלים חלון שבו בוחרים לאיזה צבע לעמעם. לדעתי כדאי לבחור איזשהו כחול - נסו ותראו מה מוצא כן בעיניכם.



  איך הרוח המפוחדת מהבהבת?




הרוח המפוחדת לא אמורה להבהב מיד בהתחלה, אלא רק אחרי כמה זמן. לכן בארוע היצירה שלה נעצור את ההבהוב: נוסיף לארוע היצירה פעולת החלפת דמות  . הדמות שנחליף אליה היא דמות הרוח המפוחדת, אבל מה שחשוב יותר זו מהירות ההנפשה: בשדה speed נכתוב 0, ואז הדמות תישאר כל הזמן על התמונה הראשונה (תמונה מספר 0).


  עכשיו הרוח המפוחדת לא אמורה להבהב.




אנחנו רוצים שהרוח תתחיל להבהב אחרי זמן מה. בשביל זה אפשר להשתמש בשעון:

  1. בארוע היצירה של הרוח המפוחדת, להוסיף פעולת כיוון שעון מעורר:  . את השעון אפשר לכוון ל-200 צעדים, למשל.
  2. להוסיף ארוע צלצול שעון מעורר:  .
  3. בארוע הזה, להוסיף את פעולת החלפת הדמות  . הדמות צריכה להיות שוב דמות הרוח המפוחדת, אבל הפעם בשדה מהירות ההנפשה speed נכתוב מספר אחר, למשל 0.1 (כדי שההבהוב יהיה די איטי).

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




הרוח יודעת להבהב. נסמן את זה ברשימת העבודה:

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

נמשיך לפריט הבא ברשימה.

חזרה למצב הרגיל

עריכה

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

  1. בארוע השעון המעורר, נוסיף עוד פעולת כיוון שעון מעורר:  . הפעם נכוון שעון אחר (למשל את שעון מספר 1, אם קודם השתמשנו בשעון מספר 0). נכוון את השעון הזה לצלצל עוד 100 צעדים, למשל.
  2. נוסיף ארוע צלצול שעון מעורר שני  , הפעם לשעון השני שכיוונו.
  3. בארוע הזה, נמחק את אובייקט הרוח המפוחדת באמצעות פעולת המחיקה:  .

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

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

  צריך לבדוק שהרוח המפוחדת הופכת חזרה לצל אחרי כמה הבהובים, וחוזרת לרדוף את פקמן.




מה עכשיו? בוא נבדוק ברשימה:

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

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

ועכשיו - ניתן לפקמן לאכול את הצל המפוחד.

לאכול רוח מפוחדת

עריכה

מבחינת פקמן, לאכול רוח מפוחדת זה כמעט כמו לאכול נקודה או כדור כוח.

 

עכשיו תורכם:

להוסיף ארוע התנגשות בין פקמן לצל המפוחד. בארוע הזה:
  1. להשמיע צליל:  .
  2. להעלות את הניקוד:  .
  3. להחזיר את אובייקט הצל המפוחד (Other) לנקודת ההתחלה שלו:  .
  4. למחוק את אובייקט הצל המפוחד:  .

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




השלמנו כמעט הכל:

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

עכשיו צריך ליצור רוחות מפוחדות גם לשאר הרוחות.

שכפול הרוחות המפוחדות

עריכה

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

  1. לשכפל את אובייקט הצל המפוחד עוד פעמיים (או שלוש, אם הכנת עוד רוח).
  2. לכל אחת מהרוחות המפוחדות לתת שם שמתאים לאחת הרוחות הרגילות. למשל, scared_speedy.
  3. בארוע המחיקה של האובייקטים המשוכפלים, לשנות את פעולת שינוי האובייקט   כדי שהרוח המפוחדת תהפוך חזרה לרוח הרגילה שמתאימה לה ולא לצל.

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

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


  בדקו מה קורה כשאוכלים כדור כוח, כשאוכלים רוח מפוחדת, וכשעוברת ההשפעה של כדור הכוח.




עדכון רשימת העבודה

עריכה

זהו. השלמנו את כל הפריטים ברשימת העבודה של כדורי הכוח. עכשיו אפשר לחזור לרשימת העבודה הכללית של המשחק:

  • פקמן
  • קירות המבוך
  • נקודות שפקמן אוכל
  • פירות
  • רוחות
  • כדורי כוח
  • עוד מבוכים
  • (אולי) להוסיף חפצי בונוס שווים יותר למבוכים המתקדמים
  • (אולי) להאיץ את מהירות התנועה

יש לנו את כל האובייקטים שצריך, עכשיו אפשר ליצור עוד חדרים - צעד 11: עוד מבוכים

צעד 11: עוד מבוכים

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פק-מן


המבוך השני

עריכה

עד עכשיו דאגנו להוסיף את האובייקטים החדשים רק לחדר הראשון. אבל יש לנו עוד חדר - צריך לדאוג שגם בו יהיה כל מה שצריך!

 

עכשיו תורכם:

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

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

קודים

עריכה
 

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

בשביל זה נוסיף לפקמן טיפול בארוע שחרור מקש, ונבחר באחד ממקשי הספרות - בהתחלה במקש 1. בארוע הזה נוסיף את פעולת המעבר לחדר מסויים, שנמצאת בלשונית main1:  .

בחלון אפשרויות הפעולה, נבחר בשדה הראשון לעבור לחדר room1. בשדה השני אפשר לבחור אפקט למעבר - אני אשאיר לך לבחור את אפקט שמוצא חן בעיניך.


  עכשיו כשלוחצים על 1 זה צריך להעביר אותך לחדר room1 (החדר השני).




עוד מבוכים

עריכה
 

עכשיו תורכם:

ליצור עוד חדרים ולצייר בהם מבוכים. כל פעם שמוסיפים חדר, להוסיף ארוע שחרור מקש שיעביר אותך לחדר הזה בשביל לבדוק אותו.

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

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


בואו נראה איפה אנחנו עומדים עכשיו ברשימת העבודה:

  • פקמן
  • קירות המבוך
  • נקודות שפקמן אוכל
  • פירות
  • רוחות
  • כדורי כוח
  • עוד מבוכים
  • (אולי) להוסיף חפצי בונוס שווים יותר למבוכים המתקדמים
  • (אולי) להאיץ את מהירות התנועה

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


עשינו דרך ארוכה. בואו נעצור וניזכר מה ראינו בדרך - צעד 12: סוף המסלול.

צעד 12: סוף המסלול

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פק-מן


סיכום

עריכה

הנה רשימה של דברים שראינו תוך כדי תכנות המשחק. כדאי לעבור עליהם ולוודא שזוכרים מה בדיוק כל אחד מהם אומר.

מושגים ב-Game Maker:

גרפיקה:

מושגים בתכנות:

עקרונות בפיתוח תוכנה:

  • עבודה עם רשימת עבודה

ארועים:

פעולות:

פונקציות:

משתנים:


תרגילים

עריכה

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

 

אתגר:

לקחת את המשחק פונג שיצרתם, להעתיק אותו לקובץ חדש, ולקרוא לו bricks (בְּרִיקְס) - לבֵנים. להוסיף למשחק אובייקט לבֵנה שיעלם כשהכדור נוגע בו. ליצור חדרים נוספים עם סידורים שונים של לבנים. כשמעלימים את כל הלבנים בחדר - לעבור לחדר הבא.

המשחק הזה ידוע בשמות שונים, כמו breakout או WinBrick או (בגירסה מתוחכמת יותר) arkanoid.

 

אתגר:

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

המשך הדרך

עריכה

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

אחר כך (או במקביל) אפשר להמשיך למשחק הבא בספר: משחק יריות: חייזרים.


חזרה לתוכן הספר