לולאות מסוגים שונים
מהי לולאה? מה הצורך בלולאה?
ראינו שיש פקודות מוחלטות �(כמו קפוץ אל Y:200 X:100) ופקודות יחסיות (זוז 10 צעדים)
עד עכשיו הבנו איך מחשב פועל
הכרנו את סביבת הפיתוח סקראץ'
התנסינו בהוספה של דמויות לבמה
התנסינו בכתיבת תסריט עבור דמות באמצעות פקודות "מראה" ו"תנועה"
וגם הבנו איך בנויה המפה (מערכת הצירים) שעל הבמה
בנוסף, הכרנו גם את המושג "אתחול", שמאפשר לנו לקבוע ערכים התחלתיים לתסריט שלנו. ומה הלאה?
בשיעור זה נלמד את המושג החשוב
כדי להבין מהי לולאה ולמה בכלל צריך אותה, נעשה ניסוי קטן, שגם יעזור לנו להיזכר במה שלמדנו עד היום.
לפני שאתם מריצים אותו, נסו לנחש מה התסריט הזה מבצע?
היכנסו לסביבת הלמידה מדעי המחשב ורובוטיקה,
פתחו את הפרויקט "יחידה 3 ריבוע"
"לולאה"
בתסריט הזה נעשה שימוש בהרחבה שעוד לא הכרנו –
שימו
כדי שתוכלו להשתמש בה בפרויקטים שלכם, תצטרכו להוסיף אותה על ידי לחיצה על כפתור ההרחבות.
בחרו בהרחבה שנקראת "עט".
עכשיו יתווספו לכם הבלוקים של עט למחסן הבלוקים.
"עט"
איזה כיף לצייר בעט בתוכנה שלנו – אפשר להחליף לאיזה צבע שרוצים, לשנות את העובי, ואפילו למחוק הכול בפקודה אחת. וכל זה בלי לבזבז טיפת דיו או פיסת נייר!
נתבונן מה אפשר לעשות ב"עט":
"הרחבה על הרחבות"
בסקראץ' יש המון הרחבות זמינות. �זו הדרך להוסיף לסביבת הפיתוח שלנו עוד אפשרויות, שהן לא חלק מהאפשרויות הבסיסיות שמופיעות תמיד. לדוגמה, אפשר להשתמש במצלמה של המחשב או בכל מיני מוצרים אחרים שיכולים להתחבר למחשב ולהפוך לחלק מהפיתוח שלנו!
אתם מוזמנים להריץ עכשיו את התסריט �(על ידי לחיצה על הדגל הירוק).
האם צדקתם? �האם ניחשתם שהתסריט לצייר ריבוע באמצעות העט?
נסתכל על אורך התסריט. כמה בלוקים מופיעים בו? �האם אתם מצליחים לזהות משהו שחוזר על עצמו? �כמה פעמים?
ראינו שתסריט בעל מטרה פשוטה יחסית (ציור של ריבוע) יכול להיות די ארוך. שמנו לב שהוא גם חוזר על עצמו ("זוז" , "הסתובב", "זוז", "הסתובב"...)
אולי שמתם לב שמספר החזרות דומה למספר הצלעות של הריבוע? אם כן, כמה חזרות כאלו יופיעו במחומש? או במשושה? ובמעושר? �(כן כן, זו מילה אמיתית - מצולע בעל 10 צלעות!)
אז איך אפשר לכתוב אלגוריתם (זוכרים?) �שמבצע שוב ושוב פעולות זהות, בדרך קצרה יותר?
ניחשתם נכון! באמצעות לולאה! הידד!
נראה איך עושים את זה בסקראץ'.
חזרו לפרויקט הקודם ועשו לו "עריכה מחדש". עכשיו חפשו את קבוצת הבלוקים שנקראת
"בקרה"
נסו לבד לבחור את הבלוק המתאים כדי לבנות מחדש את התסריט שמצייר ריבוע – אבל הפעם, בדרך קצרה וקולעת :)
בכל שפת תכנות ובכל סביבת פיתוח ישנה אפשרות להשתמש בלולאה.
לולאה היא בעצם שיטה בתכנות לחזור על רצף פעולות כמה פעמים (ארבע, חמש או אפילו מיליון).
מכיוון שאנחנו יודעים כמה פעמים נרצה שהלולאה הזאת "תרוץ" (4, כמו מספר הצלעות של הריבוע), כדאי שנבחר את הלולאה הבאה: כמובן שאת המספר "10" נשנה למספר שאנחנו צריכים. לתוך הבלוק הזה נגרור את הפעולות שנרצה שיחזרו על עצמן. קדימה – מכאן אנחנו בטוחים שתסתדרו בכוחות עצמכם!
מקווים שהצלחתם, גם אם לא, בטח למדתם משהו מעניין בדרך. הנה מה שאנחנו חשבנו עליו:
נחמד וקריא הרבה יותר, נכון?
רגע, חושבים: נוסף על כך שדרך הכתיבה הזאת (עם הלולאה) מקצרת את התסריט, האם תוכלו לחשוב על עוד יתרון שלה?
בזמן שחיפשתם את הלולאה המתאימה לתסריט, ראיתם בוודאי גם את הלולאה הזאת:
רוצים לנחש מה היא עושה? או אולי פשוט לנסות! חזרו לפרויקט שלכם (זה עם הריבוע והלולאה שרצה 4 פעמים). הוסיפו את בלוק הבקרה
והכניסו אליו את אחד הבלוקים שאתם כבר מכירים (מתוך "מראה" או "תנועה"). הריצו את התסריט. רוצים לספר לכיתה מה קורה לכם עכשיו על המסך?!
"לעולמים"
...קיבלתם סחרחורת?
לחצו על כפתור
"עצור"
הכרנו שני סוגי לולאות שקיימים בסקראץ'
לולאה סופית
שבה אנחנו מגדירים כמה פעמים נרצה שתרוץ
לולאה אין-סופית
שרצה לעולמים
אחד השימושים הנפוצים ללולאת "לעולמים" הוא יצירת אנימציה. זוכרים את התלבושות של כמה מהדמויות? באמצעות שלושה בלוקים בלבד תוכלו ליצור אנימציה מגניבה לדמות כזו. מצליחים לנחש לבד אילו בלוקים צריך?
נראה יחד איך זה עובד. היכנסו בסביבת למידה לפרוייקט "יחידה 3 אנימציית בעיטת כדור"
לכל דמות התסריט שלה, אז כדי לערוך את התסריט של הכדור תצטרכו ללחוץ על התמונה שלו בבנק הדמויות שלכם.
תזכורת
לחצו על הדגל הירוק – נכון, השחקן הזה הוא לא בדיוק מסי, אבל הוא בועט בכדור בלי להתעייף. ערכו מחדש את הפרויקט: נסו להוסיף דמות של שער, ושנו את התסריט של הכדור כך שתמיד ייכנס לתוך השער.
הצלחתם? עכשיו בואו נעזור לשחקן הזה לא להתעייף מדי. החליפו את לולאת ה"לעולמים" בלולאת "חזורX פעמים". ותדאגו לכך שאחרי הגול השלישי, השחקן שלנו ישכב לנוח על הגב.
"לעולמים"
"חזור X פעמים"
יפה מאוד!
הבנו ותרגלנו את שני הסוגים של הלולאות.
ראינו איך הן משתלבות כחלק מתסריט של דמויות.
על הדרך גם הכרנו את "העט", שמאפשר לנו לצייר על הבמה.
חשבתם מה יכול לקרות אם נכניס לולאה אחת לתוך לולאה שנייה?
נראה דוגמה: היכנסו לפרוייקט "יחידה 3 אנימציית בעיטת כדור"
הריצו את הפרויקט ונסו לתאר מה אתם רואים שם.
עכשיו נצעד צעד נוסף קדימה!
חושבים שפיענחתם את זה?
בואו נבדוק: ערכו מחדש את הפרויקט כך שעל הבמה יופיעו חמישה מרובעים זה בתוך זה.
סיימתם? �כל הכבוד, עכשיו תדאגו לכך שעל הבמה יופיעו חמישה משולשים זה בתוך זה.
הלולאה החיצונית
הייתה אחראית לכמות הצורות (ריבועים/משולשים)
והלולאה הפנימית
הייתה אחראית לצורה עצמה – בדיוק כמו שתרגלנו בתחילת היחידה.
רגע, חושבים:
האם תצליחו לזהות את פקודות האתחול שבפרויקט האחרון?
יפה. אז מה ראינו?
כל לולאה מילאה תפקיד אחר:
כמו שלמדנו ביחידה הקודמת, פעמים רבות בתחילת תסריט נבצע פקודות אתחול כדי להגדיר ערכים התחלתיים לאלגוריתם (לדוגמה, מיקום הדמות).
כשאנחנו משתמשים בלולאות, לפעמים נצטרך לבצע פקודות אתחול לפני כל ריצה של הלולאה, ולפעמים לפני תחילת ה"כניסה" אל תוך הלולאה.
הסתכלו שוב על הפרויקט האחרון וחשבו, אילו שלבי אתחול מופיעים בו, ומדוע הם ממוקמים כך? מה היה קורה אילו האתחול היה מתבצע בתוך הלולאה החיצונית? והפנימית?
עכשיו, כשאנחנו יודעים ליצור לולאות, אנחנו כבר ממש מסוגלים לבנות משחקים! ממש כך! כדי לעזור לכם להתחיל, בנינו עבורכם משחק פשוט שמורכב (בעיקר) משתי לולאות. שחקו במשחק, ונסו לחשוב למה אחראית כל לולאה. תיהנו :)
כנסו בסביבסת הלמידה לפרוייקט "משחק לולאות"
עכשיו ערכו מחדש את פרויקט המשחק, ונסו להפוך את המשחק למאתגר יותר!
הוסיפו לתסריט את הלבנים הנדרשות כך שכאשר המטאטא פוגע בחתול, חתוליקו שלנו ישכב כשגבו על הרצפה.
שמתם לב לבעיה שנוצרה?
עכשיו חתוליקו ממשיך לשכב על הגב גם כשמריצים את המשחק שוב! זו שגיאה, או כמו שנהוג לכנות אותה בעולם התוכנה – באג. האם תצליחו להוסיף עוד לבנה אחת בתסריט שתפתור את הבאג?
נסו להפוך את המשחק לקשה ומהיר יותר. מה המהירות הגבוהה ביותר שתוכלו לקבוע למטאטא בלי להיפסל? האם תוכלו לשנות עוד משהו בקוד כדי שתצליחו לשחק במהירות גבוהה עוד יותר?
א.
ב.
ג.
מה למדנו ביחידה זו?
לולאה מאפשרת לנו ליצור חזרה על פקודות;
הכרנו לולאה סופית ואין-סופית;
הכרנו את העט הנחמד של סקראץ';
ראינו שלפעמים חשוב לבצע אתחול גם בלולאות – מחוץ ללולאה או בתוכה;
הבנו שאנחנו כבר ממש יכולים ליצור משחק!