ZAMYLA CHAN: Λοιπόν, εδώ είμαστε, το τελευταίο p-που σε CS50. Συγχαρώ τον εαυτό σας από το να έχουν προχωρήσει τόσο πολύ από την πρώτη σας Hello Κόσμοι και εκτύπωσης Up Πυραμίδες για Mario. Κάνατε μια ιστοσελίδα την περασμένη εβδομάδα. Και θα πάμε να κάνει άλλο ένα αυτή την εβδομάδα, το ένα που σας επιτρέπει να οδηγείτε γύρω από την πανεπιστημιούπολη του Χάρβαρντ, επιλέγοντας μέχρι τα μέλη του προσωπικού CS50 και φέρνοντάς τους πίσω για να τους μονοκατοικίες. Τώρα, την περασμένη εβδομάδα δουλέψαμε σε PHP, μια γλώσσα πλευρά του server. Για αυτό το p-set, είμαστε πάρει εισήγαγε σε JavaScript, το οποίο είναι ένα client side γλώσσα. Έτσι, ας ρίξουμε μια ματιά σε μερικά από τα Κωδικός διανομής που είναι διαθέσιμη σε σας για αυτό το p-set. Στο φάκελο JavaScript, θα υπάρχουν είναι μια δέσμη των αρχείων JavaScript. Υπάρχει buildings.js, το οποίο περιέχει ένα σειρά από κτίρια γύρω από το Χάρβαρντ πανεπιστημιούπολη με τις πληροφορίες τους και τη θέση. Houses.js είναι μια σειρά από Harvard κατοικημένα σπίτια με τους γεωγραφικά πλάτη και μήκη. Passengers.js περιέχει μία συστοιχία επιβάτες, τα μέλη του προσωπικού CS50 ότι θα πρέπει να φέρει πίσω οικιστικών σπίτια τους. Math3D.js, που περιέχει πολλά λειτουργίες να κάνει με την κίνηση. Αν είστε μαθηματικά μυαλό, τότε Σας καλωσορίζω να ρίξετε μια ματιά. Αλλά εσείς δεν χρειάζεται να κατανοήσουν τα πάντα εκεί. Shuttle.js, που ασχολείται με κίνηση του Λεωφορείου. Και index.html είναι η αρχική σελίδα, όπου ό, τι συμβαίνει, πραγματικά, όπου η χρήστης αλληλεπιδρά με την περιοχή. Service.css είναι το φύλλο στυλ CSS, η οποία εκτός από το Twitter Bootstrap Βιβλιοθήκη, οι έλεγχοι πώς index.html εμφάνιση. Και τότε έχουμε επίσης service.js, η οποία περιέχει λειτουργίες των υπηρεσιών για η Shuttle. Και εδώ είναι όπου θα πάμε να πλήρωση σε ορισμένα από τα to-do. Τώρα, ας ρίξουμε μια ματιά στα αντικείμενα και associative arrays σε JavaScript, η οποία, για όλες τις προθέσεις και τους σκοπούς, είναι εναλλάξιμα. Αν ήθελα να κάνω ένα αντικείμενο μια μεταβλητή ονομάζεται ραβδί, θα ήθελα να κηρύξει. Και μέσα σε αυτά τα άγκιστρα, θα ήθελα προσδιορίζει, ο πυρήνας είναι μονόκερος, το ξύλο είναι κεράσι, και το μήκος είναι 13. Τώρα, μπορώ επίσης να έχουν πρόσβαση σε τιμές αντικειμένων χρησιμοποιώντας associative array σημειογραφία. Έτσι ραβδί δομικός δείκτης, μπορώ να ορίσετε που ισούται με μονόκερος, ή ελέγξτε ότι αν χρειάζομαι. Ή μπορώ να χρησιμοποιήσω τον τελεστή τελεία wand.wood ισούται με κεράσι, και ούτω καθεξής και ούτω καθεξής. Έτσι, θα δείτε ότι συνειρμική πίνακες και Τα αντικείμενα σε JavaScript πρόκειται να είναι εναλλάξιμα, και τη θέληση έρχονται σε αρκετά βολικό. Τότε θα δείτε μια σειρά από κτίρια σε buildings.js, πάλι, μια σειρά από αντικείμενα. Αν ήθελα να κάνω μια σειρά από τα καλύτερα κτίρια στην πανεπιστημιούπολη του Χάρβαρντ, στη συνέχεια, Θα ήθελα να το κάνω ως εξής. Χρησιμοποιώντας αυτή την σημειογραφία αντικειμένου, όπου Φυλάξω τη ρίζα, το όνομα, τη διεύθυνση, γεωγραφικό πλάτος, μήκος και πλάτος για κάθε μεμονωμένο αντικείμενο κτίριο. Ας μιλήσουμε για γρήγορα μεταβλητές σε JavaScript. Όπως PHP, μεταβλητές JavaScript Οι ασθενώς ή χαλαρά πληκτρολογήσει. Για να δημιουργήσετε μια τοπική μεταβλητή, θα πρόθεμα το όνομα της μεταβλητής με V-Α-Κ, var. Τώρα, σε JavaScript, λειτουργίες θα περιορίσουν το πεδίο μεταβλητών. Έτσι, εάν έχετε μια τοπική μεταβλητή μέσα μια λειτουργία, τότε άλλες λειτουργίες δεν μπορεί να έχει πρόσβαση. Αλλά σε αντίθεση με C, βρόχοι και οι προϋποθέσεις δεν περιορίσει το πεδίο μιας μεταβλητής. Έτσι ακόμα κι αν το δηλώσετε μέσα από ένα κατάσταση, η όλη λειτουργία θα έχουν πρόσβαση σε αυτό. Τώρα, χωρίς var, η μεταβλητή θα είναι παγκόσμιες. Έτσι, αν απλά να δηλώσει το όνομα και εκχωρήσετε μια τιμή, τότε η μεταβλητή θα είναι μια καθολική μεταβλητή σε JavaScript. Τώρα, σε σπίτια, έχουμε μια συνειρμική σειρά από αντικείμενα τύπου υποδοχής, όπου κάθε σπίτι είναι απλά ένα γεωγραφικό πλάτος και ένα γεωγραφικό μήκος. Στη συνέχεια έχουμε τους επιβάτες συστοιχία, η οποία είναι ένας πίνακας του τύπου αντικειμένου επιβατών. Έτσι, κάθε επιβάτης έχει το χρήστη όνομα, ένα όνομα, και ένα σπίτι. Σημειώστε ότι λέω τύπου επιβατών, το οποίο πραγματικά σημαίνει απλά ότι κάθε αντικείμενο έχει το ίδια βασικά ζευγάρια αξίας. Έτσι, κάθε αντικείμενο τύπου επιβάτης έχει ένα όνομα χρήστη, ένα όνομα, και ένα σπίτι. Έτσι, αυτό που χρειαζόμαστε για να κάνει για την p-σετ; Λοιπόν, θα πρέπει να επιτρέψει στους χρήστες για να πάρει μέχρι τα μέλη του προσωπικού, για να εμφανίσετε όλες τα μέλη του προσωπικού που είναι σήμερα σε λεωφορείο μας, και να τους αφήσω. Και τότε θα μιλήσουμε επίσης για extra χαρακτηριστικά που μπορούν να εφαρμοστούν για η Shuttle p-set. Αλλά ας μιλήσουμε για το πρώτο pickup. Τα πρόσωπα του προσωπικού CS50 έχουν φυτευτεί σε όλη την πανεπιστημιούπολη, όπου κάθε πρόσωπο υλοποιείται ως ένα σημάδι χώρα σχετικά με την 3D Γη, και ως δείκτη στον 2D χάρτη. Έτσι όταν ο χρήστης κάνει κλικ στο Pickup κουμπί, θέλουμε να προσθέσουμε σε κοντινή απόσταση επιβάτες στο λεωφορείο. Και θέλουμε επίσης να αφαιρέσει τη θέση τους σήμα από τον κόσμο και αφαιρέστε τους δείκτη από τον χάρτη, υποδεικνύοντας ότι θα είστε σε λεωφορείο μας τώρα. Επομένως, πώς θα ανιχνεύσει αν οι επιβάτες βρίσκονται εντός του εύρους της μεταφοράς μας; Λοιπόν, η απόσταση λειτουργίας, έτσι shuttle.distance, περνώντας το γεωγραφικό πλάτος και μήκος, θα υπολογίσει η απόσταση από την τρέχουσα θέση της μεταφοράς με λεωφορείο προς το σημείο που καθορίζετε με δεδομένο ότι γεωγραφικού πλάτους και μήκους. Έτσι, μπορείτε να χρησιμοποιήσετε αυτό για να υπολογίσει το απόσταση από το λεωφορείο για το επιβάτες. Αλλά πώς ξέρετε πού οι επιβάτες είναι; Λοιπόν, αυτό είναι όπου θα πρέπει να επεξεργαστείτε τη λειτουργία κατοικηθεί. Συμπλήρωση θέσεων όλων των μελών του προσωπικού στους επιβάτες στον κόσμο και εντός του χάρτη, αλλά δεν αποθήκευση της θέσης τους. Έτσι, ίσως μπορείτε να αποθηκεύσετε τους τοποθετήστε σήματα και δείκτες σε κάποια παγκόσμια σειρά. Τώρα, υπάρχει ήδη μια παγκόσμια σειρά αποθήκευση πληροφοριών από τους επιβάτες. Τα καταστήματα επιβάτες πίνακα καθένα όνομα του επιβάτη και το σπίτι τους. Έτσι, ίσως μπορείτε να προσθέσετε μερικές παραμέτρους εκεί για τα επιβατηγά αντικείμενα. Για να μας βοηθήσει να εντοπίσουμε όλους τους επιβάτες εντός της εμβέλειας μας μεταφοράς, βρόχος ας με όλα τα επιβάτες στη συστοιχία επιβάτες. Ένας βρόχος for στην JavaScript μπορεί να μοιάζει κάτι σαν αυτό, είναι πολύ παρόμοια με εκείνες για βρόχων σε C. Ή μπορούμε να χρησιμοποιήσουμε ένα εναλλακτική λύση για τη δομή βρόχου, για var i σε σειρά, όπου εγώ θα εξακολουθεί να ο δείκτης, αλλά δεν χρειάζεται να καθορίσετε το array.length κατάσταση και i + +. Θέση κάθε επιβάτη είναι δίνεται από το σήμα θέση τους. Αλλά το σήμα τόπος δεν είναι η γεωγραφικό πλάτος και γεωγραφικό μήκος. Πρέπει να έχουν πρόσβαση σε αυτές τις παραμέτρους να πάρει τη γεωμετρία, χρησιμοποιώντας get γεωμετρία για το σήμα τόπου, και στη συνέχεια τη στιγμή που έχουμε τη γεωμετρία, να πάρει είτε το γεωγραφικό πλάτος και το γεωγραφικό μήκος χρησιμοποιώντας αυτές τις λειτουργίες. Έτσι τώρα ξέρουμε πώς να ανιχνεύσει αν οι επιβάτες βρίσκονται εντός εύρος λεωφορείο μας. Μόλις έχουμε τους επιβάτες, θα θέλετε να προσθέσετε τυχόν επιβάτες που είναι εντός αυτού του φάσματος. Θέλουμε να τους επιτρέψει να hop και να πάρει μια θέση στο λεωφορείο μας, αλλά μόνο αν έχουμε αρκετό χώρο για αυτούς. Η σειρά shuttle.seats θα δείξει αν τα καθίσματα είναι άδεια, ή που είναι στο κάθισμα. Έτσι, αν το κάθισμα είναι άδειο, τότε ότι η έδρα θα είναι μηδενική. Έτσι, τη συνεχή επανάληψη του πίνακα θέσεων, έλεγχο για κενές θέσεις, την αποθήκευση επιβάτες σε αυτές τις θέσεις μέχρι να δεν έχουν ακόμη κενές θέσεις. Και, δυστυχώς, κάθε άλλο επιβάτες Θα πρέπει να περιμένουμε για την την επόμενη φορά που το λεωφορείο έρχεται κάτω. Μόλις μπουν στο λεωφορείο, θα ήθελα για να αφαιρέσετε το σήμα θέση τους, η οποία είναι η φωτογραφία τους στο 3D κόσμο. Αν ήθελα να αφαιρέσετε ένα p σήμα θέση, τότε θα πάρει όλα τα χαρακτηριστικά από τη γη μου, από το Google Earth, και στη συνέχεια αφαιρέστε ότι συγκεκριμένο τόπο σήμα χρησιμοποιώντας τη λειτουργία removeChild. Στη συνέχεια, τέλος, ας καταργήσετε το δείκτη, το εικονίδιο στην 2D χάρτη, για κάθε επιβατών που έχουν πάρει. Για να αφαιρέσετε ένα δείκτη m, τότε εγώ θα μόλις εκτελέσει m.setMap null. Κάνετε αυτό για κάθε επιβατών εντός της εμβέλειας, και έχετε τελειώσει pickup. Η λειτουργία διάγραμμα θα πρέπει να εμφανίζει όλα τα των επιβατών που βρίσκονται σε σας μεταφοράς, και άδειο κάθισμα και αν είναι άδειο. Έτσι, το διάγραμμα θα πρέπει να επαναλάβετε σε shuttle.seats, εμφανίζοντας το ενημέρωση των επιβατών για κάθε δείκτη, και κενή θέση, αν ο δείκτης είναι μηδέν. Τώρα, αν HTML κείμενο τίθεται μέσα από ένα Μεταβλητής JavaScript, στη συνέχεια, με τη χρήση document.getElementById, διάγραμμα δοχείου επεξεργαστείτε το εσωτερικό HTML του ότι, δεδομένης στοιχείο με την ανάθεση της HTML κειμένου στο document.getElementById εσωτερικό μεταβλητό HTML. Όταν οι χρήστες κάνουν κλικ στο κουμπί Drop Off στο index.html, θα καλέσει το λειτουργία Παράδοσης. Και είναι η δουλειά μας να εφαρμόσουμε αυτό. Σε Παράδοσης, θα θέλετε να καταργήσετε κάθε επιβάτες από το λεωφορείο μόνο αν είμαστε στο φάσμα του προορισμού τους, κατοικημένη σπίτι τους. Έτσι Παράδοσης θα πρέπει να ελέγξετε εάν το λεωφορείο είναι στο εύρος οποιουδήποτε από τα σπίτια, και αφαιρέστε τυχόν απαιτούνται επιβάτες από το λεωφορείο. Επομένως, πώς θα ελέγξει αν είμαστε στο φάσμα της κάθε σπίτια; Λοιπόν, για άλλη μια φορά, θα κάνει χρήση της shuttle.distance λειτουργία, περνώντας το γεωγραφικό πλάτος και μήκος του σημείου ότι είμαστε έλεγχο κατά. Αλλά ποια είναι αυτά τα σημεία; Λοιπόν, η σειρά σπιτιών, αν θυμάστε σε houses.js, αποθηκεύει το γεωγραφικό πλάτος και μήκος της κάθε σπίτι ένα associative array, όπου κάθε index είναι το όνομα εκείνου του σπιτιού. Στη συνέχεια, για την απομάκρυνση των επιβατών - καλά, μόνο αν είμαστε στο φάσμα τους σπίτι που θέλουν να πάνε. Έτσι και πάλι, να θυμάστε ότι οι επιβάτες αποθηκεύει το σπίτι που κάθε επιβάτη θέλει να πάει. Αν είναι εντός της εμβέλειας τους το σπίτι, τότε θα καταργήσετε αυτό επιβατών από shuttle.seats και σετ τη θέση τους στον πίνακα με μηδέν. Τώρα ας μιλήσουμε για κάποια επιπλέον χαρακτηριστικά ότι μπορεί να υλοποιηθεί η CS50 Μεταφορά p-set. Υπάρχει ένα σύστημα το σημείο όπου μπορείτε να παρακολουθείτε πόσα επισημαίνει ένας χρήστης έχει. Για την πτώση από τους επιβάτες με επιτυχία, μπορούν να πάρουν βαθμούς. Αλλά για προσπαθεί να ρίξει μακριά τους επιβάτες όπου δεν υπάρχει σπίτι σε κοντινή απόσταση, καλά, μπορούν να πάρουν τιμωρηθεί για αυτό. Έτσι, ίσως θέλετε να παρακολουθείτε τα σημεία σε μια global μεταβλητή. Μπορείτε να εφαρμόσετε ίσως ένα χρονόμετρο, όπου ο χρήστης έχει ένα ορισμένο ποσό των χρόνο για να πάρει και πέφτω α ορισμένο αριθμό των επιβατών. Ίσως ενσωματώσουν ακόμη και αυτό με το σύστημα το σημείο. Ή μπορείτε να επεξεργαστείτε Διάγραμμα έτσι ώστε Οι επιβάτες που ταξινομούνται από το σπίτι. Έτσι, θα μπορούσε πιθανότατα να είναι ένα είδος λειτουργούν σε shuttle.seats. Μπορείτε να εφαρμόσετε ένα ιπτάμενο χαρακτηριστικό, όπου εάν ο χρήστης εισάγει την Konami κώδικα, τότε το λεωφορείο ανελκυστήρες από το το έδαφος και το λεωφορείο μπορεί να πετάξει. Αλλά για μια ασφαλή αποκοιμιέμαι, καλύτερα να το λεωφορείο της γης τους τροχούς του σχετικά με την γείωση πρώτα. Μπορείτε επίσης να εφαρμόσετε τηλεμεταφορά, όπου μπορείτε να κάνετε ένα drop down λίστα κτίρια στην index.html. Και επιλέγοντας ένα από αυτά, η χρήστης θα πρέπει να μεταφέρονται σε αυτό το κτίριο στην πανεπιστημιούπολη. Εντάξει, όμως, να ταξιδέψει μέσα οι τοίχοι μερικών κτίρια στο δρόμο σας εκεί. Μπορείτε επίσης να αλλάξετε την ταχύτητα του μεταφοράς, επιτρέποντας στο χρήστη να αυξήσει ή να μειώσετε την ταχύτητα. Ίσως θέλετε μια παγκόσμια μεταβλητή παρακολουθείτε πόσο το καύσιμο μεταφοράς θα πρέπει, μειώνοντας αυτό όσο προχωράς. Μόλις χτυπήσει το μηδέν, όμως, το λεωφορείο δεν θα είναι σε θέση να κινηθεί εκτός και αν έχετε ανεφοδιάστηκαν, ίσως χρησιμοποιώντας ένα κουμπί, ή ακόμα και να φτιάξετε το δικό σας βενζινάδικο. Αλλά αυτό σίγουρα δεν είναι εξαντλητικό κατάλογο. Ελέγξτε το spec για την πλήρη λίστα, ή ίσως προτείνει δικά σε TF σας. Ο ουρανός είναι το όριο. Αυτή είναι η τελευταία CS50 p-set σας, έτσι ώστε να διασκεδάσουν με αυτό. Αυτό ήταν CS50 Shuttle. Έχω να πω, αυτό είναι μια χαρά κάνει αυτά για σας με το Η ομάδα παραγωγής. Και ελπίζω ότι έχετε απολαύσετε τους, καθώς και. Το όνομά μου είναι Zamyla. Και αυτό ήταν CS50.