[Musikgengivelse] SPEAKER 1: Nå, her er vi, den sidste P-sæt i CS50. Lykønsker jer fra at have kommet så langt, siden din første goddag verdener og udskrive pyramider til Mario. Du har lavet en hjemmeside i sidste uge. Og vi kommer til at gøre en anden i denne uge, en, der giver dig mulighed for at køre rundt i Harvard campus, plukke up medarbejdere CS50 og bringe dem tilbage til deres beboelseshuse. Nu i sidste uge arbejdede vi i PHP, en server side sprog. For denne P-sæt, vi får introduceret til JavaScript, som er en klientsiden sprog. Så lad os tage et kig på nogle af de fordeling kode, der er leveret til dig til dette P-sæt. I mappen JavaScript, vil der være en flok JavaScript-filer. Der er buildings.js, som indeholder en vifte af bygninger omkring Harvard campus, med deres oplysninger og position. Houses.js er en vifte af Harvard beboelseshuse, med deres længde-og breddegrader. Passengers.js indeholder en vifte af passagerer - medarbejderne CS50 - at du vil være at bringe tilbage til deres bolig huse. Math3D.js, der indeholder en masse af funktioner at gøre med bevægelsen. Hvis du er matematisk minded, så jeg glæder du tage et kig. Men du behøver ikke at forstå alt derinde. Shuttle.js, der beskæftiger sig med rumfærgens bevægelse. Og index.html er den hjemmeside, hvor alting sker, virkelig, hvor brugeren interagerer med webstedet. Service.css er CSS style sheet, , som foruden til kvidre Bootstrap bibliotek, kontrol hvordan index.html udseende. Og så har vi også service.js, som indeholder servicefunktioner for rumfærgen. Og her er, hvor du kommer til at være udfylde nogle af de til dos. Lad os nu tage et kig på objekter og associative arrays i JavaScript, der for alle henseender er indbyrdes udskiftelige. Hvis jeg ønskede at lave et objekt en variabel kaldes en tryllestav, ville jeg erklære den. Og inden for disse krøllede parenteser vil jeg specificere kernen er enhjørning. Træet er kirsebær. Og længden er 13. Nu kan jeg også få adgang til værdier af objekter ved hjælp associative array notation. Så wand indeks kerne, kan jeg indstille der svarer til enhjørning, eller kontrollere, at hvis jeg har brug for. Eller jeg kan bruge dot operatør. Wand dot træ lig kirsebær, og så videre, og så videre. Så du kan se, at associative arrays og objekter i JavaScript vil være udskiftelige, og vilje komme i ganske handy. Så ser vi en vifte af bygninger i buildings.js. Igen, en række af objekter. Hvis jeg ønskede at gøre en række af de bedste bygninger på Harvard campus, derefter Jeg ville gøre det som følger. Ved hjælp af dette objekt notation, hvor Jeg gemmer roden, navn, adresse, breddegrad og længdegrad for hver enkelt bygning objekt. Lad os hurtigt tale om variable i JavaScript. Som PHP, JavaScript variabler er svagt eller løst skrevet. Hvis du vil oprette en lokal variabel, du præfiks variabelnavnet med V-A-R, var. Nu i JavaScript, funktioner begrænse omfanget af variabler. Så hvis du har en lokal variabel i en funktion, så andre funktioner kan ikke få adgang til den. Men i modsætning til C, loops og betingelser ikke begrænse omfanget af en variabel. Så selv hvis du erklære den inde i en tilstand, hele funktionen vil har adgang til det. Nu uden var variablen vil være global. Så hvis du bare erklære navn og tildele en værdi, så er variabel vil være en global variabel i JavaScript. Nu i huse, har vi en associativ vifte af hus tekstobjekter, hvor hvert hus er blot en breddegrad og en længde. Så har vi passagererne array, som er en matrix af objekttypen passager. Så hver passager har et brugernavn, et navn, og et hus. Bemærk, at jeg ser af type passager, som virkelig bare betyder at hvert objekt har samme nøgle værdi par. Så hver objekt af typen passageren har et brugernavn, et navn og et hus. Så hvad skal vi gøre for P sæt? Nå, vi er nødt til at tillade brugere at plukke up ansatte at vise alle de ansatte, der i øjeblikket vores bus til at slippe dem ud. Og så vil vi også tale om ekstra funktioner, der kan gennemføres for shuttle P sæt. Men lad os tale om afhentning først. Ansigter CS50 personale har været plantet over hele campus, hvor hver ansigt er implementeret som et sted mærke på 3D jorden, og som et markør på 2D-kort. Så når brugeren klikker på pickup knap, vi ønsker at tilføje nærheden passagerer til rumfærgen. Og vi ønsker også at fjerne deres plads markere fra verden, og fjerne deres markør på kortet, som angiver, at de er i vores shuttle nu. Så hvordan kan vi opdage, hvis passagerer er inden for rækkevidde af vores shuttle? Nå, den funktion distance - så shuttle dot afstand, passerer længde-og breddegrad, vil beregne afstanden fra den aktuelle position af rumfærgen til peger som du angiver med at given bredde og længde. Så du kan bruge dette til at beregne afstand fra rumfærgen til passagerer. Men hvordan kan du vide, hvor passagererne er? Nå, det er, hvor vi bliver nødt til at redigere populate funktionen. Befolke steder alle de ansatte og passagerer ind i verden, og ind på kortet, men ikke gemme deres placering. Så måske du kan gemme deres anbringe mærker og markører i nogle globale array. Allerede nu er der en global matrix lagring af oplysninger fra passagererne. Passagererne array-butikker hver passagerens navn og deres hus. Så måske du kan tilføje nogle få parametre der til de passager objekter. For at hjælpe os med at opdage alle passagerer inden for rækkevidde af vores shuttle, lad os løkke gennem alle de passagerer i passagerer array. En for-løkke i JavaScript kan se noget som dette, meget lig dem, for løkke i C. Eller vi kan bruge en alternativ til loop-struktur. For var jeg i array, hvor jeg vil stadig være indekset. Men du behøver ikke at specificere array dot længde tilstand, og jeg plus plus. Hver passager placering er afgivet deres plads mærke. Men stedet mærke er ikke det breddegrad og længdegrad. Vi er nødt til at få adgang til disse parametre ved få geometri, ved hjælp af get geometri på stedmarkør. Og så når vi har den geometri, få enten bredde eller længdegrad, ved hjælp af disse funktioner. Så nu ved vi, hvordan man kan afsløre, om passagerer er inden Rækken af ​​vores shuttle. Når vi har disse passagerer, vi får ønsker at tilføje passagerer, der er inden for dette område. Vi ønsker at give dem mulighed for at hoppe på, og tage en plads på vores shuttle, men kun hvis vi har plads nok til dem. Rumfærgen dot sæder array angive, om sæderne er tomme, eller der er i det sæde. Så hvis et sæde er tomt, så at sædet vil være nul. Så gentage over sæderne array, kontrol for tomme sæder, lagring passagerer ind disse sæder, indtil du ikke har nogen flere tomme sæder. Og desværre alle andre passagerer bliver nødt til at vente på næste gang rumfærgen kommer rundt. Når de får på rumfærgen, vi ønsker at fjerne deres sted mærke, som er deres foto i 3D-verden. Hvis jeg ønskede at fjerne et sted mark p, så ville jeg få alle de funktioner, fra min jord, fra Google Earth og derefter fjerne det specifikke sted markere bruge removeChild funktionen. Så endelig, lad os fjerne markeringen ikonet på 2D-kort for enhver passager, som vi er picking up. For at fjerne en markør, m, så vil jeg bare udføre m dot setMap null. Gør dette for passagerer inden for rækkevidde, og du er færdig med pickup.