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