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

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



מטבעות[עריכה]

עכשיו תורכם:

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

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

עצות:

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

Gmaker mario objects.png

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

עכשיו תורכם:

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

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

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

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

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

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

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

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



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




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

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

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

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



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




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

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



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




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

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


עכשיו תורכם:

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

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

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


עכשיו תורכם:

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

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

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

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

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

Gmaker persistent object.png

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



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




כדאי לדעת:

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

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

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

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

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



Gmaker test save.png מה קורה כשעוברים חדר?




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

Gmaker room start.png

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

  1. Gmaker other.png להוסיף למריו ארוע תחילת חדר.
  2. Gmaker jump to start.png לשים את פעולת המעבר למיקום ההתחלתי.



Gmaker test save.png מריו מתחיל את החדרים הבאים בהתחלה.




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

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

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

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



Gmaker test save.png מריו לא נופל מלמעלה למרות מה שכתבנו בקוד היצירה של החדר!




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

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

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

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



Gmaker test save.png עכשיו מריו נופל מלמעלה כשהחדר מתחיל.




- ניקוד -