1 00:00:00,000 --> 00:00:09,870 2 00:00:09,870 --> 00:00:13,360 >> ZAMYLA Чан: Ну, ось ми, останній р-множиною в CS50. 3 00:00:13,360 --> 00:00:17,040 Привітати себе від необхідності так далеко з моменту вашого першого Здравствуйте 4 00:00:17,040 --> 00:00:20,090 Світи і друк Вгору Піраміди для Маріо. 5 00:00:20,090 --> 00:00:21,930 Ви зробили сайт минулого тижня. 6 00:00:21,930 --> 00:00:25,110 І ми збираємося робити ще один на цьому тижні, який дозволяє 7 00:00:25,110 --> 00:00:28,570 їздити навколо кампуса Гарвардського, вибираючи до CS50 співробітників і 8 00:00:28,570 --> 00:00:31,910 повертаючи їх до їх житлові будинки. 9 00:00:31,910 --> 00:00:35,400 >> Тепер, минулого тижня ми працювали в PHP, сервера мову сторона. 10 00:00:35,400 --> 00:00:38,250 Для цього р-множини, ми стаємо введений на JavaScript, який 11 00:00:38,250 --> 00:00:40,610 мову на стороні клієнта. 12 00:00:40,610 --> 00:00:44,020 Отже, давайте поглянемо на деякі з Код розподілу, який надається 13 00:00:44,020 --> 00:00:46,210 Ви для цього р-множини. 14 00:00:46,210 --> 00:00:49,700 У папці JavaScript, там буде бути купа файлів JavaScript. 15 00:00:49,700 --> 00:00:53,600 >> Там в buildings.js, який містить Масив будівель навколо Гарварді 16 00:00:53,600 --> 00:00:57,340 кампус з їх інформацією і положення. 17 00:00:57,340 --> 00:01:01,630 Houses.js являє собою масив з Гарварду житлові будинки з їх 18 00:01:01,630 --> 00:01:04,030 широти і довготи. 19 00:01:04,030 --> 00:01:08,600 Passengers.js містить масив пасажири, співробітники CS50 20 00:01:08,600 --> 00:01:11,640 що ви будете повернути до їх житлових будинків. 21 00:01:11,640 --> 00:01:16,450 >> Math3D.js, що містить багато функції, щоб зробити з рухом. 22 00:01:16,450 --> 00:01:19,500 Якщо ви математично налаштованих, то Я вітаю вас, щоб поглянути. 23 00:01:19,500 --> 00:01:23,530 Але ви не повинні розуміти все там. 24 00:01:23,530 --> 00:01:26,710 Shuttle.js, що має справу з Рух шаттла. 25 00:01:26,710 --> 00:01:31,450 І index.html є домашня сторінка, де все відбувається, насправді, де 26 00:01:31,450 --> 00:01:33,610 користувач взаємодіє з сайтом. 27 00:01:33,610 --> 00:01:39,110 >> Service.css є лист CSS стиль, які на додаток до Twitter 28 00:01:39,110 --> 00:01:43,960 Початкова завантаження Бібліотека, елементи управління як index.html виглядає. 29 00:01:43,960 --> 00:01:48,190 А потім у нас також є service.js, які містить сервісні функції для 30 00:01:48,190 --> 00:01:49,010 Трансфер. 31 00:01:49,010 --> 00:01:53,010 І ось те, де ви збираєтеся бути заповнивши деякі з к-робити,. 32 00:01:53,010 --> 00:01:56,600 >> Тепер давайте поглянемо на об'єктах і асоціативні масиви в JavaScript, 33 00:01:56,600 --> 00:01:59,360 які, для всіх намірів і цілей, є взаємозамінними. 34 00:01:59,360 --> 00:02:03,030 Якби я хотів зробити об'єкт змінну називається паличка, я б 35 00:02:03,030 --> 00:02:04,290 оголосимо його. 36 00:02:04,290 --> 00:02:09,350 І всередині цих фігурних дужок, я б вказати, ядро ​​єдиноріг, ліс 37 00:02:09,350 --> 00:02:12,710 вишневого, а довжина становить 13. 38 00:02:12,710 --> 00:02:16,370 >> Тепер, я можу також доступ до значень об'єктів з використанням 39 00:02:16,370 --> 00:02:18,270 асоціативна позначення масиву. 40 00:02:18,270 --> 00:02:22,610 Так паличка Базовий індекс, я можу встановити що дорівнює єдиноріг, або 41 00:02:22,610 --> 00:02:24,710 перевірити, що якщо мені потрібно. 42 00:02:24,710 --> 00:02:28,890 Або я можу використовувати оператор точки wand.wood одно вишня, і 43 00:02:28,890 --> 00:02:30,280 так далі і тому подібне. 44 00:02:30,280 --> 00:02:33,930 Отже, ви бачите, що асоціативні масиви і об'єкти в JavaScript будуть 45 00:02:33,930 --> 00:02:37,710 взаємозамінні, і воля прийти в дуже зручно. 46 00:02:37,710 --> 00:02:41,570 >> Потім ми бачимо масив будівель в buildings.js, 47 00:02:41,570 --> 00:02:43,870 знову, масив об'єктів. 48 00:02:43,870 --> 00:02:48,500 Якби я хотів зробити масив з кращих будівлі на Гарвардського університетського містечка, то 49 00:02:48,500 --> 00:02:49,710 Я хотів би зробити це таким чином. 50 00:02:49,710 --> 00:02:55,250 Використовуючи ці позначення об'єкта, де Я зберігаю кореневої, ім'я, адреса, 51 00:02:55,250 --> 00:03:00,260 широта, і довгота для кожного один об'єкт будівництва. 52 00:03:00,260 --> 00:03:02,930 >> Давайте швидко говорити про змінних в JavaScript. 53 00:03:02,930 --> 00:03:07,760 Як PHP, JavaScript змінні слабо або вільно набрали. 54 00:03:07,760 --> 00:03:14,120 Щоб створити локальну змінну, Ви передуватимете ім'я змінної з V-A-R, вар. 55 00:03:14,120 --> 00:03:17,010 Тепер, в JavaScript, функції будуть обмежити область видимості змінних. 56 00:03:17,010 --> 00:03:20,600 Так що якщо у вас є локальна змінна в функція, то інші функції 57 00:03:20,600 --> 00:03:22,060 не може отримати до нього доступ. 58 00:03:22,060 --> 00:03:26,090 >> Але на відміну від C, петлі і умови не обмеження обсягу змінної. 59 00:03:26,090 --> 00:03:30,600 Так що навіть якщо ви розкажете його всередині стан, вся функція буде 60 00:03:30,600 --> 00:03:32,810 мати доступ до нього. 61 00:03:32,810 --> 00:03:35,820 Тепер, не вар, змінна носитиме глобальний характер. 62 00:03:35,820 --> 00:03:39,170 Так що якщо ви просто оголосити ім'я і присвоїти значення, то, що змінна 63 00:03:39,170 --> 00:03:41,900 буде глобальна змінна в JavaScript. 64 00:03:41,900 --> 00:03:48,480 >> Тепер, в будинках, у нас є асоціативну Масив об'єктів типу хост, де 65 00:03:48,480 --> 00:03:52,100 кожен будинок знаходиться всього в широти і довгота. 66 00:03:52,100 --> 00:03:55,140 Тоді у нас є пасажирів масив, який є масивом 67 00:03:55,140 --> 00:03:57,370 типу об'єкта пасажира. 68 00:03:57,370 --> 00:04:01,620 Таким чином, кожен пасажир має користувача ім'я, ім'я, і ​​будинок. 69 00:04:01,620 --> 00:04:04,840 >> Зверніть увагу, що я кажу типу Пасажир, який насправді просто означає, 70 00:04:04,840 --> 00:04:08,150 що кожен об'єкт має ж пар ключ-значення. 71 00:04:08,150 --> 00:04:12,830 Таким чином, кожен об'єкт типу пасажира має ім'я користувача, ім'я, і ​​будинок. 72 00:04:12,830 --> 00:04:14,850 Так що ж нам потрібно зробити для р-набору? 73 00:04:14,850 --> 00:04:20,779 Ну, ми повинні дозволити користувачам вибирати до співробітників, щоб показати всі 74 00:04:20,779 --> 00:04:25,080 співробітники, які в даний наш маршрутний автобус, і висадити їх. 75 00:04:25,080 --> 00:04:29,395 І тоді ми будемо також говорити про додаткові особливості, які можуть бути реалізовані для 76 00:04:29,395 --> 00:04:30,980 Трансфер р-безліч. 77 00:04:30,980 --> 00:04:33,610 >> Але давайте поговоримо про пікап в першу чергу. 78 00:04:33,610 --> 00:04:37,480 Особи CS50 персоналу була посадили у всьому кампусі, де кожен 79 00:04:37,480 --> 00:04:41,750 Особа реалізований як місце марки на 3D Землі, і в якості 80 00:04:41,750 --> 00:04:44,020 маркер на 2D-карті. 81 00:04:44,020 --> 00:04:47,880 Так що, коли користувач натискає на Pickup Кнопка, ми хочемо додати неподалік 82 00:04:47,880 --> 00:04:49,590 пасажирів у маршрутному автобусі. 83 00:04:49,590 --> 00:04:53,650 І ми також хочемо, щоб видалити їх місце помітити від світу і видалити їх 84 00:04:53,650 --> 00:04:58,060 Маркер з карти, вказуючи, що вони в нашому трансферному автобусі зараз. 85 00:04:58,060 --> 00:05:02,520 >> Так як же нам визначити, що пасажири знаходиться в зоні нашого човника? 86 00:05:02,520 --> 00:05:06,670 Ну, функція відстані, так що shuttle.distance, передаючи 87 00:05:06,670 --> 00:05:10,630 широта і довгота, розрахує відстань від поточної позиції 88 00:05:10,630 --> 00:05:14,220 човника до того, що Ви визначаєте з наведеним 89 00:05:14,220 --> 00:05:15,860 широта і довгота. 90 00:05:15,860 --> 00:05:19,180 Таким чином, ви можете використовувати це для обчислення Відстань від маршрутного автобуса, щоб 91 00:05:19,180 --> 00:05:20,310 пасажирів. 92 00:05:20,310 --> 00:05:24,040 >> Але як ви знаєте, де пасажири? 93 00:05:24,040 --> 00:05:27,510 Ну, ось де ми повинні будемо редагувати функцію заповнення. 94 00:05:27,510 --> 00:05:32,500 Заповніть Places все із співробітників в пасажирів у світ 95 00:05:32,500 --> 00:05:36,300 і в карті, але не зберігати їх розташування. 96 00:05:36,300 --> 00:05:39,850 Так що, можливо, ви можете зберігати їх розмістити знаки і маркери 97 00:05:39,850 --> 00:05:41,570 в деякому глобальному масиві. 98 00:05:41,570 --> 00:05:45,780 >> Тепер вже є глобальний масив зберігання інформації від пасажирів. 99 00:05:45,780 --> 00:05:49,960 Пасажири масиву магазини кожен Ім'я пасажира, і їх будинок. 100 00:05:49,960 --> 00:05:54,985 Тому, можливо, ви можете додати кілька параметрів там пасажирських об'єктів. 101 00:05:54,985 --> 00:05:58,150 >> Щоб допомогти нам виявити всі пасажири в спектр наших 102 00:05:58,150 --> 00:06:02,485 Трансфер, давайте цикл по всіх пасажири в масиві пасажирів. 103 00:06:02,485 --> 00:06:07,790 Для петлі в JavaScript може виглядати щось на зразок цього, дуже схожий на 104 00:06:07,790 --> 00:06:13,200 ті, для петель в С. Або ми можемо використовувати Альтернатива для структурі петлі, для 105 00:06:13,200 --> 00:06:18,680 вар я в масиві, де я все ще буде індекс, але ви не повинні 106 00:06:18,680 --> 00:06:23,310 вказати array.length стан, і я + +. 107 00:06:23,310 --> 00:06:26,130 >> Розташування кожного пасажира складає дається їх місця етикетки. 108 00:06:26,130 --> 00:06:29,800 Але місце символ не широта і довгота. 109 00:06:29,800 --> 00:06:34,170 У нас є доступ до цих параметри, отримання геометрію, використовуючи Пошук 110 00:06:34,170 --> 00:06:38,180 геометрії на місці знака, а потім як тільки ми маємо геометрію, отримуючи 111 00:06:38,180 --> 00:06:42,580 або широта або довгота за допомогою цих функцій. 112 00:06:42,580 --> 00:06:45,680 >> Так що тепер ми знаємо, як виявити чи пасажири знаходяться в межах 113 00:06:45,680 --> 00:06:47,920 Асортимент нашого шаттла. 114 00:06:47,920 --> 00:06:52,050 Як тільки ми отримаємо тих пасажирів, ми будемо хочете додати будь пасажирів, які 115 00:06:52,050 --> 00:06:53,140 в межах цього діапазону. 116 00:06:53,140 --> 00:06:57,580 Ми хочемо, щоб дозволити їм стрибати на і прийняти місце на нашому трансферному автобусі, але тільки 117 00:06:57,580 --> 00:06:59,630 якщо у нас є достатньо місця для них. 118 00:06:59,630 --> 00:07:04,120 >> Масив shuttle.seats вкаже сидіння, чи є порожніми, або 119 00:07:04,120 --> 00:07:05,890 хто в цьому кріслі. 120 00:07:05,890 --> 00:07:11,160 Так що, якщо місце порожнім, то що місце буде нульовим. 121 00:07:11,160 --> 00:07:15,930 Так ітерації по масиву місць, перевірка на порожні місця, зберігання 122 00:07:15,930 --> 00:07:20,020 пасажири в ці місця, поки Ви немає ніяких більш порожні місця. 123 00:07:20,020 --> 00:07:23,330 І, на жаль, ніяких інших пасажирів доведеться чекати 124 00:07:23,330 --> 00:07:26,000 наступного разу шатл йде вниз. 125 00:07:26,000 --> 00:07:30,280 >> Як тільки вони отримають на шатлі, ми хочемо видалити їх місце знак, який 126 00:07:30,280 --> 00:07:32,580 є їх фото в 3D-світі. 127 00:07:32,580 --> 00:07:38,030 Якби я хотів, щоб видалити місце Mark P, то я хотів би отримати всі функції, 128 00:07:38,030 --> 00:07:42,820 від мого Землі, від Google Earth, , А потім видалити, що конкретне місце 129 00:07:42,820 --> 00:07:45,910 помітити за допомогою функції RemoveChild. 130 00:07:45,910 --> 00:07:51,360 Тоді, нарешті, давайте приберемо маркер, значок на 2D-карті, для будь-якого 131 00:07:51,360 --> 00:07:53,650 пасажир, що ми встають. 132 00:07:53,650 --> 00:07:59,790 >> Щоб видалити маркер т, то я буду просто виконати m.setMap нуль. 133 00:07:59,790 --> 00:08:03,670 Робіть це протягом будь-яких пасажирів у межах діапазону, і ви закінчили пікап. 134 00:08:03,670 --> 00:08:07,890 Функціональна схема повинна відображати всі з пасажирів, які знаходяться у вашому 135 00:08:07,890 --> 00:08:11,000 Трансфер і вільне місце, якщо порожніми. 136 00:08:11,000 --> 00:08:14,420 Так графік повинен перебрати shuttle.seats, відображення 137 00:08:14,420 --> 00:08:21,350 інформація про пасажирів для кожного індексу, і вільне місце, якщо, що індекс є недійсним. 138 00:08:21,350 --> 00:08:26,160 >> Тепер, якщо HTML текст поміщається усередині JavaScript змінна, то за допомогою 139 00:08:26,160 --> 00:08:31,950 document.getElementById, графік може редагувати внутрішню HTML з, що даний 140 00:08:31,950 --> 00:08:36,140 елемент, призначивши HTML текст 141 00:08:36,140 --> 00:08:40,840 document.getElementById внутрішня змінна HTML. 142 00:08:40,840 --> 00:08:46,180 Коли користувачі натискають кнопку Drop Off в index.html, він подзвонить 143 00:08:46,180 --> 00:08:47,160 Функція залишите машину. 144 00:08:47,160 --> 00:08:49,510 І це наша робота, щоб здійснити це. 145 00:08:49,510 --> 00:08:54,150 >> У Dropoff, ми хочемо, щоб видалити будь пасажири з шаттла, тільки якщо 146 00:08:54,150 --> 00:08:58,740 ми знаходимося в діапазоні їх призначення, їх житловий будинок. 147 00:08:58,740 --> 00:09:03,300 Так залишите машину доведеться перевірити, чи є трансфер в діапазоні будь-який з 148 00:09:03,300 --> 00:09:08,200 будинку, і видаліть всі необхідні пасажири з шаттла. 149 00:09:08,200 --> 00:09:11,020 Так як же ми перевіряємо, якщо ми в діапазоні будь-яких будинків? 150 00:09:11,020 --> 00:09:16,630 Ну, ще раз, ми будемо використовувати shuttle.distance функцію, передаючи в 151 00:09:16,630 --> 00:09:20,990 широта і довгота точки що ми перевіряємо проти. 152 00:09:20,990 --> 00:09:22,730 >> Але те, що це ті точки? 153 00:09:22,730 --> 00:09:27,210 Ну, масив будинку, якщо ви пам'ятаєте, в houses.js, зберігає 154 00:09:27,210 --> 00:09:32,790 широта і довгота кожного будинку в асоціативний масив, де кожен 155 00:09:32,790 --> 00:09:35,980 індекс ім'я цього будинку. 156 00:09:35,980 --> 00:09:37,590 Тоді, щоб видалити пасажирів - 157 00:09:37,590 --> 00:09:41,820 ну, тільки якщо ми знаходимося в діапазоні їх Будинок, який вони хочуть піти. 158 00:09:41,820 --> 00:09:46,380 Отже, ще раз, пам'ятайте, що пасажири зберігає будинок, що кожен пасажир 159 00:09:46,380 --> 00:09:48,850 хоче піти в. 160 00:09:48,850 --> 00:09:51,670 Якщо вони знаходяться в межах діапазону їх будинок, то ми будемо змушені видалити, що 161 00:09:51,670 --> 00:09:57,200 пасажир від shuttle.seats і набору їх положення в масиві до нуля. 162 00:09:57,200 --> 00:10:00,220 >> Тепер давайте поговоримо про деякі додаткових функцій , Які можуть бути реалізовані в 163 00:10:00,220 --> 00:10:02,690 CS50 Трансфер р-безліч. 164 00:10:02,690 --> 00:10:05,850 Там в бальною системою в результаті чого вам відстежувати, скільки 165 00:10:05,850 --> 00:10:07,520 вказує користувач має. 166 00:10:07,520 --> 00:10:11,120 Для висаджуючи пасажирів успішно, вони можуть отримати очки. 167 00:10:11,120 --> 00:10:15,100 Але за те, щоб висадити пасажирів де немає ніякого будинку поблизу, 168 00:10:15,100 --> 00:10:16,980 добре, вони можуть отримати покарання за це. 169 00:10:16,980 --> 00:10:21,790 Так що, можливо, ви хочете, щоб відстежувати точки в глобальної змінної. 170 00:10:21,790 --> 00:10:25,970 >> Ви можете реалізувати, можливо, таймер, де користувач має певну кількість 171 00:10:25,970 --> 00:10:29,800 час, щоб забрати і йдуть а, певну кількість пасажирів. 172 00:10:29,800 --> 00:10:33,280 Може бути, навіть інтегрувати це з системою точки. 173 00:10:33,280 --> 00:10:39,970 Або ви можете редагувати діаграми таким чином, щоб пасажири упорядковано дому. 174 00:10:39,970 --> 00:10:45,250 Так що, ймовірно, буде свого роду функціонувати в shuttle.seats. 175 00:10:45,250 --> 00:10:49,240 >> Ви можете реалізувати літаючу функцію, де, якщо користувач вводить Konami 176 00:10:49,240 --> 00:10:53,460 Код, то трансфер злітає земля і трансфер може літати. 177 00:10:53,460 --> 00:10:58,890 Але для безпечної висадки, все можливе, щоб Трансфер приземлитися свої колеса на 178 00:10:58,890 --> 00:11:00,700 землю в першу чергу. 179 00:11:00,700 --> 00:11:05,910 Ви також можете здійснити телепортацію, де ви зробити список, що випадає 180 00:11:05,910 --> 00:11:08,380 будівлі в index.html. 181 00:11:08,380 --> 00:11:12,270 І вибравши один з тих,, Користувач буде транспортуватися в 182 00:11:12,270 --> 00:11:14,220 що будівництво на території кампуса. 183 00:11:14,220 --> 00:11:16,760 У порядку, хоча, подорожувати по стіни деякі 184 00:11:16,760 --> 00:11:19,290 будівлі по дорозі туди. 185 00:11:19,290 --> 00:11:22,960 >> Ви також можете змінити швидкість Трансфер, що дозволяє користувачеві, щоб збільшити 186 00:11:22,960 --> 00:11:25,490 або зменшити швидкість. 187 00:11:25,490 --> 00:11:28,840 Можливо, ви хочете глобальну змінну в відслідковувати, скільки палива 188 00:11:28,840 --> 00:11:31,520 Трансфер має, зменшуючи це, як ви йдете вперед. 189 00:11:31,520 --> 00:11:35,860 Коли ви дійдете до нуля, хоча, трансфер не зможе рухатися, якщо ви не маєте 190 00:11:35,860 --> 00:11:40,610 заправлятися, можливо, за допомогою кнопки або навіть зробити свій власний АЗС. 191 00:11:40,610 --> 00:11:43,240 >> Але це, звичайно, не вичерпний список. 192 00:11:43,240 --> 00:11:46,340 Перевірте специфікацію для повного список, або, можливо, запропонувати 193 00:11:46,340 --> 00:11:47,840 самостійно на свій TF. 194 00:11:47,840 --> 00:11:48,950 Небо це межа. 195 00:11:48,950 --> 00:11:53,110 Це твій останній CS50 р-набір, так весело з ним. 196 00:11:53,110 --> 00:11:56,360 Це було CS50 Трансфер. 197 00:11:56,360 --> 00:11:59,230 >> Я повинен сказати, це було дуже приємно що робить це для вас з 198 00:11:59,230 --> 00:12:00,400 знімальна група. 199 00:12:00,400 --> 00:12:04,330 І я сподіваюся, що ви насолоджуватися ними, а також. 200 00:12:04,330 --> 00:12:06,040 Мене звуть Zamyla. 201 00:12:06,040 --> 00:12:08,310 І це було CS50. 202 00:12:08,310 --> 00:12:16,363