1 00:00:00,000 --> 00:00:09,870 2 00:00:09,870 --> 00:00:13,360 >> ZAMYLA Chan: Noh, siin me oleme, viimase p-seatud CS50. 3 00:00:13,360 --> 00:00:17,040 End õnnitleda omamast jõudnud nii kaugele, sest oma esimese Tere 4 00:00:17,040 --> 00:00:20,090 Worlds ja trükkimine Up Püramiidid Mario. 5 00:00:20,090 --> 00:00:21,930 Sa tegid veebilehel eelmisel nädalal. 6 00:00:21,930 --> 00:00:25,110 Ja me teeme veel ühe Sel nädalal, üks, mis võimaldab teil 7 00:00:25,110 --> 00:00:28,570 sõita ringi Harvard campus, korjamine üles CS50 töötajad ja 8 00:00:28,570 --> 00:00:31,910 viies need tagasi oma elumajad. 9 00:00:31,910 --> 00:00:35,400 >> Nüüd, viimasel nädalal me töötanud PHP, serveripoolne keel. 10 00:00:35,400 --> 00:00:38,250 Selle p-set, me lähme sisse JavaScript, mis 11 00:00:38,250 --> 00:00:40,610 kliendi poolel keeles. 12 00:00:40,610 --> 00:00:44,020 Võtame pilk mõned jaotus kood, mis on sätestatud, et 13 00:00:44,020 --> 00:00:46,210 teid selle p-set. 14 00:00:46,210 --> 00:00:49,700 In JavaScript kausta, siis hunnik JavaScript failid. 15 00:00:49,700 --> 00:00:53,600 >> Seal buildings.js, mis sisaldab array hoonete ümber Harvard 16 00:00:53,600 --> 00:00:57,340 campus oma andmed ja positsioon. 17 00:00:57,340 --> 00:01:01,630 Houses.js on massiivi Harvard elumajad koos oma 18 00:01:01,630 --> 00:01:04,030 pikkus-ja laiuskraadid. 19 00:01:04,030 --> 00:01:08,600 Passengers.js sisaldab massiivi reisijad, CS50 töötajad 20 00:01:08,600 --> 00:01:11,640 et sul tuleb tuua tagasi nende elumajad. 21 00:01:11,640 --> 00:01:16,450 >> Math3D.js, mis sisaldab palju funktsioonid pistmist liikumine. 22 00:01:16,450 --> 00:01:19,500 Kui oled matemaatiliselt mõtlemisega, siis Mul on hea meel, et te võtate pilk. 23 00:01:19,500 --> 00:01:23,530 Aga sa ei pea aru kõik on seal. 24 00:01:23,530 --> 00:01:26,710 Shuttle.js, mis tegeleb Shuttle liikumisele. 25 00:01:26,710 --> 00:01:31,450 Ja index.html on kodulehekülg, kus kõik juhtub, tegelikult, kui 26 00:01:31,450 --> 00:01:33,610 kasutaja suheldes kohas. 27 00:01:33,610 --> 00:01:39,110 >> Service.css on CSS stiili lehed, mis lisaks Twitter 28 00:01:39,110 --> 00:01:43,960 Bootstrap raamatukogu kontroll kuidas index.html välimus. 29 00:01:43,960 --> 00:01:48,190 Ja siis on meil ka service.js, mis sisaldab teenustegevusega 30 00:01:48,190 --> 00:01:49,010 Shuttle. 31 00:01:49,010 --> 00:01:53,010 Ja siin on koht, kus sa lähed, et olla täites mõned ülesanded on. 32 00:01:53,010 --> 00:01:56,600 >> Nüüd võtame pilk objektid ja assotsiatiivne massiivid JavaScript, 33 00:01:56,600 --> 00:01:59,360 mis, kõik kavatsused ja eesmärkidel, on omavahel vahetatavad. 34 00:01:59,360 --> 00:02:03,030 Kui ma tahtsin teha objekti muutuja nimetatakse võlukepp, ma 35 00:02:03,030 --> 00:02:04,290 kuulutada. 36 00:02:04,290 --> 00:02:09,350 Ja sees need lokkis traksid, oleksin täpsustada, tuum on ükssarvik, puit 37 00:02:09,350 --> 00:02:12,710 on kirss ja pikkus on 13. 38 00:02:12,710 --> 00:02:16,370 >> Nüüd saab kasutada ka väärtused objekte kasutades 39 00:02:16,370 --> 00:02:18,270 assotsiatiivne massiiv märke. 40 00:02:18,270 --> 00:02:22,610 Nii võlukepp index tuum, ma ei saa määrata mis võrdub ükssarvik või 41 00:02:22,610 --> 00:02:24,710 kontrollige, et kui mul on vaja. 42 00:02:24,710 --> 00:02:28,890 Või saan kasutada dot operaator wand.wood võrdub kirsi-ja 43 00:02:28,890 --> 00:02:30,280 nii edasi ja nii edasi. 44 00:02:30,280 --> 00:02:33,930 Nii et näete, et assotsiatiivne massiivid ja objektid JavaScript ei kavatse olla 45 00:02:33,930 --> 00:02:37,710 vahetatavad, ja tulevad üsna mugav. 46 00:02:37,710 --> 00:02:41,570 >> Siis näeme hulgaliselt hooneid aastal buildings.js, 47 00:02:41,570 --> 00:02:43,870 jälle hulga esemeid. 48 00:02:43,870 --> 00:02:48,500 Kui ma tahtsin teha massiivi parim hoonete Harvard loengusse, siis 49 00:02:48,500 --> 00:02:49,710 Ma teeks järgmine. 50 00:02:49,710 --> 00:02:55,250 Selle objekti märke, kus Ma hoida root, nime, aadressi, 51 00:02:55,250 --> 00:03:00,260 laius-ja pikkuskraad iga ühe hoone objekti. 52 00:03:00,260 --> 00:03:02,930 >> Lähme kiiresti rääkida muutujad JavaScript. 53 00:03:02,930 --> 00:03:07,760 Nagu PHP, JavaScript muutujad on nõrgalt või nõrgalt tipitud. 54 00:03:07,760 --> 00:03:14,120 Luua kohaliku muutuja, siis eesliide muutuja nime V-A-R, var. 55 00:03:14,120 --> 00:03:17,010 Nüüd, JavaScript, funktsioonid piirata ulatust muutujad. 56 00:03:17,010 --> 00:03:20,600 Nii et kui teil on kohalik muutuja funktsioon, siis muud funktsioonid 57 00:03:20,600 --> 00:03:22,060 ei saa seda kasutada. 58 00:03:22,060 --> 00:03:26,090 >> Kuid erinevalt C, silmad ja tingimused ei piirata ulatust muutuja. 59 00:03:26,090 --> 00:03:30,600 Nii et isegi kui sa kuulutada sees tingimus, kogu funktsioon ei toimi 60 00:03:30,600 --> 00:03:32,810 on juurdepääs sellele. 61 00:03:32,810 --> 00:03:35,820 Nüüd, ilma var muutuja on ülemaailmne. 62 00:03:35,820 --> 00:03:39,170 Nii et kui sa lihtsalt tunnistada nimi ja omistada väärtus, siis see muutuja 63 00:03:39,170 --> 00:03:41,900 on globaalne muutuja JavaScript. 64 00:03:41,900 --> 00:03:48,480 >> Nüüd, maja, meil on assotsiatiivne massiivi host tüüpi objekte, kus 65 00:03:48,480 --> 00:03:52,100 iga maja on lihtsalt laiuskraad ja pikkuskraad. 66 00:03:52,100 --> 00:03:55,140 Siis on meil reisijaid massiiv, mis on massiiv 67 00:03:55,140 --> 00:03:57,370 Objekti tüüp reisija. 68 00:03:57,370 --> 00:04:01,620 Nii et iga reisija kasutaja Nimi, nimi ja maja. 69 00:04:01,620 --> 00:04:04,840 >> Pange tähele, et ma räägin tüüpi Reisija mis tegelikult tähendab lihtsalt 70 00:04:04,840 --> 00:04:08,150 et iga objekt on sama põhiväärtus paari. 71 00:04:08,150 --> 00:04:12,830 Nii et iga objekti tüüp reisija kasutaja nimi, nimi ja maja. 72 00:04:12,830 --> 00:04:14,850 Niisiis, mida me peame teha p-set? 73 00:04:14,850 --> 00:04:20,779 Noh, meil on vaja, et kasutajad saaksid valida üles töötajaga kuva kõik 74 00:04:20,779 --> 00:04:25,080 töötajad, mis on praegu Meie buss ja tilk need ära. 75 00:04:25,080 --> 00:04:29,395 Ja siis me räägime ka pildi elemente, mida saab rakendada 76 00:04:29,395 --> 00:04:30,980 Shuttle p-set. 77 00:04:30,980 --> 00:04:33,610 >> Aga räägime pikap esimene. 78 00:04:33,610 --> 00:04:37,480 Nägu CS50 personal on istutada kogu campus, kus iga 79 00:04:37,480 --> 00:04:41,750 nägu on rakendatud koht märk 3D Maa ja nagu 80 00:04:41,750 --> 00:04:44,020 SM 2D kaardi. 81 00:04:44,020 --> 00:04:47,880 Nii et kui kasutaja klõpsab Pickup nuppu, tahame lisada lähedal 82 00:04:47,880 --> 00:04:49,590 reisijad buss. 83 00:04:49,590 --> 00:04:53,650 Ja me tahame, et eemaldada oma koht märgi maailma ja eemaldada nende 84 00:04:53,650 --> 00:04:58,060 markerit kaart, mis näitab, et nad on meie buss nüüd. 85 00:04:58,060 --> 00:05:02,520 >> Niisiis, kuidas me avastada, kui reisijate tööraadius meie buss? 86 00:05:02,520 --> 00:05:06,670 Noh, funktsioon kaugus, nii shuttle.distance, läbides 87 00:05:06,670 --> 00:05:10,630 laius-ja pikkuskraadid, arvutab kaugus praegusest asukohast 88 00:05:10,630 --> 00:05:14,220 shuttle niivõrd, et määrate selle antud 89 00:05:14,220 --> 00:05:15,860 laius-ja pikkuskraadid. 90 00:05:15,860 --> 00:05:19,180 Nii saab seda kasutada, et arvutada kaugus shuttle 91 00:05:19,180 --> 00:05:20,310 reisijat. 92 00:05:20,310 --> 00:05:24,040 >> Aga kuidas sa tead, kus reisijad on? 93 00:05:24,040 --> 00:05:27,510 Noh, see on koht, kus me peame muuta asustada funktsioon. 94 00:05:27,510 --> 00:05:32,500 Asustada kohad kõik töötajad reisijate maailma 95 00:05:32,500 --> 00:05:36,300 ja kaardi sisse, aga ei salvestada oma asukohta. 96 00:05:36,300 --> 00:05:39,850 Nii et ehk saate salvestada oma pange märgid ja markerid 97 00:05:39,850 --> 00:05:41,570 mõnel globaalne massiiv. 98 00:05:41,570 --> 00:05:45,780 >> Nüüd on juba olemas globaalne massiiv teabe säilitamise reisijatelt. 99 00:05:45,780 --> 00:05:49,960 Reisijate hulga kauplustes iga reisija nimi ja oma maja. 100 00:05:49,960 --> 00:05:54,985 Nii et äkki saate lisada mõned parameetrid seal reisijale objektid. 101 00:05:54,985 --> 00:05:58,150 >> Selleks, et aidata meil tuvastada kõik reisijad levialas meie 102 00:05:58,150 --> 00:06:02,485 buss, lähme silmus läbi kõik reisijatele reisijate hulga. 103 00:06:02,485 --> 00:06:07,790 Loop JavaScript võiks välja midagi sellist, väga sarnane 104 00:06:07,790 --> 00:06:13,200 nende jaoks silmuseid C või saame kasutada alternatiiv loop struktuur, 105 00:06:13,200 --> 00:06:18,680 var i massiivi, kus ma ikkagi indeks, kuid sa ei pea 106 00:06:18,680 --> 00:06:23,310 täpsustada array.length seisund ja i + +. 107 00:06:23,310 --> 00:06:26,130 >> Iga reisija asukoht on arvestades nende koht märk. 108 00:06:26,130 --> 00:06:29,800 Aga koht ei ole kaubamärk laius-ja pikkuskraadid. 109 00:06:29,800 --> 00:06:34,170 Meil on juurdepääs nende parameetrite järgi saada geomeetria, kasutades GET 110 00:06:34,170 --> 00:06:38,180 geomeetria koht märk, ja siis kui meil on geomeetria, saada 111 00:06:38,180 --> 00:06:42,580 kas laius või pikkus- kasutades neid funktsioone. 112 00:06:42,580 --> 00:06:45,680 >> Nüüd me teame, kuidas kindlaks teha, kas reisijad jooksul 113 00:06:45,680 --> 00:06:47,920 Valik meie buss. 114 00:06:47,920 --> 00:06:52,050 Kui meil on need reisijad, me tulen soovite lisada reisijad, kes on 115 00:06:52,050 --> 00:06:53,140 selles vahemikus. 116 00:06:53,140 --> 00:06:57,580 Me tahame, et neil oleks võimalik hop ja võtma koht oma shuttle, kuid ainult 117 00:06:57,580 --> 00:06:59,630 kui meil on piisavalt ruumi, et neid. 118 00:06:59,630 --> 00:07:04,120 >> Shuttle.seats array näitab kas istmed on tühi, või 119 00:07:04,120 --> 00:07:05,890 kes on selle asukoht. 120 00:07:05,890 --> 00:07:11,160 Nii et kui iste on tühi, siis et iste on null. 121 00:07:11,160 --> 00:07:15,930 Nii Käi istmed massiiv, kontrollimine tühjad kohad, hoidmine 122 00:07:15,930 --> 00:07:20,020 reisijaid need istmed, kuni olete ei ole enam tühjad kohad. 123 00:07:20,020 --> 00:07:23,330 Ja kahjuks muid reisijaid ei pea ootama 124 00:07:23,330 --> 00:07:26,000 Järgmine kord shuttle taandub. 125 00:07:26,000 --> 00:07:30,280 >> Kui nad on shuttle, me tahame kõrvaldada nende koht märk, mis 126 00:07:30,280 --> 00:07:32,580 on ka foto 3D maailmas. 127 00:07:32,580 --> 00:07:38,030 Kui ma tahan, et eemaldada koht märk p, siis ma saaksin kõik funktsioonid 128 00:07:38,030 --> 00:07:42,820 minu Earth, Google Earth, ja eemaldab selle konkreetse koha 129 00:07:42,820 --> 00:07:45,910 märgi abil removeChild funktsioon. 130 00:07:45,910 --> 00:07:51,360 Siis lõpuks, olgem eemaldada marker, ikooni 2D kaardi, mis tahes 131 00:07:51,360 --> 00:07:53,650 reisija, et me hoogustumas. 132 00:07:53,650 --> 00:07:59,790 >> Eemaldamiseks marker m, siis ma lihtsalt ellu m.setMap null. 133 00:07:59,790 --> 00:08:03,670 Kas see reisijate levialas, ja olete valmis pikap. 134 00:08:03,670 --> 00:08:07,890 Graafik funktsioon peaks kuva kõik reisijate, mis on teie 135 00:08:07,890 --> 00:08:11,000 buss ja tühi koht kui tühi. 136 00:08:11,000 --> 00:08:14,420 Nii skeem peaks Käi shuttle.seats väljapanek 137 00:08:14,420 --> 00:08:21,350 reisija iga indeksi kohta, ja tühi koht, kui see indeks on null. 138 00:08:21,350 --> 00:08:26,160 >> Nüüd, kui HTML tekst pannakse sees JavaScript muutuja, siis kasutades 139 00:08:26,160 --> 00:08:31,950 document.getElementById, diagrammi saab muuta sisemine HTML et antud 140 00:08:31,950 --> 00:08:36,140 element, määrates HTML teksti 141 00:08:36,140 --> 00:08:40,840 document.getElementById sisemine HTML muutuja. 142 00:08:40,840 --> 00:08:46,180 Kui kasutajad klõpsavad Drop Off nupp aastal index.html, siis helistan 143 00:08:46,180 --> 00:08:47,160 dropoff funktsioon. 144 00:08:47,160 --> 00:08:49,510 Ja see on meie töö, et rakendada seda. 145 00:08:49,510 --> 00:08:54,150 >> In dropoff, me tahame, et eemaldada reisijate shuttle ainult siis, kui 146 00:08:54,150 --> 00:08:58,740 me oleme vahemikus oma sihtkohta, oma elamu. 147 00:08:58,740 --> 00:09:03,300 Nii dropoff on kontrollida, kas Ligipääs on vahemikus mõni 148 00:09:03,300 --> 00:09:08,200 maja ja kõrvaldada kõik vajalikud reisijaid buss. 149 00:09:08,200 --> 00:09:11,020 Niisiis, kuidas me vaadata, kas me oleme vahemikus iga maja? 150 00:09:11,020 --> 00:09:16,630 Noh, veel kord, me kasutada shuttle.distance funktsioon, mis kulgeb 151 00:09:16,630 --> 00:09:20,990 laius-ja pikkuskraad punkti et me kontrollime vastu. 152 00:09:20,990 --> 00:09:22,730 >> Aga millised on need punktid? 153 00:09:22,730 --> 00:09:27,210 Noh, majade massiivi, kui see teile meenub aastal houses.js, salvestab 154 00:09:27,210 --> 00:09:32,790 laius-ja pikkuskraadid iga maja assotsiatiivne massiiv, kus iga 155 00:09:32,790 --> 00:09:35,980 indeks on nimi, mis maja. 156 00:09:35,980 --> 00:09:37,590 Seejärel eemaldada reisijatele - 157 00:09:37,590 --> 00:09:41,820 hästi ainult siis, kui me oleme nende erinevatest maja, et nad tahavad minna. 158 00:09:41,820 --> 00:09:46,380 Nii et taas, pea meeles, et reisijate salvestab maja, et iga reisija 159 00:09:46,380 --> 00:09:48,850 tahab minna. 160 00:09:48,850 --> 00:09:51,670 Kui nad on levialas oma maja, siis me kõrvaldame et 161 00:09:51,670 --> 00:09:57,200 reisijatel shuttle.seats ja komplekt oma seisukoha massiivi tühjaks. 162 00:09:57,200 --> 00:10:00,220 >> Nüüd räägime mõned lisafunktsioone mida saab rakendada 163 00:10:00,220 --> 00:10:02,690 CS50 Shuttle p-set. 164 00:10:02,690 --> 00:10:05,850 Seal punkti süsteemi, mille teil jälgida, kui palju 165 00:10:05,850 --> 00:10:07,520 juhib kasutaja. 166 00:10:07,520 --> 00:10:11,120 Sest lahkuvad reisijad edukalt, võivad nad saada punkte. 167 00:10:11,120 --> 00:10:15,100 Aga püüame lahkuvad reisijad kui seal ei ole ühtegi maja lähedal, 168 00:10:15,100 --> 00:10:16,980 Noh, nad saavad karistada selle eest. 169 00:10:16,980 --> 00:10:21,790 Nii et ehk soovite jälgida punkte globaalne muutuja. 170 00:10:21,790 --> 00:10:25,970 >> Saate rakendada ehk taimer, kus kasutaja on teatud summa 171 00:10:25,970 --> 00:10:29,800 aja kiirenemist ja tilk maha teatud arvu reisijaid. 172 00:10:29,800 --> 00:10:33,280 Võib-olla isegi integreerida see koos punktisüsteemi. 173 00:10:33,280 --> 00:10:39,970 Või saate muuta Chart selline, et reisijad on järjestatud vastavalt maja. 174 00:10:39,970 --> 00:10:45,250 Nii et ilmselt oleks omamoodi funktsiooni shuttle.seats. 175 00:10:45,250 --> 00:10:49,240 >> Saate rakendada sõidavad funktsiooni kus kui kasutaja sisestab Konami 176 00:10:49,240 --> 00:10:53,460 kood, siis shuttle liftid off maa ja buss saab sõita. 177 00:10:53,460 --> 00:10:58,890 Aga ohutu drop off, parim teha shuttle maanduda oma rattad 178 00:10:58,890 --> 00:11:00,700 esimesena maad. 179 00:11:00,700 --> 00:11:05,910 Võite rakendada teleportatsioon, kus te teete rippmenüüst 180 00:11:05,910 --> 00:11:08,380 hoonete index.html. 181 00:11:08,380 --> 00:11:12,270 Ja valida üks neist, kasutaja transporditakse 182 00:11:12,270 --> 00:11:14,220 et hoone ülikoolilinnak. 183 00:11:14,220 --> 00:11:16,760 OK, aga reisida läbi seinad mõnede 184 00:11:16,760 --> 00:11:19,290 hoonete teed seal. 185 00:11:19,290 --> 00:11:22,960 >> Saate muuta ka kiirust Ligipääs, võimaldades kasutajal suurendada 186 00:11:22,960 --> 00:11:25,490 või kiirust vähendama. 187 00:11:25,490 --> 00:11:28,840 Ehk soovid globaalne muutuja jälgida, kui palju kütust 188 00:11:28,840 --> 00:11:31,520 buss on, vähenedes see lähete mööda. 189 00:11:31,520 --> 00:11:35,860 Kui oled tabanud null, kuigi buss ei saa liikuda, kui olete 190 00:11:35,860 --> 00:11:40,610 tangitakse, ehk kasutades nuppu või isegi teha oma tankla. 191 00:11:40,610 --> 00:11:43,240 >> Aga see ei ole kindlasti mitte ammendavat loetelu. 192 00:11:43,240 --> 00:11:46,340 Tutvu spec täieliku Listi ehk ettepanekuid 193 00:11:46,340 --> 00:11:47,840 enda oma TF. 194 00:11:47,840 --> 00:11:48,950 Taevas on piir. 195 00:11:48,950 --> 00:11:53,110 See on sinu viimane CS50 p-set, nii nautige seda. 196 00:11:53,110 --> 00:11:56,360 See oli CS50 Shuttle. 197 00:11:56,360 --> 00:11:59,230 >> Ma pean ütlema, et see on olnud rõõm muutes need teile 198 00:11:59,230 --> 00:12:00,400 tootmise meeskond. 199 00:12:00,400 --> 00:12:04,330 Ja ma loodan, et olete nautida neid samuti. 200 00:12:04,330 --> 00:12:06,040 Minu nimi on Zamyla. 201 00:12:06,040 --> 00:12:08,310 Ja see oli CS50. 202 00:12:08,310 --> 00:12:16,363