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

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


Gmaker pacman.png

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

מסלול ההתקדמות[עריכה]

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

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

צעד 1: פקמן

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

הכנה לדרך[עריכה]

Gmaker add room.png

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



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




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

עכשיו תורכם:

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

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

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

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

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

אובייקט פקמן[עריכה]

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

  1. להוסיף אובייקט חדש.
  2. לשנות את שמו ל-pacman.
  3. ליצור לו דמות חדשה. יש דמויות מתאימות לפקמן בין הדמויות שמגיעות עם Game Maker - בתיקיה pacman. ניקח משם את הפקמן שמחייך אלינו - pacman_stand.
  4. להוסיף לחדר שיצרנו קודם מופע של האובייקט פקמן.

Gmaker test save.png רואה את פקמן על המסך?




תנועה באמצעות החצים[עריכה]

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

עכשיו תורכם:

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

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



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

עכשיו תורכם:

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

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


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

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

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


הנפשה[עריכה]

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

Gmaker sprite res.png

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

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

כדאי לדעת:

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

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

החלפת דמות[עריכה]

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

  1. להקליק על הכפתור להוספת דמות בסרגל הכלים. Gmaker add sprite.png
  2. להקליק על הכפתור Load Sprite כדי לטעון דמות מקובץ.
  3. לבחור דמות מתאימה של פקמן ולהקיש אנטר.

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

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

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

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

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

Gmaker change sprite dialog.png

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



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

כוונון ההנפשה[עריכה]

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

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


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




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

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

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


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


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



Gmaker sprite prop.png

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

עכשיו תורכם:

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


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

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

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

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

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

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

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

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

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


מבט מקרוב על המבוך[עריכה]

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

Pacman maze.png

Gmaker grid.png

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

תנועה בשריג[עריכה]

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

Gmaker align dialog.png

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

כדאי לדעת:

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

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




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

פעולות תנאי[עריכה]

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

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

כדאי לדעת:

Gmaker if actions.png

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

Gmaker if grid dialog.png

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

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

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

בלוק[עריכה]

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

Gmaker block.png

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

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

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

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

Gmaker room grid.png



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




שינוי ארוע[עריכה]

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

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

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

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

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


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




צעדים[עריכה]

עכשיו תורכם:

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

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

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

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


מה זה צעד?

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

Gmaker speed5.png

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

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

Gmaker grid5.png

אבל מה קורה כשפקמן נע במהירות 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 כבר יחשב בעצמו את התוצאה.


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




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

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

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

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

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


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

צעד 4: המבוך

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


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

אז לעבודה:

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

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

  1. לפתוח את חלון תכונות האובייקט של פקמן (באמצעות הקלקה כפולה על הפקמן שבתיקיית האובייקטים objects ברשימת המשאבים משמאל).
  2. להוסיף לו ארוע התנגשות באובייקט הקיר. Gmaker collision.png
  3. להוסיף לרשימת הפעולות של הארוע פעולת תנועה Gmaker red move button.png בשביל לעצור את פקמן, ופעולת שינוי דמות Gmaker change sprite button.png בשביל להציג את דמות פקמן העומד ומחייך. (לא לשכוח לכוונן את מהירות ההנפשה!)

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


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




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


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



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

בדיקת התנגשות[עריכה]

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

Gmaker if collision dialog.png

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

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

Gmaker coordinates.png

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.

עכשיו תורכם:

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

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




מבנה המבוך[עריכה]

Gmaker pacman room.png

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



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




קיצורי דרך[עריכה]

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

Gmaker outside room.png

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

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


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




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

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

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

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

צעד 5: נקודות

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


לאכול[עריכה]

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

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

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

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

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

עכשיו תורכם:

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

מחיקת מופעים[עריכה]

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

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

Gmaker destroy dialog.png

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

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

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

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



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




כדאי לדעת:

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

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

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

מה נשאר לנו?

עכשיו תורכם:

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

סוף המבוך[עריכה]

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

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

Gmaker instances dialog.png

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

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

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

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



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



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


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

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

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


עוד חדרים[עריכה]

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

עכשיו תורכם:

Gmaker pacman room1.png

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

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

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

Gmaker test save.png מה קורה כשפקמן משלים את המבוך? ומה קורה כשהוא משלים את המבוך השני?



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

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

פעולת בדיקת ההפך[עריכה]

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

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

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

Gmaker dot actions.png

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

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



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




עכשיו תורכם:

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

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

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

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

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

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

צעד 7: פירות

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


חפץ בונוס[עריכה]

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

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

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

Gmaker delete underlying.png

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


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




הופעת והעלמת הבונוס[עריכה]

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

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

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


שעונים[עריכה]

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

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

Gmaker clock dialog.png

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

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


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

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


Gmaker test save.png האם הבונוס באמת מופיע אחרי 10 שניות?




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

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

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

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




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

עכשיו תורכם:

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

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

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

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




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

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

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

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


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

צעד 8: רוחות

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


רוחות[עריכה]

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

עכשיו תורכם:

# ליצור אובייקט רוח. אפשר להשתמש באחת מדמויות הרוחות שנמצאות באותה תיקייה שממנה לקחנו את שאר הדמויות. לאובייקט כדאי לקרוא ghost (גוֹוּסְט) - רוח רפאים.
  1. להציב מופע אחד של אובייקט הרוח בחדר.
  2. לתת לפקמן 3 חיים בתחילת המשחק. Gmaker lives.png
  3. להציג את כמות החיים בכותרת החלון. Gmaker set caption.png
  4. כשפקמן מתנגש ברוח, להוריד לו חיים Gmaker lives.png, להשמיע צליל Gmaker sound button.png, להחזיר את פקמן והרוח לנקודות ההתחלה שלהם Gmaker jump start.png ולעצור את התנועה שלהם Gmaker red move button.png, ולהשהות לרגע את המשחק כדי לתת לשחקן להרגע ולהתכונן להמשך Gmaker sleep.png.
  5. כשנגמרים החיים - להציג את טבלת האלופים Gmaker highscore.png ולהתחיל מחדש את המשחק Gmaker restart.png.

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

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

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

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

ארוע צעד[עריכה]

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

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

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

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

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


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



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


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



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

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


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




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

עוד רוח[עריכה]

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

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

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

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

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


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




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


Gmaker test save.png מה קורה כשמתנגשים ברוחות?




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


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




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

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

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


משתני הקורדינטות[עריכה]

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

בחלון אפשרויות הפעולה צריך לכתוב הקורדינטות (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.

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

משתנה הכיוון[עריכה]

Gmaker angles.png

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

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

Gmaker shadow step.png

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

המשתנה שצריך לקבוע את הערך שלו זה משתנה הכיוון 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 ) וככה נהפוך את הכיוון האלכסוני לכיוון הישר הקרוב ביותר.


Gmaker test save.png איך הצל נע עכשיו?




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


Gmaker test save.png נסו לבדוק ערכים שונים לפעולת הטלת הקוביה Gmaker if chance.png כדי להפוך את הצל למאיים ומאתגר יותר.




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


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




חוכמות אחרות[עריכה]

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

במקום זה, נוסיף עוד רוח אחת: 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


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




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

עכשיו תורכם:

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

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

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

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

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

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

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


הכדורים[עריכה]

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

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

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

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

עכשיו תורכם:

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

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




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

רוח מפוחדת[עריכה]

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

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

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

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

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

Gmaker change instance dialog.png

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

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

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




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

עכשיו תורכם:

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

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

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

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


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




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

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

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

הבהוב[עריכה]

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

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



Gmaker test save.png איך הרוח המפוחדת מהבהבת?




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


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




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

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

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




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

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

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

חזרה למצב הרגיל[עריכה]

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

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

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

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

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




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

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

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

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

לאכול רוח מפוחדת[עריכה]

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

עכשיו תורכם:

להוסיף ארוע התנגשות בין פקמן לצל המפוחד. בארוע הזה:
  1. להשמיע צליל: Gmaker sound button.png.
  2. להעלות את הניקוד: Gmaker set score.png.
  3. להחזיר את אובייקט הצל המפוחד (Other) לנקודת ההתחלה שלו: Gmaker jump start.png.
  4. למחוק את אובייקט הצל המפוחד: Gmaker destroy button.png.

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




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

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

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

שכפול הרוחות המפוחדות[עריכה]

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

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

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

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


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




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

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

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

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

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

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


המבוך השני[עריכה]

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

עכשיו תורכם:

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

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

קודים[עריכה]

Gmaker digit key.png

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

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

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


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




עוד מבוכים[עריכה]

עכשיו תורכם:

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

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

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


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

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

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


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

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

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

תוכן עניינים


סיכום[עריכה]

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

מושגים ב-Game Maker:

גרפיקה:

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

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

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

ארועים:

פעולות:

פונקציות:

משתנים:


תרגילים[עריכה]

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

אתגר:

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

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

אתגר:

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

המשך הדרך[עריכה]

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

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


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