תכנות לילדים באמצעות Game Maker/פונג/צעד 8: מהירות


שינוי משתנים

עריכה

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

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

עד עכשיו קבענו ערכים למשתנים באמצעות פעולות מיוחדות כמו הפעולה לקביעת הניקוד, או הפעולה לקביעת הכיוון והמהירות. אבל יש גם פעולה כללית שמאפשרת לנו לשנות כל משתנה שנרצה:   קביעת ערך של משתנה. VAR זה קיצור של המלה variable (וַוארְיַאבֵּל) - משתנה. הפעולה לקביעת ערך של משתנה נמצאת בלשונית control (קוֹנְטְרוֹל) - בקרה.

המשתנה שאנחנו רוצים לשנות הוא מהירות הכדור, והשם שלו הוא speed.

 

כדאי לדעת:

שמות של משתנים יכולים לכלול רק אותיות באנגלית, ספרות, ואת הסימן קו תחתי: _. התו הראשון בשם המשתנה לא יכול להיות ספרה.
 

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

  • variable - שם המשתנה. במקרה שלנו זה speed.
  • value - הערך שרוצים לתת למשתנה. אנחנו רוצים להגדיל את המשתנה, לכן נכתוב כאן 1 או 2 ונסמן את תיבת הסימון Relative, כדי שהמספר הזה יתווסף למהירות הנוכחית.



  נסו לשחק עכשיו. יותר קשה? מספיק קשה? יותר מדי קשה? נסו לשנות את המספר שמוסיפים למהירות הכדור בכל חבטה עד שרמת האתגר שהמשחק מציב תהיה לא גבוהה מדי ולא נמוכה מדי. המספר לא חייב להיות שלם - אפשר לכתוב גם 0.3 או 2.5 וכו'.



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

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

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


 

כדאי לדעת:

כמו ש-Game Maker ידע להבין שכשכותבים לו פונקציה כמו (random(360 הוא צריך להפוך את זה למספר שהפונקציה מחזירה, ככה הוא גם יודע שכשכותבים לו שם של משתנה הוא צריך להציב במקומו את הערך של המשתנה. אפשר גם לכתוב ביטויים עם שמות משתנים, כמו למשל speed-1 או speed/2, וככה לכוונן טוב יותר את רמת האתגר של המשחק.

  יותר טוב, לא?



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

משתנים חדשים

עריכה

להבדיל מהכדור, המחבט לא זז כל הזמן אלא לפעמים הוא עוצר ואז המהירות שלו היא 0. לכן אי אפשר פשוט להגדיל את המהירות שלו כרגע (המשתנה speed), כי אנחנו רוצים שאחרי שהוא הגיע למהירות 20 ועצר, פעם הבאה שהמשתמש ילחץ על חץ המחבט שוב ינוע במהירות 20.

דרוש לנו משתנה חדש: המהירות של המחבט כאשר המשתמש לוחץ על חץ. אין משתנה מוכן כזה ב-Game Maker, לכן נצטרך ליצור משתנה כזה בעצמנו:

  1. נלך לחלון תכונות האובייקט של המחבט באמצעות הקלקה כפולה על אובייקט המחבט ברשימת המשאבים שמשמאל. למה למחבט ולא לכדור? כי זה משתנה של המחבט - אנחנו משתמשים בו בשביל לקבוע את מהירות המחבט, לא את מהירות הכדור.
  2. נוסיף למחבט ארוע יצירה, כי אנחנו רוצים לקבוע את המהירות שבה המחבט יוכל לנוע מיד כשהוא נוצר - לפני שהמשתמש מספיק ללחוץ על החצים.  
  3. נגרור לרשימת הפעולות של הארוע את הפעולה לקביעת ערך של משתנה.  
  4. בשדה variable נכתוב שם משמעותי למשתנה, למשל move_speed (מוּבְ סְפִּיד) - מהירות תנועה.
  5. בשדה value נכתוב את המהירות שבה המחבט יזוז כשהמשתמש ילחץ על חץ. (אצלי זה 10, אבל אולי אתם מעדיפים מהירות אחרת.)
  6. נאשר בהקלקה על OK.

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


 

עכשיו תורכם:

שנו את ארועי הלחיצה על מקשי החצים כדי שיגרמו למחבט לנוע במהירות move_speed במקום במהירות 10.

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




 

כדאי לדעת:

בפיתוח תוכנה הרבה פעמים עושים שינויים כאלה, שלא משפיעים על הפעולה הנראית של התוכנה אלא רק על מה שקורה מאחורי הקלעים. שינויים כאלה נועדו לאפשר הוספת יכולות חדשות לתוכנה (כמו השינוי שעשינו כאן), החלפת חלקים איטיים ברכיבים מהירים יותר, או פשוט סידור נוח יותר להבנה ולתכנות של תוכנה גדולה ומסובכת. באנגלית, שינוי מסוג כזה נקרא refactoring (רִיפַקְטוֹרִינְג) - סידור מחדש.

עכשיו נוכל לשנות את מהירות התנועה של המחבט באמצעות קביעת ערך המשתנה move_speed אחרי כל חבטה. בשביל זה צריך

  1. להוסיף למחבט טיפול בארוע התנגשות עם הכדור.  
  2. לרשימת הפעולות של הארוע הזה להוסיף פעולה של קביעת ערך משתנה.  
  3. באפשרויות הפעולה, להגדיל את המשתנה move_speed (בעזרת Relative).

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



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

תוכנית מחשב עצמאית

עריכה

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

  1. ללכת לתפריט File (פַייל) - קובץ.
  2. לבחור Create Executable (קְרִיאֵייט אֵקְסֵקְיוּטַבְּל) - הכן תוכנית.
  3. לבחור איפה לשמור את התוכנית שלכם.

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


 

כדאי לדעת:

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

אפשר גם לדחוס את המשחק ואז לשלוח:

  • על ידי מערכת "חלונות": ללחוץ על הקובץ בלחיצת עכבר ימנית, ולבחור "שלח אל" > "תיקייה מכווצת"

או בתוכנות דחיסת קבצים (אם מותקנת במחשב תוכנה אחת כזו, כמובן), כגון:

  • 7-zip
  • WinZip
  • WinRar
  • WinAce

השלמת את המשחק הראשון! עכשיו לעצור ולראות לאן הגענו - צעד 9: סוף המסלול.