תכנות לילדים באמצעות Game Maker/טטריס/צעד 3: הערימה
אובייקט ערימה
[עריכה]איזה מין אובייקט (או אובייקטים) צריכים להיות בערימה של הצורות שנחתו?
- צורה שכבר נחתה כבר לא מגיבה יותר ללחיצה על החצים, אלא נשארת במקומה.
- צורות שנחתו מגבילות את התנועה של הצורה הנופלת, ממש כמו הגבול.
- כששורה מתמלאת בצורות שנחתו, כל הריבועים בשורה הזאת נעלמים.
לכן אנחנו יכולים לדעת שני דברים לגבי האובייקט של הערימה:
- הוא יציב.
- הדמות שלו היא ריבוע בגודל 16 פיקסלים, כי כשמשלימים שורה מעלימים ריבועים כאלה (ולא צורות שלמות כמו הצורות שנופלות).
בנוסף, אנחנו רוצים שהריבוע יראה כמו הריבועים של הצורה הנופלת. ככה מה שהמשתמש יראה זה צורה נוחתת, ולא צורה משתנה למשהו אחר.
אם ככה, מה שצריך לעשות זה:
- ליצור דמות חדשה של ריבוע בגודל 16 פיקסלים, שנראית כמו הריבועים של דמות הצורה. הדרך הכי נוחה לעשות את זה היא לשכפל את דמות הצורה (להקליק עליה בכפתור הימני של העכבר ואז לבחור Duplicate. אז לעבור לעריכת הדמות החדשה, ושם להקטין את הדף לחצי מהגודל באמצעות Resize Canvas מתפריט Transform. צריך גם לזכור לסמן שהיא לא שקופה (Transparent).
- ליצור אובייקט חדש בשם pile ולתת לו את הדמות החדשה. לסמן שהוא יציב (Solid).
- ללכת לארוע שבו הצורה נוחתת (צלצול שעון מעורר ) ושם ליצור ארבעה מופעים של אובייקט הערימה במקום של הצורה (לסמן Relative):
- אחד בנקודה 0,0
- אחד בנקודה 0,16
- אחד בנקודה 16,0
- אחד בנקודה 16,16
רשימת הפעולות המלאה צריכה להראות ככה:
שימו לב ששיניתי קצת את הסדר, כי צריך ליצור את הריבועים בערימה לפני שמחזירים את הצורה למעלה. אחרת לא נוכל ליצור אותם במקום שאליו הגיעה הצורה.
אחרי שהצורה נוחתת היא נראית כאילו היא נשארת במקום שבו היא נחתה, וצורה חדשה יורדת מלמעלה. הצורות שנוחתות נערמות אחת על השניה.
גובה הערימה
[עריכה]כשהערימה גבוהה וממלאת את אזור המשחק עד למעלה, המשחק נגמר. "למעלה" זה אומר בגובה שבו הצורה מתחילה ליפול, כלומר: במיקום ההתחלתי של הצורה.
המיקום ההתחלתי של אובייקט נשמר בשני משתנים:
- xstart (אִיקְס סְטַרְט) - x בהתחלה.
- ystart (וּוַי סְטַרְט) - y בהתחלה.
כדי לדעת אם הערימה גבוהה מדי, צריך לבדוק את הגובה של אובייקט הערימה ביחס ל- ystart. את זה צריך לעשות כשהצורה נוחתת, כלומר: כשהיא הופכת לחלק מהערימה.
לכן נלך לאובייקט הערימה ונוסיף לו ארוע יצירה . בארוע הזה נשים את הפעולה לבדיקת ערך של משתנה ובה נבדוק אם המשתנה y שווה למשתנה shape.ystart. אם כן, זה אומר שהערימה הגיעה עד לגובה שממנו הצורה מתחילה ליפול.
אם פעולת הבדיקה נותנת תוצאה חיובית, המשחק צריך להגמר. לכן נשים שם בלוק, ובתוכו הפעולות להצגת טבלת האלופים ולהתחלה מחדש של המשחק .
סקירת העבודה
[עריכה]יצרנו משחק בסיסי עובד. האם נוכל להמשיך ולהוסיף לו דברים עד שיהיה לנו משחק טטריס שלם? או שנצטרך לשנות חלק מהדברים שכבר עשינו לפני שנוכל להמשיך הלאה?
בואו נעבור על מה שכבר עשינו ברשימת העבודה, וננסה לראות אם יש פריטים שנצטרך לשנות, או שיספיק לנו רק להוסיף דברים חדשים. רשימת העבודה כרגע היא:
אובייקט לצורת הריבוענפילהתנועה ימינה ושמאלה כשלוחצים על החציםלהערם בסוף הנפילה- להעלים שורות שלמות
- לתכנת את שאר הצורות
- לסובב את הצורות כשלוחצים על חץ למעלה
נעבור עליה פריט-פריט:
- אובייקט לצורת הריבוע - האובייקט shape מתאים גם לצורות האחרות, מלבד הדמות שלו. אבל דמות אפשר לשנות (בפעולת שינוי דמות ) אז זו לא בעיה. נצטרך רק להוסיף לו פעולה של סיבוב כשהמשתמש לוחץ על חץ למעלה.
- נפילה - כאן לא נצטרך לשנות כלום. כל הצורות נופלות באותה דרך.
- תנועה ימינה ושמאלה - גם כאן לא נצטרך לשנות כלום, כי התנועה שתכנתנו מתאימה לכל הצורות.
- להערם בסוף הנפילה - כל הצורות יצטרכו להפוך לאובייקט ערימה. אבל בכל זאת, מה שתכנתנו לא מתאים לכל הצורות:
- הצבע של דמות אובייקט הערימה צריך להיות כמו הצבע של דמות הצורה.
- המיקומים שבהם צריך ליצור את המופעים של אובייקט הערימה צריכים להתאים לצורה שנוחתת.
זאת אומרת שאובייקט הצורה והתנועה שלו יכולים להשאר כפי שהם, אבל את הנחיתה של הצורה נצטרך לשנות אם נרצה שהיא תתאים לעוד צורות.
איך לשנות את הנחיתה? מה בדיוק צריך לעשות אחרת? בשביל זה צריך להיות מסוגלים לבדוק את השינויים שאנחנו עושים; רק ככה נוכל לנסות לשנות דברים ולראות אם השינויים באמת עובדים. ובשביל לבדוק איך לשנות את הנחיתה כדי שהיא תתאים לעוד צורות, נצטרך עוד צורות.
אז בואו ננסה להנחית עוד צורות - צעד 4: עוד צורות