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