>> ZAMYLA Чан: Ну, ось ми, останній р-множиною в CS50.
Привітати себе від необхідності так далеко з моменту вашого першого Здравствуйте
Світи і друк Вгору Піраміди для Маріо.
Ви зробили сайт минулого тижня.
І ми збираємося робити ще один на цьому тижні, який дозволяє
їздити навколо кампуса Гарвардського, вибираючи до CS50 співробітників і
повертаючи їх до їх житлові будинки.
>> Тепер, минулого тижня ми працювали в PHP, сервера мову сторона.
Для цього р-множини, ми стаємо введений на JavaScript, який
мову на стороні клієнта.
Отже, давайте поглянемо на деякі з Код розподілу, який надається
Ви для цього р-множини.
У папці JavaScript, там буде бути купа файлів JavaScript.
>> Там в buildings.js, який містить Масив будівель навколо Гарварді
кампус з їх інформацією і положення.
Houses.js являє собою масив з Гарварду житлові будинки з їх
широти і довготи.
Passengers.js містить масив пасажири, співробітники CS50
що ви будете повернути до їх житлових будинків.
>> Math3D.js, що містить багато функції, щоб зробити з рухом.
Якщо ви математично налаштованих, то Я вітаю вас, щоб поглянути.
Але ви не повинні розуміти все там.
Shuttle.js, що має справу з Рух шаттла.
І index.html є домашня сторінка, де все відбувається, насправді, де
користувач взаємодіє з сайтом.
>> Service.css є лист CSS стиль, які на додаток до Twitter
Початкова завантаження Бібліотека, елементи управління як index.html виглядає.
А потім у нас також є service.js, які містить сервісні функції для
Трансфер.
І ось те, де ви збираєтеся бути заповнивши деякі з к-робити,.
>> Тепер давайте поглянемо на об'єктах і асоціативні масиви в JavaScript,
які, для всіх намірів і цілей, є взаємозамінними.
Якби я хотів зробити об'єкт змінну називається паличка, я б
оголосимо його.
І всередині цих фігурних дужок, я б вказати, ядро ​​єдиноріг, ліс
вишневого, а довжина становить 13.
>> Тепер, я можу також доступ до значень об'єктів з використанням
асоціативна позначення масиву.
Так паличка Базовий індекс, я можу встановити що дорівнює єдиноріг, або
перевірити, що якщо мені потрібно.
Або я можу використовувати оператор точки wand.wood одно вишня, і
так далі і тому подібне.
Отже, ви бачите, що асоціативні масиви і об'єкти в JavaScript будуть
взаємозамінні, і воля прийти в дуже зручно.
>> Потім ми бачимо масив будівель в buildings.js,
знову, масив об'єктів.
Якби я хотів зробити масив з кращих будівлі на Гарвардського університетського містечка, то
Я хотів би зробити це таким чином.
Використовуючи ці позначення об'єкта, де Я зберігаю кореневої, ім'я, адреса,
широта, і довгота для кожного один об'єкт будівництва.
>> Давайте швидко говорити про змінних в JavaScript.
Як PHP, JavaScript змінні слабо або вільно набрали.
Щоб створити локальну змінну, Ви передуватимете ім'я змінної з V-A-R, вар.
Тепер, в JavaScript, функції будуть обмежити область видимості змінних.
Так що якщо у вас є локальна змінна в функція, то інші функції
не може отримати до нього доступ.
>> Але на відміну від C, петлі і умови не обмеження обсягу змінної.
Так що навіть якщо ви розкажете його всередині стан, вся функція буде
мати доступ до нього.
Тепер, не вар, змінна носитиме глобальний характер.
Так що якщо ви просто оголосити ім'я і присвоїти значення, то, що змінна
буде глобальна змінна в JavaScript.
>> Тепер, в будинках, у нас є асоціативну Масив об'єктів типу хост, де
кожен будинок знаходиться всього в широти і довгота.
Тоді у нас є пасажирів масив, який є масивом
типу об'єкта пасажира.
Таким чином, кожен пасажир має користувача ім'я, ім'я, і ​​будинок.
>> Зверніть увагу, що я кажу типу Пасажир, який насправді просто означає,
що кожен об'єкт має ж пар ключ-значення.
Таким чином, кожен об'єкт типу пасажира має ім'я користувача, ім'я, і ​​будинок.
Так що ж нам потрібно зробити для р-набору?
Ну, ми повинні дозволити користувачам вибирати до співробітників, щоб показати всі
співробітники, які в даний наш маршрутний автобус, і висадити їх.
І тоді ми будемо також говорити про додаткові особливості, які можуть бути реалізовані для
Трансфер р-безліч.
>> Але давайте поговоримо про пікап в першу чергу.
Особи CS50 персоналу була посадили у всьому кампусі, де кожен
Особа реалізований як місце марки на 3D Землі, і в якості
маркер на 2D-карті.
Так що, коли користувач натискає на Pickup Кнопка, ми хочемо додати неподалік
пасажирів у маршрутному автобусі.
І ми також хочемо, щоб видалити їх місце помітити від світу і видалити їх
Маркер з карти, вказуючи, що вони в нашому трансферному автобусі зараз.
>> Так як же нам визначити, що пасажири знаходиться в зоні нашого човника?
Ну, функція відстані, так що shuttle.distance, передаючи
широта і довгота, розрахує відстань від поточної позиції
човника до того, що Ви визначаєте з наведеним
широта і довгота.
Таким чином, ви можете використовувати це для обчислення Відстань від маршрутного автобуса, щоб
пасажирів.
>> Але як ви знаєте, де пасажири?
Ну, ось де ми повинні будемо редагувати функцію заповнення.
Заповніть Places все із співробітників в пасажирів у світ
і в карті, але не зберігати їх розташування.
Так що, можливо, ви можете зберігати їх розмістити знаки і маркери
в деякому глобальному масиві.
>> Тепер вже є глобальний масив зберігання інформації від пасажирів.
Пасажири масиву магазини кожен Ім'я пасажира, і їх будинок.
Тому, можливо, ви можете додати кілька параметрів там пасажирських об'єктів.
>> Щоб допомогти нам виявити всі пасажири в спектр наших
Трансфер, давайте цикл по всіх пасажири в масиві пасажирів.
Для петлі в JavaScript може виглядати щось на зразок цього, дуже схожий на
ті, для петель в С. Або ми можемо використовувати Альтернатива для структурі петлі, для
вар я в масиві, де я все ще буде індекс, але ви не повинні
вказати array.length стан, і я + +.
>> Розташування кожного пасажира складає дається їх місця етикетки.
Але місце символ не широта і довгота.
У нас є доступ до цих параметри, отримання геометрію, використовуючи Пошук
геометрії на місці знака, а потім як тільки ми маємо геометрію, отримуючи
або широта або довгота за допомогою цих функцій.
>> Так що тепер ми знаємо, як виявити чи пасажири знаходяться в межах
Асортимент нашого шаттла.
Як тільки ми отримаємо тих пасажирів, ми будемо хочете додати будь пасажирів, які
в межах цього діапазону.
Ми хочемо, щоб дозволити їм стрибати на і прийняти місце на нашому трансферному автобусі, але тільки
якщо у нас є достатньо місця для них.
>> Масив shuttle.seats вкаже сидіння, чи є порожніми, або
хто в цьому кріслі.
Так що, якщо місце порожнім, то що місце буде нульовим.
Так ітерації по масиву місць, перевірка на порожні місця, зберігання
пасажири в ці місця, поки Ви немає ніяких більш порожні місця.
І, на жаль, ніяких інших пасажирів доведеться чекати
наступного разу шатл йде вниз.
>> Як тільки вони отримають на шатлі, ми хочемо видалити їх місце знак, який
є їх фото в 3D-світі.
Якби я хотів, щоб видалити місце Mark P, то я хотів би отримати всі функції,
від мого Землі, від Google Earth, , А потім видалити, що конкретне місце
помітити за допомогою функції RemoveChild.
Тоді, нарешті, давайте приберемо маркер, значок на 2D-карті, для будь-якого
пасажир, що ми встають.
>> Щоб видалити маркер т, то я буду просто виконати m.setMap нуль.
Робіть це протягом будь-яких пасажирів у межах діапазону, і ви закінчили пікап.
Функціональна схема повинна відображати всі з пасажирів, які знаходяться у вашому
Трансфер і вільне місце, якщо порожніми.
Так графік повинен перебрати shuttle.seats, відображення
інформація про пасажирів для кожного індексу, і вільне місце, якщо, що індекс є недійсним.
>> Тепер, якщо HTML текст поміщається усередині JavaScript змінна, то за допомогою
document.getElementById, графік може редагувати внутрішню HTML з, що даний
елемент, призначивши HTML текст
document.getElementById внутрішня змінна HTML.
Коли користувачі натискають кнопку Drop Off в index.html, він подзвонить
Функція залишите машину.
І це наша робота, щоб здійснити це.
>> У Dropoff, ми хочемо, щоб видалити будь пасажири з шаттла, тільки якщо
ми знаходимося в діапазоні їх призначення, їх житловий будинок.
Так залишите машину доведеться перевірити, чи є трансфер в діапазоні будь-який з
будинку, і видаліть всі необхідні пасажири з шаттла.
Так як же ми перевіряємо, якщо ми в діапазоні будь-яких будинків?
Ну, ще раз, ми будемо використовувати shuttle.distance функцію, передаючи в
широта і довгота точки що ми перевіряємо проти.
>> Але те, що це ті точки?
Ну, масив будинку, якщо ви пам'ятаєте, в houses.js, зберігає
широта і довгота кожного будинку в асоціативний масив, де кожен
індекс ім'я цього будинку.
Тоді, щоб видалити пасажирів -
ну, тільки якщо ми знаходимося в діапазоні їх Будинок, який вони хочуть піти.
Отже, ще раз, пам'ятайте, що пасажири зберігає будинок, що кожен пасажир
хоче піти в.
Якщо вони знаходяться в межах діапазону їх будинок, то ми будемо змушені видалити, що
пасажир від shuttle.seats і набору їх положення в масиві до нуля.
>> Тепер давайте поговоримо про деякі додаткових функцій , Які можуть бути реалізовані в
CS50 Трансфер р-безліч.
Там в бальною системою в результаті чого вам відстежувати, скільки
вказує користувач має.
Для висаджуючи пасажирів успішно, вони можуть отримати очки.
Але за те, щоб висадити пасажирів де немає ніякого будинку поблизу,
добре, вони можуть отримати покарання за це.
Так що, можливо, ви хочете, щоб відстежувати точки в глобальної змінної.
>> Ви можете реалізувати, можливо, таймер, де користувач має певну кількість
час, щоб забрати і йдуть а, певну кількість пасажирів.
Може бути, навіть інтегрувати це з системою точки.
Або ви можете редагувати діаграми таким чином, щоб пасажири упорядковано дому.
Так що, ймовірно, буде свого роду функціонувати в shuttle.seats.
>> Ви можете реалізувати літаючу функцію, де, якщо користувач вводить Konami
Код, то трансфер злітає земля і трансфер може літати.
Але для безпечної висадки, все можливе, щоб Трансфер приземлитися свої колеса на
землю в першу чергу.
Ви також можете здійснити телепортацію, де ви зробити список, що випадає
будівлі в index.html.
І вибравши один з тих,, Користувач буде транспортуватися в
що будівництво на території кампуса.
У порядку, хоча, подорожувати по стіни деякі
будівлі по дорозі туди.
>> Ви також можете змінити швидкість Трансфер, що дозволяє користувачеві, щоб збільшити
або зменшити швидкість.
Можливо, ви хочете глобальну змінну в відслідковувати, скільки палива
Трансфер має, зменшуючи це, як ви йдете вперед.
Коли ви дійдете до нуля, хоча, трансфер не зможе рухатися, якщо ви не маєте
заправлятися, можливо, за допомогою кнопки або навіть зробити свій власний АЗС.
>> Але це, звичайно, не вичерпний список.
Перевірте специфікацію для повного список, або, можливо, запропонувати
самостійно на свій TF.
Небо це межа.
Це твій останній CS50 р-набір, так весело з ним.
Це було CS50 Трансфер.
>> Я повинен сказати, це було дуже приємно що робить це для вас з
знімальна група.
І я сподіваюся, що ви насолоджуватися ними, а також.
Мене звуть Zamyla.
І це було CS50.