תכנות לילדים באמצעות Game Maker/פק-מן/צעד 8: רוחות


רוחותעריכה

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

 

עכשיו תורכם:

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

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

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

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

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

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

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

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

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

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

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


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



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


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



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

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


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




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

עוד רוחעריכה

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

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

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

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

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


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




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


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




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


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




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