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

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



הצורות[עריכה]

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

Tetris O shape.png Tetris I shape.png Tetris T shape.png Tetris L shape.png Tetris J shape.png Tetris Z shape.png Tetris S shape.png


עכשיו תורכם:

Gmaker tetris sprites.png

לשמור את הצורות אצלך במחשב, וליצור להן דמויות במשחק. (עדיין לא ליצור אובייקטים!) כדאי לתת לדמויות שמות משמעותיים; נהוג להשתמש בשמות האותיות באנגלית שצורתן דומה לצורות של טטריס: O, I, T, L, J, Z, S.

מה הצורות האלה עושות?

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

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

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

  • לתכנת את שאר הצורות.

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

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

אובייקט צורה נופלת[עריכה]

קודם כל ניצור אובייקט בשם shape (שֵייפּ) - צורה. ניתן לאובייקט הצורה את דמות הריבוע. ניצור חדר ונשים בו את אובייקט הצורה.


Gmaker test save.png כדאי לוודא שרואים את צורת ההריבוע.




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

  1. Gmaker create.png נוסיף לאובייקט הצורה ארוע יצירה.
  2. Gmaker clock button.png בארוע זה נשים פעולת כיוון שעון מעורר. נכוון את השעון ל-20 צעדים.
  3. Gmaker alarm.png נוסיף ארוע צלצול שעון.
  4. Gmaker set var.png בארוע הזה נשנה את הערך של המשתנה y כדי להזיז את הצורה למטה: נוסיף לו 16 (לסמן Relative).
  5. Gmaker clock button.png נוסיף גם לארוע הזה פעולת כיוון שעון מעורר ושוב נכוון את אותו השעון ל-20 צעדים. ככה הצורה תרד שוב ושוב כל 20 צעדים.

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




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

  1. Gmaker key.png להוסיף ארוע לחיצה על חץ למטה (Down).
  2. Gmaker clock button.png בארוע הזה לכוון את השעון המעורר ל-1 צעדים.

Gmaker test save.png נסו ללחוץ על חץ למטה.




תנועה לצדדים[עריכה]

גם את התנועה לצדדים נעשה באמצעות שינוי הקורדינטות:

  1. Gmaker key.png נוסיף ארוע לחיצה על חץ ימינה (Right).
  2. Gmaker set var.png בארוע הזה נשנה את המשתנה x כדי להזיז את הצורה ימינה: נוסיף לו 16 (לסמן Relative). ככה הצורה תזוז ימינה 16 פיקסלים.
  3. נעשה אותו הדבר לתנועה שמאלה (Left), רק שהפעם נוסיף ל-x את הערך -16 כדי להזיז את הצורה שמאלה.

Gmaker test save.png נסו להזיז את הצורה ימינה ושמאלה בעזרת החצים.




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

הפרדת התזוזה הראשונה[עריכה]

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

  1. לפני התזוזה הראשונה - אפשר לזוז.
  2. אחרי התזוזה הראשונה - לא לזוז עד שנגמרת ההשהיה.
  3. אחרי ההשהיה - שוב אפשר לזוז.

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

  • לפני התזוזה הראשונה הערך שלו יהיה 0.
  • בזמן ההשהיה שאחרי התזוזה הראשונה הערך יהיה 1.
  • אחרי שנגמרה ההשהיה הערך יהיה 2.

קודם כל נאתחל את המשתנה: נוסיף לארוע היצירה את הפעולה לקביעת ערך של משתנה Gmaker set var.png ושם נקבע את הערך של המשתנה move_state ל-0.

גם כשמפסיקים ללחוץ על החץ, צריך להחזיר את המשתנה move_state לערך 0, כדי שהוא יהיה מאותחל בפעם הבאה שהמשתמש ילחץ על חץ. לכן נוסיף שני ארועי שחרור מקש Gmaker key up.png - אחד עבור חץ ימינה (Right) ואחד עבור חץ שמאלה (Left). בארועים האלה נשים את הפעולה לקביעת ערך של משתנה Gmaker set var.png ונקבע את הערך של המשתנה move_state ל-0.

עכשיו נעבור לתזוזה עצמה: ארוע לחיצה על חץ Gmaker key.png. מה צריך לעשות בארוע הזה?

  • במצב 2 (תזוזה מהירה) צריך פשוט לזוז. כלומר: לשנות את הערך של x.
  • במצב 1 (המתנה) צריך לחכות בלי לזוז. כלומר: לא לעשות כלום.
  • במצב 0 (תזוזה ראשונה) צריך לזוז, לעבור למצב 1, ולכוון שעון מעורר שיצלצל בסוף ההמתנה.

נתחיל במצב 1, כי אז צריך לא לעשות כלום. לכן נשים בתחילת רשימת הפעולות את הפעולה לבדיקת ערך של משתנה Gmaker if var.png ובה נבדוק אם move_state שווה ל-1. ככה הפעולה הבאה תתבצע רק במצב 1.

אבל הפעולה שצריך לעשות במצב 1 היא לא לעשות כלום! איך לא עושים כלום?

הפסקת ביצוע פעולות[עריכה]

בלשונית control יש פעולה ליציאה מהארוע: Gmaker exit.png. הפעולה הזאת מפסיקה את ביצוע הפעולות של הארוע. ככה כל הפעולות שמופיעות אחריה ברשימה לא יבוצעו. את הפעולה הזו נשים אחרי פעולת הבדיקה, וככה אם המצב הוא 1 אז לא יבוצעו פעולות נוספות.

עכשיו נוכל לטפל במצבים האחרים. גם במצב 0 וגם במצב 2 צריך להזיז את הצורה, לכן נוכל לשים עכשיו את הפעולה לשינוי המשתנה x Gmaker set var.png. היא תתבצע רק אם פעולת הבדיקה נתנה תוצאה שלילית, כלומר: במצבים 0 ו-2.

במצב 2, זה כל מה שצריך לעשות. לכן אחרי הפעולה שמשנה את x, נשים שוב את הפעולה לבדיקת ערך של משתנה Gmaker if var.png והפעם נבדוק אם move_state שווה ל-2. אם כן, לא צריך לבצע פעולות נוספות. לכן אחרי פעולת הבדיקה נשים את הפעולה ליציאה מהארוע Gmaker exit.png.

כל הפעולות הבאות שנשים יבוצעו רק אם שתי פעולות הבדיקה נתנו תוצאה שלילית, כלומר: אם move_state שווה 0.

מה נשאר לעשות במקרה הזה?

  1. Gmaker set var.png לשנות את הערך של המשתנה move_state ל-1.
  2. Gmaker clock button.png לכוון שעון מעורר חדש ל-10 צעדים.

הנה רשימת הפעולות השלמה בארוע הלחיצה על חץ ימינה:

Gmaker tetris arrow actions.png

(הפעולות בארוע לחיצה על חץ שמאלה זהות, מלבד הפעולה לשינוי x.)

נשאר עוד דבר אחד: להוסיף ארוע צלצול שעון מעורר Gmaker alarm.png עבור השעון החדש, ובו לשנות את הערך של move_state ל-2 Gmaker set var.png כדי לסמן שהסתיימה ההמתנה שאחרי התזוזה הראשונה.



Gmaker test save.png כשלוחצים על חץ ימינה או שמאלה צריכה להיות המתנה בין התזוזה הראשונה לתזוזות הבאות.




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