תכנות לילדים באמצעות Game Maker/מריו/ניקוד



מטבעות עריכה

 

עכשיו תורכם:

ליצור אובייקט מטבע שמריו יוכל יאסוף (אפשר להשתמש בדמות המטבע המסתובב שברצועה למטה) ולהציב מטבעות בחדר.

כל מטבע מזכה את מריו ב-200 נקודות. אם מריו אוסף 100 מטבעות, הוא מקבל עוד חיים.

עצות:

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

 

לוח ניקוד עריכה

 

עכשיו תורכם:

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

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

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

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

  • view_xview[0] - המרחק של התצוגה מהקצה השמאלי של החדר.
  • view_yview[0] - המרחק של התצוגה מהקצה העליון של החדר.
  • view_wview[0] - הרוחב של התצוגה.
  • view_hview[0] - הגובה של התצוגה.

(כל אחד מהמשתנים האלה הוא חלק ממערך; למשל, המערך view_hview קובע את הגובה של כל 8 התצוגות, מ-0 עד 7.)

במשחק מריו התצוגה זזה רק ימינה ושמאלה, לכן צריך:

  1.   ללכת לארוע הציור של לוח הניקוד.
  2.   לפני כל פעולות הציור, להציב במשתנה x את הערך view_xview[0] כדי להזיז את לוח הניקוד למקום שבו נמצאת כרגע התצוגה.



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




איזה עולם עריכה

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

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

  1. ללכת לחלון תכונות החדר.
  2. לעבור ללשונית settings
  3. לכתוב בשדה Caption את שם העולם הראשון: 1-1.



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




כותרת החדר נשמרת במשתנה room_caption, לכן כדי להציג אותה בלוח הניקוד צריך:

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



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




סוף העולם עריכה

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


 

עכשיו תורכם:

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

(כדי לבדוק את האובייקט הזה צריך להוסיף למשחק עוד חדר.)

מריו צריך לקבל יותר נקודות אם הוא קופץ ונוגע בעמוד במקום גבוה.


 

עכשיו תורכם:

לתת למריו יותר נקודות אם הוא נוגע בעמוד במקום גבוה.

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

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

אובייקט קבוע עריכה

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

 

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



  לוח הניקוד מופיע בכל החדרים.




 

כדאי לדעת:

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

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

מריו קבוע עריכה

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

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



  מה קורה כשעוברים חדר?




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

 

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

  1.   להוסיף למריו ארוע תחילת חדר.
  2.   לשים את פעולת המעבר למיקום ההתחלתי.



  מריו מתחיל את החדרים הבאים בהתחלה.




קוד יצירה של חדר עריכה

ומה אם נרצה שמריו יתחיל חדר מסוים במיקום אחר?

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

  1. ללכת לחלון תכונות החדר ללשונית settings.
  2. להקליק על הכפתור Creation Code.
  3. נפתח חלון שאפשר לכתוב בו קוד. נכתוב שם, למשל: mario.y = 0; כדי שמריו ייפול לחדר מלמעלה.



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




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

  1. קודם כל הפעולות של ארוע סוף החדר (הקודם).
  2. אחר כך קוד היצירה של מופעים שהצבנו בחדר הזה.
  3. אז ארועי היצירה של המופעים האלה.
  4. אחריהם קוד היצירה של החדר.
  5. ובסוף ארוע תחילת החדר.

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

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



  עכשיו מריו נופל מלמעלה כשהחדר מתחיל.




- ניקוד -