[Música tocando] COLUMNA 1: Ben, aquí estamos nós, o último conxunto P no CS50. Felicitar-vos de chegara tan lonxe desde o seu primeiro Ola mundos e imprimir pirámides para Mario. Fixo unha web a semana pasada. E nós imos estar facendo outra esta semana, que permite que unidade en torno ao campus de Harvard, pegando ata os membros do equipo, e CS50 trae-los de volta á súa casas residenciais. Agora, a semana pasada traballamos en PHP, unha linguaxe do lado do servidor. Para este conxunto P, estamos quedando introducido para JavaScript, que é un linguaxe do lado do cliente. Entón, imos dar un ollo a algunhas das código de distribución que está indicado de por este conxunto P. No cartafol JavaScript, haberá ser unha morea de arquivos JavaScript. Hai buildings.js, que contén unha conxunto de edificios en torno Harvard campus, coa súa información e posición. Houses.js é unha matriz de Harvard vivendas residenciais, coa súa latitudes e lonxitudes. Passengers.js contén un variedade de pasaxeiros - os membros do equipo CS50 - que estará traendo de volta a súas casas residenciais. Math3D.js, que contén unha gran cantidade de funcións para facer o movemento. Se é matematicamente minded, logo Congratulo-me con vostede dar un ollo. Pero non ten que entender todo alí dentro. Shuttle.js, que trata sobre movemento do transbordador espacial. E index.html é a páxina de inicio, onde todo acontece, de feito, onde o usuario está interactuar coa web. Service.css é a folla de estilo CSS, que, en adición ao Twitter Biblioteca Bootstrap, controis como aspecto index.html. E despois tamén temos service.js, que contén funcións de servizo para o autobús. E aquí é onde vai estar recheo de algúns dos de dos. Agora imos dar un ollo a obxectos e arrays asociativos en JavaScript, que para todos os efectos, son intercambiábeis. Se eu quixese facer un obxecto unha variable chamado unha vara, eu declaralo lo. E dentro desas claves que eu faría especificar o núcleo é unicornio. A madeira é de cereixa. E a lonxitude é de 13. Agora eu tamén pode acceder aos valores de obxectos utilizando notación de matriz asociativa. Núcleo do índice Entón vara, podo definir que igual unicornio, ou comprobar que, se eu ter. Ou podo usar o operador punto. Madeira Wand punto é igual a cereixa, e así por diante, e así por diante. Entón ve que as matrices de asociación e obxectos en JavaScript van ser intercambiables e ganas vir en moi útil. Logo vemos un conxunto de edificios en buildings.js. Unha vez máis, unha serie de obxectos. Se eu quixese facer unha matriz dos mellores edificios no campus de Harvard, logo Quere facelo do seguinte xeito. Usando este obxecto notación, onde Eu gardar a raíz, o nome, enderezo, latitude, lonxitude e para cada único obxecto edificio. Imos axiña falar variables en JavaScript. Como PHP, variables JavaScript son feblemente ou vagamente ingresaran. Para crear unha variable local, prefixar nome da variable co V-A-R var. Agora en JavaScript, as funcións serán limitar o ámbito das variables. Entón se ten unha variable local dentro unha función, entón outras funcións Non pode acceder a ela. Pero a diferenza de C, loops e condicións non limitar o ámbito de aplicación dunha variable. Así, mesmo se declara-la dentro dun condición, toda a función ter acceso a el. Agora sen var, a variable será global. Entón, se acaba de declarar o nome e asignar un valor, entón esa variable será unha variable global en JavaScript. Agora en casas, temos un asociativa array de obxectos do tipo casa, onde Cada casa é só unha latitude e unha lonxitude. Entón temos os pasaxeiros matriz, que é unha matriz do tipo de obxecto de pasaxeiros. Así, cada pasaxeiro ten un nome de usuario, un nome e unha casa. Repare que eu estou a ver o tipo pasaxeiros, o que significa realmente que cada obxecto ten a mesmo par de valor da chave. Así, cada obxecto do tipo pasaxeiro ten un nome de usuario, un nome e unha casa. Entón, o que necesitamos facer para o conxunto P? Así, debemos permitir que os usuarios escollan os membros do equipo, para amosar todas os membros do equipo que están actualmente en noso servizo de transporte, e deixalos fóra. E entón nós tamén imos falar adicional recursos que poden ser aplicadas para o conxunto P de transporte. Pero imos falar sobre o captador primeiro. Os rostros dos empregados CS50 ser plantas por todo o campus, onde cada cara é implementado como unha marca local na terra 3D, e como un marcador no mapa 2D. Así, cando o usuario fai clic no captador botón, queremos engadir nos arredores pasaxeiros para o transporte. E queremos tamén eliminar o seu sitio marca do mundo, e elimina o seu marcador dende o mapa, o que indica que están no noso autobús agora. Entón, como podemos detectar se os pasaxeiros están dentro do alcance do noso transporte? Ben, a distancia da función - así a distancia de puntos de transporte, pasando a latitude ea lonxitude, ganas calcular a distancia a partir do actual posición do transporte para o apuntar que se especifica con que dada latitude e lonxitude. Así, pode usar isto para calcular a distancia do transporte para o pasaxeiros. Pero como vostede sabe onde os pasaxeiros están? Ben, é aí onde nós imos ter que editar a función de recheo. Cubrir todas as partes dos membros do equipo e os pasaxeiros para o mundo, e no mapa, pero non fai gardar a súa localización. Entón quizais pode almacenar as súas poñer marcas e etiquetas nalgúns matriz global. Agora xa existe unha matriz global gardar información de pasaxeiros. A matriz almacena pasaxeiros cada nome do pasaxeiro ea súa casa. Entón, talvez pode engadir algúns parámetros alí para os obxectos de pasaxeiros. Para axudarnos a detectar todos os pasaxeiros dentro do alcance do noso servizo de transporte, imos loop través de todos os pasaxeiros na matriz de pasaxeiros. Un loop en JavaScript pode parecer algo así, moi semellante ao aqueles loop for en C. Ou podemos usar un alternativa para a estrutura de loop. Para var i na matriz, onde eu aínda será o índice. Pero non precisa especificar a lonxitude da matriz de punto condición, e eu plus plus. Cada situación do pasaxeiro é dada pola súa marca lugar. Pero a marca non é o lugar latitude e lonxitude. Temos que acceder a estes parámetros por recibindo a xeometría, usando get xeometría na marca lugar. E, a continuación, xa que temos a xeometría, obtención ou a latitude ou a lonxitude, usando estas funcións. Polo tanto, agora sabemos como detectar se pasaxeiros están dentro alcance da nosa nave. Unha vez que temos os pasaxeiros, nós imos Quere engadir todos os pasaxeiros que son dentro dese rango. Queremos facer que eles hop on, e ter un asento na nosa traslado, pero só si temos espazo suficiente para eles. A matriz de transporte asentos DOT indicar se asentos están baleiros, ou quen está nese lugar. Polo tanto, se un banco está baleira, que a base será nulo. Entón iterado sobre a matriz asentos, verificación de lugares baleiros, almacenando pasaxeiros para os asentos ata que non ten máis asentos baleiros. E, por desgraza, as outros pasaxeiros terá que esperar ao próxima vez que o autobús vén por aí. Así que chegar ao bus, nós imos querer para eliminar a súa marca local, que é a súa imaxe no mundo 3D. Se eu quixese eliminar un lugar marca p, entón quere obter todos os recursos da miña terra, dende o Google Earth, e elimine aquel lugar específico marcar mediante a función removeChild. Entón, finalmente, imos eliminar o marcador, a icona no mapa 2D para calquera pasaxeiros que están pegando. Para eliminar un marcador, m, entón eu vou basta con executar m dot setMap nulo. Faino a todos os pasaxeiros dentro do seu alcance, e rematou Pickup.