תכנות לילדים באמצעות Game Maker/טטריס/צעד 7: צורה אקראית

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


בחירת דמות אקראית[עריכה]

ראינו שאפשר להחליף דמות באמצעות הצבה Gmaker set var.png למשתנה sprite_index. אנחנו רוצים להגריל באופן אקראי אחת משבע הדמויות של הצורות. אבל אנחנו מכירים את הדמויות האלה רק בשמות שלהן: O, I, T וכן הלאה. אם נגריל מספר אקראי באמצעות הפונקציה random() זה לא יעזור לנו לקבל שם של דמות.

מה עושים?

אפשרות אחת היא להשתמש שוב בפקודת switch, ולבחור דמות לפי התוצאה של הפונקציה random().

אבל יש דרך פשוטה יותר. ב-Game Maker יש פונקציה שמגרילה באופן אקראי אחד מהפרמטרים שלה: הפונקציה choose() (צ'וּז) - בחר. למשל, אם נכתוב choose(1, 17, 42) אז נקבל אחד מהמספרים 1, 17 או 42, באופן אקראי.

לכן, מה שצריך לעשות זה:

  1. Gmaker alarm.png ללכת לנחיתה של אובייקט הצורה (בארוע השעון המעורר). ברשימת הפעולות שם, ללכת לפעולה שבה מזיזים את הצורה חזרה לנקודת ההתחלה. מיד אחריה צריך לשנות לצורה את הדמות.
  2. Gmaker set var.png להוסיף פעולת הצבה ובה להציב במשתנה sprite_index את הערך choose(O, I, T, L, J, S, Z) כדי לקבל אחת מדמויות הצורה באופן אקראי.
  3. Gmaker create.png להעתיק את פעולת ההצבה הזאת גם לארוע היצירה של אובייקט הצורה, כדי שגם לצורה הראשונה תהיה דמות אקראית.

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




סידור מחדש של הנחיתה[עריכה]

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

Gmaker user event.png

Game Maker מאפשר לנו ליצור ארועים משלנו, ממש כמו הארועים הרגילים. בשביל להעביר את כל הפעולות של הנחיתה לארוע משלנו, צריך:

  1. להקליק על Add event ומבין סוגי הארועים לבחור בסוג ארוע Other Gmaker other.png.
  2. בתפריט שצץ לבחור ב-User defined ובתת-תפריט לבחור בפריט הראשון: ארוע משתמש מספר 0. עכשיו נוצר ארוע משלנו, ואפשר לשים בו פעולות כמו בכל ארוע אחר.
  3. ללכת חזרה לארוע השעון המעורר Gmaker alarm.png ולבחור את כל הפעולות שבתוך הבלוק של פעולת בדיקת ההפך Gmaker else.png.
  4. לקחת אותן משם באמצעות הקשה על Control+X.
  5. ללכת לארוע המשתמש שלנו, להקליק עם העכבר ברשימת הפעולות שלו, ולהקיש Control+V כדי להדביק את כל הפעולות שלקחנו.
  6. כדאי להסביר מה בדיוק הארוע הזה: לפני כל הפעולות שהדבקנו, להוסיף פעולת הערה Gmaker comment button.png ובה לכתוב "ארוע: נחיתת צורה".

העברנו את הפעולות לארוע שלנו, אבל איך Game Maker ידע מתי הארוע שלנו קורה וצריך לבצע את הפעולות האלה? צריך להגיד לו:

  1. לחזור לארוע השעון המעורר Gmaker alarm.png ולפעולת בדיקת ההפך Gmaker else.png.
  2. את הבלוק שאחרי הפעולה הזו אפשר למחוק, כי נצטרך רק פעולה אחת במקרה שהצורה נוחתת: להגיד ל-Game Maker שקרה הארוע שלנו.
  3. במקום הבלוק, להוסיף פעולת קוד Gmaker code button.png.
  4. בחלון הקוד לכתוב event_user(0);. הפונקציה event_user אומרת ל-Game Maker שעכשיו קורה ארוע שלנו, ושצריך לבצע את הפעולות בארוע הזה. להבדיל מפונקציות כמו random() או choose(), הפונקציה event_user() לא מחזירה ערך אלא מבצעת פעולה.

Gmaker test save.png אם הסידור מחדש הצליח, המשחק אמור להתנהג בדיוק כמו קודם.




עשינו refactoring - לא שינינו את ההתנהגות של התוכנה, אבל סידרנו אותה בצורה יותר ברורה. עכשיו יהיה לנו נוח יותר להמשיך להוסיף לה דברים.

הצורה הבאה[עריכה]

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

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

בארוע היצירה של הצורה הבאה, צריך לתת לה אחת מהדמויות של הצורות באופן אקראי. (אפשר פשוט להעתיק את פעולת ההצבה Gmaker set var.png מארוע היצירה של אובייקט הצורה.)


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




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

  1. ללכת לנחיתה של אובייקט הצורה (בארוע המשתמש Gmaker other.png). ברשימת הפעולות שם, ללכת לפעולת ההצבה Gmaker set var.png שבה מגרילים דמות חדשה לצורה.
  2. לפתוח את חלון אפשרויות הפעולה באמצעות הקלקה-כפולה על הפעולה. שם לשנות את המופע שהפעולה מתייחסת אליו (Applies to): לבחור ב-object ושם לבחור באובייקט הצורה הבאה. ככה במקום לשנות את הדמות של הצורה הנופלת, הפעולה תשנה את הדמות של הצורה הבאה.
  3. לפני פעולת ההצבה הזאת, להכניס פעולת הצבה נוספת Gmaker set var.png ובה להציב אל המשתנה sprite_index את הערך next_shape.sprite_index. ככה הצורה הנופלת תקבל את הדמות של הצורה הבאה.

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




המשך העבודה[עריכה]

הנה רשימת העבודה המעודכנת:

  • אובייקט לצורת הריבוע
  • נפילה
  • תנועה ימינה ושמאלה כשלוחצים על החצים
  • להערם בסוף הנפילה
  • לתכנת את שאר הצורות
  • לבחור את צבע הערימה לפי צורה
  • לבחור צורה באופן אקראי
  • לסובב את הצורות כשלוחצים על חץ למעלה
  • להעלים שורות שלמות

בואו ניתן למשתמש לסובב את הצורות שנופלות - צעד 8: סיבוב דמות