ZAMYLA CHAN: Nu, jen ni, la lasta p-aro en CS50. Gratulas vin de devi veni ĝis nun ekde via unua Saluton Mondoj kaj Presado Supren Piramidoj por Mario. Vi faris retejon pasintsemajne. Kaj ni tuj devas fari alian tiun semajnon, kiu permesas al vi drive ĉirkaŭ la Harvard kampuso, pluki supren CS50 stabanojn kaj portante ilin al iliaj residenciales domoj. Nun, pasintsemajne ni laboris en PHP, servanto flanko lingvo. Por ĉi p-aro, ni ekuzi enkondukis al JavaScript, kiu estas kliento flanko lingvo. Do ni rigardu kelkajn el la dissendo kodo kiu estas provizita al vin pro ĉi p-aro. En la Javascript dosierujo, okazos esti faskon da JavaScript-dosierojn. Ekzistas buildings.js, kiu enhavas tabelo de konstruaĵoj ĉirkaŭ Harvard kampuso kun iliaj informoj kaj pozicio. Houses.js estas tabelo de Harvard residenciales domoj kun siaj latitudoj kaj longitudoj. Passengers.js enhavas tabelo de pasaĝeroj, la CS50 stabanojn ke vi estos revenigo al iliaj domoj residenciales. Math3D.js, kiu enhavas multajn funkcioj por fari kun la movado. Se vi estas matematike intencis, tiam Mi bonvenigas vin rigardu. Sed vi ne bezonas kompreni ĉio en ekzistas. Shuttle.js, kiu traktas la Shuttle movado. Kaj index.html estas la hejmpaĝo kie ĉio okazas, vere, kie la uzanto interagas kun la ejo. Service.css estas la CSS-stilon folion, kiu aldone al la Twitter Bootstrap Biblioteko, komandoj kiom index.html rigardojn. Kaj tiam ni havas ankaŭ service.js, kiuj enhavas servo funkcioj por la pramo. Kaj ĉi tie estas kie vi estas iranta esti enspacanta en kelkaj el la por-do-aj jaroj. Nun ni rigardu celoj kaj asocieca arrays en JavaScript, kiuj, por ĉiuj celoj, estas interŝanĝeblaj. Se mi volis fari objekton variablo nomata kiel sceptron, mi estus deklari ĝin. Kaj ene de tiuj buklaj krampoj, mi volus specifi, la kerno estas bubalo, la ligno Estas ĉerizo, kaj gxia longo estas 13. Nun, mi povas ankaŭ aliri valoroj de objektoj uzante asocieca tabelo skribmaniero. Do sceptron indekso kerno, mi povas agordi ke egalas unukornulo, aŭ kontroli, ke se mi bezonas. Aŭ mi povas uzi la skalara operatoro wand.wood egalas ĉerizo, kaj tiel plu kaj tiel plu. Do vi vidas, ke asociaj tabeloj kaj objektoj en JavaScript tuj estos interŝanĝeblaj, kaj volo veni en tute oportuna. Poste ni vidos tabelo de konstruaĵoj en buildings.js, denove, tabelo de objektoj. Se mi volis fari tabelo de la plej bonaj konstruaĵoj en Harvard universitato, tiam Mi farus ĝin kiel sekvas. Uzante ĉi objekto skribmaniero, kie Mi stoki la radiko, nomo, adreso, latitudo kaj longitudo por ĉiu sola konstruaĵo objekto. Ni rapide paroli pri variabloj en JavaScript. Kiel PHP, JavaScript variabloj estas malforte aŭ lakse tajpita. Krei lokan variablon, vi prefikso la nomo de la variablo kun V-A-R, var. Nun, en JavaScript, funkcioj volo limigi la atingon de variabloj. Do se vi havas lokan variablon ene funkcio, tiam aliaj funkcioj ne povas aliri gxin. Sed kontraste C, maŝojn kaj kondiĉoj ne limigi la atingon de variablo. Do eĉ se vi divenos gxin interne de kondiĉo, la tuta funkcio havas aliron al gxi. Nun, sen var, la variablo estos tutmonda. Do, se vi simple deklarus la nomon kaj atribui valoron, do, ke variablo Estos globala variablo en JavaScript. Nun, en domojn, ni havas asocieca tabelo de gastiganto tipo celoj, kie cxiu domo estas nur latitudo kaj longitudo. Tiam ni havas la pasaĝeroj tabelo, kiu estas tabelo de objekto tipo pasaĝero. Do ĉiu pasaĝero havas uzanto nomo, nomo, kaj domon. Rimarku, ke mi estas diranta de tipo pasaĝero, kiu vere simple signifas ke ĉiu objekto havas la sama klavo valoro paroj. Do ĉiu objekto de tipo pasaĝero havas nomo de uzanto, nomo, kaj domon. Do kion ni bezonas faru por la p-aro? Nu, ni bezonas por permesi al la uzantoj pick supren stabanojn montri ĉiujn la stabanojn, kiuj estas nuntempe en nia pramo, kaj por faligi ilin. Kaj tiam ni devos ankaŭ paroli pri ekstra trajtoj kiuj povas esti efektivigita por la Shuttle p-aro. Sed ni parolu pri briketoj unue. La vizaĝoj de CS50 personaro estis plantita ĉie kampuso, kie ĉiu vizaĝo implementado kiel loko markon pri la 3D Tero, kaj kiel markilo en la 2D mapo. Do kiam la uzanto alklakas la Pickup butono, ni volas aldoni proksima pasaĝeroj al la pramo. Kaj ni ankaŭ volas forigi ilian lokon marki de la mondo kaj forigu ilian markilo de la mapo, indikante ke ili estas en nia pramo nun. Do kiel fari ni detekti se pasaĝeroj estas la atingo de nia pramo? Nu, la funkcio distanco, tiel shuttle.distance, pasante en la latitudo kaj longitudo, estos kalkuli la distancon de la aktuala pozicio de la pramo al la punkto, ke vi specifas kun tiu donita latitudo kaj longitudo. Do vi povas uzi tion por kalkuli la distanco de la pramo al la pasaĝeroj. Sed kiel vi scias kie la pasaĝeroj estas? Nu, tio estas kie ni devos redaktu la popoli funkcio. Popoli lokoj ĉiuj stabanojn en la pasaĝeroj en la mondon kaj en la mapo, sed ne stoki ilia situo. Do eble vi povas stoki iliaj meti kadroj kaj markiloj en iu tutmonda tabelo. Nu, tie jam estas tutmonda tabelo stokante informoj el pasaĝeroj. La pasaĝeroj tabelo tendencas ĉiu pasaĝero nomo kaj ilia domo. Do eble vi povas aldoni kelkajn parametroj tie por la pasaĝero celoj. Por helpi nin detekti ĉiuj la pasaĝeroj atingo de nia pramo, ni buklo tra ĉiuj la pasaĝeroj en la pasaĝeroj tabelo. A por buklo en JavaScript povus rigardi io tiamaniere, tre similaj al tiujn por masxojn en C. Aŭ ni povas uzi alternativo por buklo strukturo, por var i en tabelo, kie mi ankoraŭ estos la indekso, sed vi ne bezonas specifi la array.length kondiĉo kaj mi + +. Ĉiu pasaĝero La situo estas donita per ilia loko markon. Sed la loko markon ne estas la latitudo kaj longitudo. Ni devas aliri tiujn parametrojn per atingi la geometrio, uzante get geometrio sur la loko, marko, kaj tiam iam ni havos la geometrio, atingante ĉu la latitudo aŭ la longitudo uzante tiujn funkciojn. Do nun ni scias kiel detekti cxu pasaĝeroj estas ene gamo de nia pramo. Iam ni havis tiujn pasaĝeroj, ni volas aldoni ajnan pasaĝerojn, kiuj estas ene de tiu gamo. Ni volas ilin permesas hop en kaj prenu sidlokon sur nia pramo, sed nur se ni havas sufiĉan spacon al ili. La shuttle.seats tabelo indikos ĉu sidejoj estas malplena, aŭ kiuj kuŝas en tiu seĝo. Do se sidlokon estas malplena, tiam ke segxo estos nula. Do ankaŭ persisti super la seĝojn tabelo, kontrolanta por malplenaj benkoj, stokante pasaĝeroj en tiuj seĝoj ĝis vi ne havas plu malplenaj seĝoj. Kaj bedaŭrinde, neniu alia pasaĝeroj devos atendi la venontfoje la pramo venas malsupren. Iam ili ricevas en la pramo, ni volas por forigi ilian lokon markon, kiu estas ilia foto en la 3D mondo. Se mi volis forigi lokon markon p, tiam mi akirus ĉiuj el la trajtoj el mia tero, de la Google Earth, kaj tiam forigi tiu specifa loko marki uzanta la removeChild funkcio. Tiam laste, ni forigu la markilo, la ikono sur la 2D mapo, por iu ajn pasaĝero ke ni reprenis. Por forigi markilo m, tiam Mi timige nur ekzekuti m.setMap nula. Faru tion por ajna pasaĝeroj ene gamo, kaj vi jam finis briketoj. La abako funkcio devus vidigi la tutan de la pasaĝeroj, kiuj estas en via pramo, kaj malplenaj segxo se malplenaj. Do abako devas persisti super shuttle.seats, montranta la pasaĝero informon por ĉiu indekso, kaj malplena sidloko se tiu indekso estas nula. Nun se HTML teksto estas metitaj ene de Javascript variablo, do per uzo document.getElementByID, abako tedaĵo redaktu la interna HTML de tiu donita elemento atribuante la HTML-teksto al la document.getElementByID ena HTML variablo. Kiam la uzantoj klaku la Guto Off butono en index.html, gxi vokos la dropoff funkcio. Kaj ĝi estas nia tasko apliki tion. En dropoff, ni volas forigi ajnan pasaĝeroj el la pramo nur se ni estas en rango de ilia destino, ilia residenciales domo. Do dropoff devos kontroli, ĉu la pramo estas en rango de iu el la domojn, kaj forigi ajnan bezonataj pasaĝeroj el la pramo. Do kiel fari ni kontrolu ĉu ni estas en gamo de ajna domoj? Nu, plue, ni devos fari uzon de la shuttle.distance funkcion, pasante en la latitudo kaj longitudo de la punkto kiuj ni estas kontrolanta kontraŭ. Sed kio estas tiuj punktoj? Nu, la domoj tabelo, se vi memoras en houses.js, stokas la latitudo kaj longitudo de ĉiu domo en asocieca tabelo, kie ĉiu indekso estas la nomo de tiu domo. Tiam forigi pasaĝeroj - bone, nur se ni estos en rango de ilia domo, kiun ili volas iri. Do denove, memoru, ke la pasaĝeroj stokas la domo, kiun ĉiu pasaĝero volas iri al. Se ili estas atingo de siaj domo, tiam ni devos forigi ke pasaĝero el shuttle.seats kaj aro lia pozicio en la tabelo por nula. Nun ni parolu pri iuj ekstrajn funkciojn kiu povas esti realigita en la CS50 Pramo p-aro. Tie estas punkto sistemo per kiu vi konservi trako de kiom antaŭ uzanto havas. Por ekdormis pasaĝeroj sukcese, ili povas akiri punktojn. Sed por provi faligi ekstere pasaĝeroj kie ne estas iu ajn domo proksima, bone, ili povas akiri punita pro tio. Do eble vi volas konservi spuron de La punktoj en globala variablo. Vi povas apliki eble timer, kie La uzanto havas certan kvanton de tempon por repreni kaj malfiksi suferintojn iu numero de pasaĝeroj. Eble eĉ integri tiun kun la punkto sistemo. Aux vi povas redakti Chart tiaj ke pasaĝeroj estas ordo por domo. Por ke probable estus speco funkcii al shuttle.seats. Vi povas apliki fluganta trajto, kie, se la uzulo enigas la Konami kodo, tiam la pramo levas super la teron kaj la pramo povas flugi. Sed por sekura guto for, pli bone fari la pramo surteriĝi lia radoj sur la mueladis unue. Vi povas ankaŭ apliki teletransportación, kie vi faras falmenuo de konstruaĵoj en index.html. Kaj selektante unu el tiuj, la uzanto estos transportitaj al ke konstruaĵo surterene. OK, kvankam, vojaĝi tra la muroj de iu konstruaĵoj sur via vojo. Vi povas ankaŭ ŝanĝi la rapidecon de la pramo, permesante al la uzanto por pliigi aŭ malpliigi la rapidon. Eble vi volas globala variablo por sekvigi kiom brulaĵon la pramo havas, malkreskanta kiel vi iru kune. Unufoje vi batis nulo, kvankam, la pramo ne povos movi krom se vi havas reprovizis, eble uzante butonon, aŭ eĉ fari viajn proprajn benzinstacio. Sed tio certe ne estas ĝisfunda listo. Kontrolu la specifo por plena listo, aŭ eble proponi viajn proprajn al via TF. La ĉielo estas la limo. Ĉi tiu estas via lasta CS50 p-aro, tiom amuziĝi per ĝi. Tio estis CS50 Shuttle. Mi devas diri, jam pasis plezuro farante tiujn por vi kun la produktado teamo. Kaj mi esperas, ke vi havas ĝui ilin, tiel. Mia nomo estas Zamyla. Kaj tio estis CS50.