[השמעת מוסיקה] 1 SPEAKER: ובכן, הנה אנחנו, סט P האחרון בCS50. לברך את עצמכם מהצורך הגיע כל כך רחוק מאז שלום הראשון שלך עולמות ולהדפסה פירמידות למריו. אתה עשית באתר בשבוע שעבר. ואנחנו הולכים להיות ביצוע עוד אחד השבוע, אחד המאפשר לך נוסע ברחבי קמפוס אוניברסיטת הרווארד, קטיף עד CS50 חברי צוות, ו מביא אותם אליהם בתי מגורים. עכשיו בשבוע שעבר עבדנו ב-PHP, שפת צד שרת. לסט P זה, אנחנו מקבלים הצגנו לJavaScript, שהוא שפת צד לקוח. אז בואו נסתכל על כמה מן קוד הפצה שספק ל לך על סט P זה. בתיקיית JavaScript, יהיו להיות חבורה של קבצים ב-JavaScript. יש buildings.js, המכיל מערך של מבנים סביב הרווארד קמפוס, עם המידע שלהם ועמדה. Houses.js הוא מערך של הרווארד בתי מגורים, עימם קווי רוחב וקווי אורך. Passengers.js מכיל מערך של נוסעים - חברי צוות CS50 - כי אתה תהיה להחזיר ל בתי המגורים שלהם. Math3D.js, שמכיל הרבה פונקציות לעשות עם התנועה. אם אתה באופן מתמטי אופקים, אז אני מברך אותך להעיף מבט. אבל אתה לא צריך להבין כל מה שביש. Shuttle.js, העוסק ב התנועה של המעבורת. וindex.html הוא דף הבית שבו כל מה שקורה, באמת, שבו משתמש אינטראקציה עם האתר. Service.css הוא גיליון סגנונות CSS, אשר, בנוסף לטוויטר ספריית bootstrap, פקדים איך נראה index.html. ולאחר מכן יש לנו גם service.js, אשר מכיל פונקציות שירות עבור המעבורת. והנה שבו אתה הולך להיות מילוי בחלק לדוס. עכשיו בואו נסתכל על עצמים ו מערכים אסוציאטיביים ב-JavaScript, אשר לכל דבר ועניין ניתנים להחלפה. אם אני רוצה לעשות אובייקט משתנה בשם שרביט, הייתי להצהיר על זה. ובתוך אלה סוגריים המסולסלים הייתי ציין את הליבה היא חד קרן. העץ הוא דובדבן. והאורך הוא 13. עכשיו אני גם יכול לגשת לערכים של אובייקטים באמצעות סימון מערך אסוציאטיבי. ליבת מדד אז שרביט, אני יכול להגדיר כי שווה לקרן, או לבדוק את זה, אם אני צריך. או שאני יכול להשתמש באופרטור הנקודה. עץ נקודת שרביט שווה דובדבן, וכן הלאה, וכן הלאה. אז אתה רואה שמערכים ואסוציאטיביים אובייקטים ב-JavaScript הולכים להיות להחלפה, ורצון להיות שימושי למדי. ואז אנחנו רואים מערך של מבנים בbuildings.js. שוב, מערך של אובייקטים. אם אני רוצה ליצור מערך של המיטב בניינים בקמפוס אוניברסיטת הרווארד, ולאחר מכן אני אעשה את זה באופן הבא. באמצעות סימון האובייקט הזה, שבו אני מאחסן את השורש, שם, הכתובת, קו רוחב, אורך ורוחב לכל אובייקט בניין אחד. בואו נדבר במהירות על משתנים ב-JavaScript. כמו PHP, משתני JavaScript הם בחולשה או רפיון שהוקלד. כדי ליצור משתנים מקומי, אתה קידומת השם המשתנה עם V--R, var. עכשיו ב-JavaScript, פונקציות תהיה לצמצם את ההיקף של משתנים. אז אם יש לך משתנה מקומי בתוך פונקציה, ואז פונקציות אחרות לא יכול לגשת אליו. אבל שלא כמו C, לולאות ותנאים לא לצמצם את היקף משתנה. אז גם אם אתה מצהיר את זה בפנים של מצב, תהיה כולו הפונקציה יש להם גישה אליו. עכשיו בלי var, משתנה יהיה גלובלי. אז אם אתה רק מכריז את השם ו להקצות ערך, אז זה משתנה יהיה משתנה גלובלי ב-JavaScript. עכשיו בבתים, יש לנו אסוציאטיבי מערך של אובייקטים מסוג הבית, שבו כל בית הוא רק קו רוחב וקו אורך. אז יש לנו את הנוסעים מערך, שהוא מערך נוסע סוג האובייקט. אז כל נוסע יש לו שם משתמש, שם, ובית. שים לב שאני רואה מסוג נוסע, שבאמת רק אומר כי לכל אובייקט אותו זוג ערך מפתח. אז כל אובייקט של נוסעים סוג יש שם משתמש, שם, ובית. אז מה אנחנו צריכים לעשות כדי לעשות לסט P? ובכן, אנחנו צריכים לאפשר למשתמשים לבחור עד חברי צוות, כדי להציג את כל אנשי צוות שנמצאים כרגע ב המעבורת שלנו, וכדי להוריד אותם. ואז גם לדבר על תוספת תכונות שניתן ליישם עבור סט P מעבורת. אבל בואו נדבר על הטנדר ראשון. פניהם של צוות CS50 היו ניטע בכל רחבי קמפוס, בו כל פנים מיושמים כסימן מקום על פני כדור הארץ 3D, וכמו סמן על מפת 2D. לכן, כאשר המשתמש לוחץ על הטנדר כפתור, אנחנו רוצים להוסיף סמוך נוסעי המעבורת. ואנחנו גם רוצים להסיר את מקומם לסמן מן העולם, ולהסירם סמן מן המפה, המצביע על כך הם בהסעות שלנו עכשיו. אז איך לזהות אם נוסעים נמצא בטווח של המעבורת שלנו? ובכן, מרחק הפונקציה - כך מרחק נקודת מעבורת, שעובר ב קווי אורך והרוחב, יהיה לחשב את המרחק מהנוכחי עמדתה של המעבורת ל נקודה שציינת עם זה ניתנו קווי אורך ורוחב. כך שאתה יכול להשתמש בזה כדי לחשב את מרחק מהמעבורת ל נוסעים. אבל איך אתה יודע איפה הנוסעים? ובכן, זה המקום שבי נצטרך לערוך את הפונקציה לאכלס. לאכלס מקומות כל חברי צוות ונוסעים אל העולם, ולמפה, אבל לא תאחסן את המיקום שלהם. אז אולי אתה יכול לאחסן אותם למקם את הסימנים וסמנים בחלק המערך הגלובלי. עכשיו כבר יש מערך גלובלי אחסון מידע מנוסעים. חנויות המערך נוסע כל אחד שמו של נוסע ואת הבית שלהם. אז אולי אתה יכול להוסיף כמה פרמטרים יש לחפצי נוסעים. כדי לעזור לנו לזהות את כל הנוסעים בטווח של המעבורת שלנו, בואו לולאה דרך כל הנוסעים במערך הנוסעים. לולאה בJavaScript עשויה להיראות משהו כזה, דומה מאוד ל אלה ללולאה בג או שאנחנו יכולים להשתמש חלופי למבנה לולאה. עבור i var במערך, שבו אני עדיין יהיה המדד. אבל אתה לא צריך לציין אורך נקודת המערך מצב, ואני ועוד ועוד. מיקומו של כל נוסע הוא ניתנו על ידי סימן המקום שלהם. אבל סימן המקום אינו קו רוחב והאורך. אנחנו צריכים לגשת לפרמטרים אלו על ידי מקבל את הגיאומטריה, באמצעות גט גיאומטריה על סימן המקום. ואז ברגע שיש לנו את הגיאומטריה, מקבל גם את קו הרוחב או אורך, שימוש בפונקציות הללו. אז עכשיו אנחנו יודעים איך לזהות אם נוסעים נמצאים בתוך מגוון רחב של ההסעות שלנו. ברגע שיש לנו הנוסעים האלה, אנחנו רוצה להוסיף כל נוסעים, כי הם בטווח זה. אנחנו רוצים לאפשר להם לקפוץ על, ו לשבת על המעבורת שלנו, אבל רק אם יש לנו מספיק מקום עבורם. מושבי נקודת מעבורת המערך יהיה לציין אם מושבים ריקים, או שהוא במושב זה. אז אם מקום מושבו הוא ריק, ואז המושב שיהיה ריק. אז לחזר על מערך המושבים, בדיקה למושבים ריקים, אחסון נוסע למושבים האלה עד שאתה אין לי שום מושבים ריקים יותר. ולמרבה הצער, כל נוסעים אחרים יצטרך לחכות ל בפעם הבאה שמגיעה המעבורת בסביבה. ברגע שהם מקבלים על המעבורת, אנחנו רוצים כדי להסיר את חותם המקום שלהם, שבו היא התמונה שלהם בעולם 3D. אם אני רוצה להסיר עמ 'סימן מקום, אז הייתי מקבל את כל התכונות מהאדמה שלי, מ- Google Earth, ולאחר מכן להסיר את אותו מקום ספציפי לסמן באמצעות פונקצית removeChild. ואז לבסוף, בואו להסיר את הסמן, הסמל על מפת 2D לכל נוסעים שאנחנו מרימים. כדי להסיר סמן, מ ', אז אני רק בביצוע null setMap נקודה מ '. האם זה עבור כל נוסעים בטווח, ושתסיים את טנדר.