תכנות לילדים באמצעות Game Maker/פק-מן/צעד 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: נקודות