ZAMYLA CHAN: Nah, di sini kita, p-set terakhir dalam CS50. Ucapkan tahniah kepada diri kamu daripada mempunyai datang setakat ini sejak Hello pertama anda Alam dan Percetakan Up Piramid untuk Mario. Anda membuat laman web minggu lepas. Dan kita akan membuat satu sama lain minggu ini, salah satu yang membolehkan anda untuk memandu di sekitar kampus Harvard, mengambil sehingga kakitangan CS50 dan membawa mereka kembali kepada mereka rumah-rumah kediaman. Sekarang, minggu lepas kami bekerja dalam PHP, bahasa sebelah pelayan. Untuk ini p-set, kita mendapat diperkenalkan untuk JavaScript, yang merupakan pelanggan bahasa sampingan. Jadi mari kita lihat beberapa daripada kod pengedaran yang yang diberikan kepada anda untuk ini p-set. Dalam folder JavaScript, ada akan menjadi sekumpulan fail JavaScript. Ada buildings.js, yang mengandungi bangunan-bangunan di sekitar Harvard kampus dengan maklumat mereka dan kedudukan. Houses.js adalah pelbagai Harvard rumah-rumah kediaman dengan mereka latitud dan longitud. Passengers.js mengandungi pelbagai penumpang, ahli-ahli kakitangan CS50 bahawa anda akan membawa kembali kepada rumah-rumah kediaman mereka. Math3D.js, yang mengandungi banyak fungsi kaitan dengan pergerakan itu. Jika anda berfikiran matematik, maka Saya mengalu-alukan anda untuk membaca. Tetapi anda tidak perlu memahami segala-galanya di sana. Shuttle.js, yang memperkatakan pergerakan pesawat itu. Dan index.html adalah halaman rumah di mana semua yang berlaku, benar-benar, di mana pengguna berinteraksi dengan laman web ini. Service.css adalah lembaran gaya CSS, yang sebagai tambahan kepada Twitter Perpustakaan Bootstrap, kawalan bagaimana kelihatan index.html. Dan kemudian kita juga mempunyai service.js, yang mengandungi fungsi-fungsi perkhidmatan untuk Shuttle tersebut. Dan di sini di mana anda akan menjadi mengisi beberapa tugasan ini. Sekarang mari kita lihat pada objek dan array bersekutu dalam JavaScript, yang, untuk tujuan dan maksud, boleh ditukar. Jika saya mahu membuat objek pembolehubah dipanggil tongkat, saya akan mengisytiharkan ia. Dan di dalam orang-orang pendakap kerinting, saya akan nyatakan, teras adalah Unicorn, kayu ceri, dan panjang ialah 13. Sekarang, saya juga boleh mengakses nilai-nilai objek menggunakan notasi array bersekutu. Jadi tongkat teras indeks, saya boleh menetapkan yang sama dengan Unicorn, atau pastikan jika saya perlukan. Atau saya boleh menggunakan operator titik wand.wood sama ceri, dan sebagainya dan sebagainya. Jadi anda lihat bahawa array bersekutu dan objek dalam JavaScript akan menjadi ditukar, dan kehendak datang dalam agak berguna. Kemudian kami melihat bangunan-bangunan dalam buildings.js, sekali lagi, pelbagai objek. Jika saya mahu membuat pelbagai terbaik bangunan di kampus Harvard, maka Saya akan membuat ia seperti berikut. Menggunakan notasi objek ini, di mana Saya menyimpan akar, nama, alamat, latitud, longitud dan bagi tiap-tiap objek bangunan. Mari cepat bercakap tentang pembolehubah dalam JavaScript. Seperti PHP, JavaScript pembolehubah adalah lemah atau longgar ditaip. Untuk membuat pembolehubah tempatan, anda awalan nama ubah dengan V-A-R, var. Sekarang, dalam JavaScript, fungsi akan menghadkan skop pembolehubah. Jadi jika anda mempunyai pembolehubah tempatan dalam fungsi, maka fungsi-fungsi lain tidak boleh mengaksesnya. Tetapi tidak seperti C, gelung dan syarat yang tidak melakukan menghadkan skop pembolehubah. Jadi, walaupun anda mengisytiharkan ia di dalam sebuah keadaan, seluruh fungsi akan mempunyai akses kepadanya. Kini, tanpa var, pembolehubah akan global. Jadi jika anda hanya mengisytiharkan nama dan menetapkan nilai, maka pemboleh ubah yang akan berubah-ubah global dalam JavaScript. Sekarang, dalam rumah, kami mempunyai sebuah bersekutu pelbagai objek jenis tuan rumah, di mana setiap rumah hanya latitud yang dan longitud yang. Kemudian kita mempunyai penumpang pelbagai, yang merupakan satu pameran jenis objek penumpang. Jadi setiap penumpang mempunyai pengguna nama, nama, dan sebuah rumah. Perhatikan bahawa saya katakan jenis penumpang, yang benar-benar hanya bermakna bahawa setiap objek mempunyai pasangan nilai utama sama. Jadi setiap objek jenis penumpang mempunyai nama pengguna, nama, dan sebuah rumah. Jadi, apa yang kita perlu lakukan untuk p-set? Nah, kita perlu untuk membolehkan pengguna untuk memilih sehingga ahli-ahli kakitangan, untuk memaparkan semua ahli-ahli kakitangan yang kini ulang-alik kami, dan untuk menggugurkan mereka di luar. Dan maka kita juga akan bercakap mengenai tambahan ciri-ciri yang boleh dilaksanakan untuk Shuttle p-set. Tetapi mari kita bercakap tentang pikap pertama. Wajah-wajah kakitangan CS50 telah ditanam di seluruh kampus, di mana setiap muka dilaksanakan sebagai tanda tempat di Bumi 3D, dan sebagai penanda di peta 2D. Oleh itu, apabila pengguna klik Pikap yang butang, kita mahu menambah berdekatan penumpang untuk ulang-alik. Dan kita juga mahu mengeluarkan tempat mereka menandakan dari dunia dan mengeluarkan mereka penanda dari peta, yang menunjukkan bahawa mereka dalam kapal kita sekarang. Jadi bagaimana kita mengesan jika penumpang berada dalam liputan perkhidmatan ulang-alik kita? Nah, jarak majlis itu, jadi shuttle.distance, lulus dalam latitud dan longitud, akan mengira jarak dari kedudukan semasa ulang-alik ke titik yang anda tentukan paras diberikan latitud dan longitud. Jadi, anda boleh menggunakan ini untuk mengira jarak dari ulang-alik ke penumpang. Tetapi bagaimana anda tahu di mana penumpang adalah? Nah, itu di mana kami akan perlu mengedit fungsi mengisi. Mengisi tempat semua anggota kakitangan penumpang ke dalam dunia dan ke dalam peta, tetapi tidak menyimpan lokasi mereka. Jadi mungkin anda boleh menyimpan mereka meletakkan tanda dan penanda di beberapa pelbagai global. Kini, terdapat sudah adalah pelbagai global menyimpan maklumat daripada penumpang. Kedai-kedai pelbagai penumpang setiap nama penumpang dan rumah mereka. Jadi mungkin anda boleh menambah beberapa parameter ada kepada objek penumpang. Untuk membantu kami mengesan semua penumpang dalam jarak kami ulang-alik, gelung yang disewakan melalui semua penumpang dalam pelbagai penumpang. A untuk gelung dalam JavaScript mungkin kelihatan sesuatu seperti ini, hampir sama dengan mereka untuk gelung dalam C. Atau kita boleh menggunakan alternatif untuk struktur gelung, untuk var i dalam array, di mana i masih indeks, tetapi anda tidak perlu nyatakan array.length yang keadaan dan i + +. Lokasi setiap penumpang adalah diberikan oleh tanda tempat mereka. Tetapi tanda tempat itu tidak di latitud dan longitud. Kita perlu mengakses mereka parameter oleh mendapatkan geometri, menggunakan get geometri pada tanda tempat, dan kemudian sebaik sahaja kami mempunyai geometri, mendapatkan sama ada latitud atau longitud menggunakan fungsi-fungsi itu. Jadi sekarang kita tahu bagaimana untuk mengesan sama ada penumpang berada dalam pelbagai perkhidmatan ulang-alik kami. Apabila kita mempunyai orang-orang penumpang, kita akan mahu menambah mana-mana penumpang yang dalam julat itu. Kami mahu membenarkan mereka untuk naik dan mengambil tempat duduk dalam pengangkutan ulang-alik kami, tetapi hanya jika kita mempunyai ruang yang cukup kepada mereka. Yang shuttle.seats array akan menunjukkan sama ada tempat duduk kosong, atau yang dalam tempat itu. Jadi, jika kerusi yang kosong, maka tempat duduk yang akan batal. Jadi melelar lebih pelbagai tempat duduk, memeriksa tempat duduk kosong, menyimpan penumpang ke kerusi-kerusi sehingga anda tidak mempunyai apa-apa kerusi lebih kosong. Dan malangnya, mana-mana penumpang lain perlu menunggu lain kali ulang-alik datang ke bawah. Sebaik sahaja mereka mendapatkan di ulang-alik, kita akan mahu untuk membuang tanda tempat mereka, yang adalah gambar mereka di dunia 3D. Jika saya mahu membuang tanda tempat p, maka saya akan mendapat semua ciri-ciri dari Bumi saya, dari Google Earth, dan kemudian keluarkan bahawa tempat tertentu menandakan menggunakan fungsi removeChild itu. Kemudian akhir sekali, mari kita membuang penanda, ikon pada peta 2D, bagi apa-apa penumpang bahawa kita meningkat. Untuk mengeluarkan penanda m, maka saya akan hanya melaksanakan m.setMap null. Adakah ini untuk mana-mana penumpang dalam liputan, dan anda selesai pikap. Fungsi Carta harus memaparkan semua penumpang yang berada dalam anda ulang-alik, dan tempat duduk kosong jika kosong. Jadi carta perlu melelar lebih shuttle.seats, memaparkan maklumat penumpang bagi setiap indeks, dan tempat duduk kosong jika indeks yang null. Sekarang jika teks HTML diletakkan di dalam sebuah JavaScript berubah-ubah, maka dengan menggunakan document.getElementByID, carta boleh mengedit HTML dalaman yang diberikan elemen dengan memperuntukkan HTML teks kepada document.getElementByID dalaman HTML berubah-ubah. Apabila pengguna klik butang Drop Off dalam index.html, ia akan menelefon fungsi dipulangkan. Dan ia adalah tugas kita untuk melaksanakan itu. Dalam dipulangkan, kami akan mahu mengeluarkan apa-apa penumpang dari perkhidmatan ulang-alik hanya jika kita berada dalam pelbagai destinasi mereka, rumah kediaman mereka. Jadi dipulangkan perlu menyemak sama ada ulang-alik adalah dalam lingkungan mana-mana rumah, dan mengeluarkan apa-apa yang diperlukan penumpang dari ulang-alik. Jadi bagaimana kita memeriksa jika kita dalam pelbagai mana-mana rumah? Nah, sekali lagi, kami akan menggunakan shuttle.distance fungsi, lulus dalam latitud dan longitud yang bahawa kita memeriksa menentang. Tetapi apa yang adalah mereka mata? Nah, pelbagai rumah-rumah itu, jika anda ingat dalam houses.js, menyimpan latitud dan longitud bagi setiap rumah di pelbagai bersekutu, di mana setiap index adalah nama rumah itu. Kemudian untuk mengeluarkan penumpang - dengan baik, hanya jika kita berada dalam lingkungan mereka rumah yang mereka mahu pergi ke. Jadi sekali lagi, ingat bahawa penumpang menyimpan rumah yang setiap penumpang mahu pergi ke. Jika mereka berada dalam liputan mereka rumah, maka kami akan memadam yang penumpang dari shuttle.seats dan set kedudukan mereka dalam array untuk nol. Sekarang mari kita bercakap tentang beberapa ciri-ciri tambahan yang boleh dilaksanakan di yang CS50 Shuttle p-set. Ada sistem mata di mana anda menjejaki berapa banyak menunjukkan pengguna mempunyai. Untuk menjatuhkan luar penumpang berjaya, mereka boleh mendapatkan mata. Tetapi kerana cuba menurunkan penumpang di mana tidak ada mana-mana rumah yang berhampiran, dengan baik, mereka boleh dihukum untuk itu. Jadi mungkin anda mahu untuk mengesan mata dalam pembolehubah global. Anda boleh melaksanakan mungkin pemasa, di mana pengguna mempunyai sejumlah masa untuk mengambil dan menurunkan satu sebilangan penumpang. Mungkin juga mengintegrasikan ini dengan sistem mata. Atau anda boleh Ubah Carta seperti yang penumpang disusun mengikut rumah. Supaya mungkin akan menjadi yang amat berfungsi untuk shuttle.seats. Anda boleh melaksanakan ciri terbang, di mana jika pengguna input yang Konami kod, maka ulang-alik lif kira tanah dan pengangkutan ulang-alik yang boleh terbang. Tetapi bagi penurunan yang selamat luar, terbaik untuk membuat ulang-alik tanah roda ke atas tanah pertama. Anda juga boleh melaksanakan teleportation, di mana anda membuat drop down senarai bangunan index.html. Dan memilih salah seorang daripada mereka, yang pengguna akan dihantar ke bahawa bangunan di kampus. OK, walaupun, untuk perjalanan melalui dinding beberapa bangunan dalam perjalanan anda di sana. Anda juga boleh menukar kelajuan ulang-alik, yang membolehkan pengguna untuk meningkatkan atau mengurangkan kelajuan. Mungkin anda mahu berubah-ubah global untuk menjejaki berapa banyak bahan api ulang-alik mempunyai, mengurangkan sebagai anda pergi bersama-sama. Sebaik sahaja anda memukul sifar, walaupun, ulang-alik tidak akan dapat bergerak kecuali anda telah refueled, mungkin menggunakan butang, atau juga membuat stesen gas anda sendiri. Tetapi itu sudah tentu tidak senarai yang lengkap. Semak spec untuk penuh senarai, atau mungkin mencadangkan anda sendiri untuk TF anda. Langit adalah had. Ini adalah CS50-p anda yang terakhir ditetapkan, jadi berseronok dengannya. Ini adalah CS50 Shuttle. Saya ada untuk mengatakan, ia telah keseronokan membuat ini untuk anda dengan pasukan pengeluaran. Dan saya berharap bahawa anda telah menikmati mereka, juga. Nama saya Zamyla. Dan ini adalah CS50.