>> ROB BOWDEN: Hi.
Είμαι Rob, και ελπίζω σας παιχνίδι για το παιχνίδι της 15.
Τώρα, υπάρχουν τέσσερις λειτουργίες που χρειάζεστε να εφαρμόσουν αυτό το πρόγραμμα - init,
συντάξει, να μετακινήσετε, και κέρδισε.
Έτσι, ας ρίξουμε μια ματιά στο init.
>> Εδώ, βλέπουμε το πρώτο πράγμα είμαστε πρόκειται να κάνουμε είναι να δηλώσει μια μεταβλητή
που ονομάζεται μετρητής.
Είναι πρόκειται να προετοιμαστεί να δ φορές d μείον 1.
Να θυμάστε ότι d είναι η διάσταση του σκάφους μας.
Πώς init πρόκειται να λειτουργήσει είναι ότι πρόκειται για να μετακινηθείτε σε όλο το σύστημα
και θα πάμε για να ξεκινήσει στην επάνω αριστερή γωνία.
>> Και ας πούμε ότι έχουν 4 από 4 σκάφους.
Έτσι, το πάνω αριστερά είμαστε πρόκειται να πω είναι 15.
Και τότε είμαστε ακριβώς πρόκειται να μετρήσει μέσα από τα διοικητικά συμβούλια, λέγοντας 15, 14, 13,
12, 11, 10, 9, 8, 7, 6, 5, 4, και ούτω καθεξής.
Έτσι, το πάνω αριστερά, που αναμένουμε να είναι d φορές δ μείον 1, το οποίο στο 4 από 4
περίπτωση θα είναι 16 μείον 1, η οποία είναι σωστά 15.
>> Και τώρα εδώ είναι όπου θα πάμε να επαναλάβει σε όλο το σύστημα.
Και θα πάμε να ορίσετε κάθε θέση το διοικητικό συμβούλιο με την τρέχουσα αξία της
μετρητή μας, και, στη συνέχεια, μετρητής πρόκειται να ελαττώνει, έτσι ώστε η επόμενη
θέση φτάνουμε πρόκειται να έχει μετρητή είναι ένα λιγότερο από ό, τι
η προηγούμενη θέση.
Γι 'αυτό και αρχικά είχε 15 και μειώσετε πάγκο.
Έτσι, τότε θα πάμε να εκχωρήσει 14 έως το επόμενη θέση, σε αντίθεση μείωση,
και θα πάμε να ανατεθεί 13, και ούτω καθεξής.
>> Τέλος, θα πρέπει να χειριστεί αυτό το κόρνερ περίπτωση κατά την οποία, εάν το διοικητικό συμβούλιο έχει ακόμη
διάσταση, τότε ακριβώς να κάνει 15, 14, 13, 12, σε όλη τη διαδρομή προς τα κάτω σε 3, 2, 1, είναι
πρόκειται να μας αφήσει με ένα άλυτο διοικητικό συμβούλιο.
Και θα πρέπει να ανταλλάξουν το 1 και το 2.
Έτσι, αν d mod 2 ισούται με 0, που είναι πώς θα πάμε για να ελέγξετε
για να δούμε αν είναι ακόμα.
Αν d mod 2 ισούται με 0, τότε στη σειρά δ μείον 1, η οποία είναι η τελευταία σειρά, και
θέση d μείον 2 ή στήλη δ μείον 2, θα πάμε για να ορίσετε ότι σε 2, και
στήλη δ μείον 3 είμαστε πρόκειται να οριστεί σε 1.
Έτσι, αυτό είναι ακριβώς αντιστροφή, όπου το 1 και το 2 είναι σήμερα.
>> Τέλος, θα πάμε να θέσει τον πολύ κάτω δεξιά ίσο με το κενό, όπου
κενό έχει οριστεί hash στην κορυφή ως 0.
Έτσι, αυτό δεν ήταν απολύτως αναγκαία, δεδομένου ότι αυτό για το βρόχο πρόκειται να έχει
ρυθμίσετε το κάτω δεξιά στο 0, αφού μετρητής θα φτάσει φυσικά 0.
Αλλά αυτό εξαρτάται από εμάς γνωρίζοντας ότι τυφλό κατακερματίζεται για να βρείτε ένα 0.
Αν πάω σε αυτό το πρόγραμμα και αργότερα αλλάξουν κενό στο άνω μέρος σε 100, το
θα πρέπει να εξακολουθούν να εργάζονται.
>> Έτσι, αυτό είναι απλώς να διασφαλίσουμε ότι η κάτω δεξιά είναι πραγματικά ίση με μας
τιμή του τυφλού.
Τέλος, έχουμε δύο καθολικές μεταβλητές, τόσο κενό και κενό i j, και βλέπουμε
εκείνα που δηλώνονται στην κορυφή.
Και θα πάμε να χρησιμοποιήσετε αυτά τα δύο παγκόσμια μεταβλητές για να παρακολουθείτε το
θέση του κενό, έτσι ώστε να μην Πρέπει να κοιτάξετε μέσα από το σύνολο της
συμβούλιο για να βρείτε το κενό κάθε φορά που προσπαθούμε να κάνει μια κίνηση.
Έτσι, η θέση της είναι πάντα κενή πρόκειται να ξεκινήσει στο κάτω μέρος δεξιά.
Έτσι, η κάτω δεξιά δίνεται από δείκτες d μείον 1, d μείον 1.
Έτσι, αυτό είναι το init.
>> Τώρα προχωράμε για να σχεδιάσετε.
Έτσι, κλήρωση πρόκειται να είναι παρόμοια όπου θα πάμε για να μετακινηθείτε
σε όλο το σύστημα.
Και θέλουμε απλώς να εκτυπώσετε την τιμή ότι είναι σε κάθε θέση του πίνακα.
Έτσι, εδώ, είμαστε εκτύπωση την τιμή που είναι σε κάθε θέση του πίνακα.
Και παρατηρήσετε ότι κάνουμε -.
Και αυτό ακριβώς λέει printf που ανεξάρτητα από το αν είναι ένα ψηφίο ή
διψήφιο αριθμό, εξακολουθούμε να θέλουμε να καταλαμβάνουν δύο στήλες στην εκτύπωση,
έτσι ώστε αν έχουμε διψήφιο και ένα τετραψήφιων αριθμών στην ίδια πλακέτα, μας
συμβούλιο θα εξακολουθούν να φαίνονται ωραία και πλατεία.
>> Έτσι θέλουμε να το κάνουμε αυτό για κάθε τιμή στο διοικητικό συμβούλιο, εκτός από το λευκό.
Έτσι, αν η θέση στον πίνακα ισούται το κενό, τότε ειδικά
θέλετε να εκτυπώσετε μόνο ένα χαρακτήρα υπογράμμισης να εκπροσωπεί την κενό, αντί
ανεξάρτητα από την αξία του κενό είναι στην πραγματικότητα.
>> Τέλος, θέλουμε να εκτυπώσετε από μια νέα γραμμή.
Σημειώστε ότι αυτό είναι ακόμα μέσα το εξωτερικό για βρόχο, αλλά εκτός
το εσωτερικό βρόχο for.
Δεδομένου ότι αυτή η εξωτερική βρόγχος επανάληψη πάνω από όλες τις σειρές, και έτσι αυτή η printf είναι
πρόκειται να εκτυπώσετε μόνο μια νέα γραμμή, έτσι ώστε να προχωρήσουμε για να εκτυπώσετε την επόμενη σειρά.
Και αυτό είναι για ισοπαλία.
>> Έτσι, τώρα ας προχωρήσουμε να προχωρήσουμε.
Τώρα, περνάμε κίνηση, το κεραμίδι ότι η χρήστης εγγράφεται στο παιχνίδι - που
εισάγετε το κεραμίδι που θέλουν να μετακινηθούν - και είστε υποτίθεται για να επιστρέψει μια bool, έτσι
είτε αληθινή είτε ψευδής, ανάλογα με αν η κίνηση ήταν πράγματι
ισχύει - αν αυτό κεραμίδι μπορεί να είναι μετακόμισε στο κενό χώρο.
>> Μέχρι εδώ, δηλώνουμε μια τοπική μεταβλητή, tile_1 και tile_j, τα οποία πρόκειται να
είναι παρόμοια με blank_i και blank_j, εκτός του ότι πρόκειται να παρακολουθείτε το
θέση του πλακιδίου.
Τώρα εδώ, θα πάμε να χρησιμοποιήσετε blank_i και blank_j και να πω εντάξει, έτσι
εδώ είναι το κενό στο διοικητικό συμβούλιο.
>> Τώρα, είναι το κεραμίδι πάνω από το κενό;
Είναι το κεραμίδι στα αριστερά του τυφλού;
Είναι το πλακίδιο στα δεξιά του τυφλού;
Είναι το κεραμίδι κάτω από το κενό;
Έτσι, αν το κεραμίδι είναι σε οποιαδήποτε από αυτά θέσεις, τότε γνωρίζουμε ότι το κεραμίδι
μπορεί να μετακινηθεί μέσα στο κενό σημείο και το κενό μπορεί να μετακινηθεί στο σημείο όπου η
κεραμίδι είναι σήμερα.
>> Έτσι, εδώ, λέμε αν σκάφους στη θέση blank_i μείον 1 blank_j.
Έτσι, αυτό που λέει είναι το κεραμίδι πάνω από την τρέχουσα κενό;
Και αν ναι, θα πάμε να θυμόμαστε αυτή είναι η θέση των πλακιδίων.
Το κεραμίδι είναι σε θέση blank_i μείον 1 και blank_j.
τώρα το πρώτο, έχουμε επίσης τον έλεγχο αυτό ακριβώς εδώ, έτσι είναι blank_i
μεγαλύτερη από μηδέν.
>> Γιατί θέλουμε να το κάνουμε αυτό;
Λοιπόν, αν το κενό είναι στην πρώτη γραμμή του διοικητικού συμβουλίου, τότε δεν θέλουμε να
φαίνονται πάνω από την κενή για το κεραμίδι, δεδομένου δεν υπάρχει τίποτα πάνω από την κορυφή
σειρά του διοικητικού συμβουλίου.
Αυτό είναι το πώς μπορείτε να καταλήξετε να πάρει κάτι σαν ένα σφάλμα κατάτμησης ή
το πρόγραμμά σας θα μπορούσε να λειτουργήσει μόνο με απροσδόκητους τρόπους.
Έτσι, αυτό είναι να διασφαλίσουμε ότι εμείς δεν κάνουμε εξετάσουμε σε χώρους που δεν είναι έγκυρες.
>> Τώρα θα πάμε να κάνουμε το ίδιο πράγμα για Όλες οι άλλες πιθανές συνδυασμούς.
Μέχρι εδώ, ψάχνουμε κάτω από το κενό για να δούμε αν αυτό είναι το κεραμίδι.
Και πρέπει επίσης να βεβαιωθείτε ότι είμαστε όχι στην κάτω γραμμή, ειδάλλως
δεν θα πρέπει να κοιτάξουμε για το κεραμίδι.
Εδώ, θα πάμε να δούμε στα αριστερά του το κενό για να δείτε αν είναι το κεραμίδι.
Και δεν θα πρέπει να κοιτάξουμε προς τα αριστερά αν είμαστε στην αριστερή στήλη.
Και εδώ θα πάμε να κοιτάξουμε προς το δεξιά από το κενό, και δεν θα πρέπει
δείτε δεξιά αν είμαστε στη δεξιά στήλη.
>> Έτσι, εάν κανένα από αυτά τα πράγματα ήταν αλήθεια, αυτό σημαίνει ότι το πλακίδιο δεν ήταν δίπλα
στο τυφλό και μπορούμε να επιστρέψουμε ψευδής.
Η κίνηση αυτή δεν ήταν έγκυρη.
Αλλά, εάν ένας από αυτούς ήταν αλήθεια, τότε στο αυτό το σημείο, γνωρίζουμε ότι tile_i και
tile_j είναι ίσο με το θέση του πλακιδίου.
Και έτσι, μπορούμε να ενημερώσει το διοικητικό συμβούλιο σε θέσεις tile_i και tile_j.
Ξέρουμε ότι η νέα τιμή θα είναι το κενό και ότι η θέση blank_i
blank_j, η οποία ήταν η αρχική κενό - γνωρίζουμε το κεραμίδι πρόκειται να
μετακινηθεί εκεί.
>> Ανακοίνωση δεν έχουμε στην πραγματικότητα να κάνει μια πραγματική ανταλλαγής εδώ, αφού γνωρίζουμε ότι η
αξίες που πρέπει να εισαχθεί σε αυτές τις θέσεις.
Δεν έχουμε ανάγκη από μια προσωρινή μεταβλητή γύρω.
>> Τέλος, θα πρέπει να θυμόμαστε ότι εμείς έχει παγκόσμιες μεταβλητές μας, που είναι
την παρακολούθηση της θέσης του αναπτύγματος.
Έτσι θέλουμε να ενημερώσετε τη θέση του το κενό να είναι, όπου το κεραμίδι
ήταν αρχικά.
Τέλος, επιστρέφουμε αληθές, δεδομένου η κίνηση ήταν επιτυχής.
Εμείς επιτυχία ανταλλάξουν το κενό με το κεραμίδι.
>> Εντάξει, έτσι το τελευταίο μας πρέπει να ελέγξετε γουόν.
Έτσι, κέρδισε ομοίως επιστρέφει bool όπου αλήθεια πρόκειται να δείχνουν ότι η
χρήστης έχει κερδίσει το παιχνίδι.
Και ψευδές υποδεικνύοντας ότι το παιχνίδι συνεχίζεται.
Ο χρήστης δεν έχει κερδίσει.
Έτσι, αυτό πρόκειται να είναι λίγο πολύ το αντίθετο της init, όπου init,
θυμηθείτε, θα προετοιμαστεί το διοικητικό συμβούλιο έως 15, 14, 13, 12, ούτω καθεξής.
Λαμβάνοντας υπόψη ότι κέρδισε, θέλουμε να ελέγξουμε εάν η σκάφους είναι 1, 2, 3, 4, 5, και ούτω καθεξής.
>> Έτσι, θα πάμε να προετοιμαστεί μας αντιμετώπιση σε 1 αφού αυτό είναι η κορυφή
αριστερά του διοικητικού συμβουλίου θα πρέπει να είναι.
Και μετά θα πάμε σε βρόχο σε όλο το σύστημα.
Ας αγνοούν αυτή την κατάσταση για ένα δευτερόλεπτο.
Και αυτή η κατάσταση είναι ακριβώς πρόκειται να Έλεγχος είναι το διοικητικό συμβούλιο σε αυτή τη θέση
ίση με την τρέχουσα Η;
Αν ναι, προσαυξάνει την καταμέτρηση, έτσι ώστε η επόμενη θέση κοιτάξουμε είναι ένα υψηλότερο
από τη θέση που βρισκόμαστε σε αυτή τη στιγμή.
>> Έτσι, αυτό είναι το πώς θα πάρει το πάνω αριστερά θα πρέπει να είναι 1.
Αύξησε τον αριθμό 2.
Κοιτάξτε την επόμενη θέση.
Είναι αυτό το 2;
Αν ναι, αυξάνει το μετρητή έως 3.
Επόμενη θέση, είναι αυτό το 3;
Αν ναι, αυξάνει το μετρητή έως 4, και ούτω καθεξής.
Έτσι, αν υπάρχει κάποια θέση σχετικά με την του σκάφους που δεν ισούται με καταμέτρηση μας,
Στη συνέχεια θέλουμε να επιστρέψει false, δεδομένου ότι σημαίνει ότι υπάρχει κάποια κεραμιδιών που είναι
όχι στη σωστή θέση.
>> Έτσι, εδώ, τι κάνει αυτή η κατάσταση;
Λοιπόν, να θυμάστε ότι το κενό είναι υποτίθεται ότι θα πάει στην κάτω δεξιά γωνία.
Και η αξία της κενό δεν θα μπορούσε αναγκαστικά ίση με την αξία του
αντιμετώπιση που πρόκειται να επιτευχθεί στην κάτω δεξιά γωνία.
Γι 'αυτό και ειδικά θέλετε να ελέγξετε αν i ισούται με d ισούται με μείον 1 και j ισούται
ισούται με d μείον 1 - το οποίο λέει αν ψάχνουν στην κάτω δεξιά γωνία της
το διοικητικό συμβούλιο - τότε μόνο θέλετε να συνεχίσετε.
Θέλουμε να παραλείψετε αυτό το συγκεκριμένο επανάληψη του βρόχου for.
>> Και έτσι, αν καταφέρουμε να ξεπεράσουμε αυτό ένθετα για βρόχο, αυτό σημαίνει ότι
δεν υπήρχε πλακάκι που ήταν σε η λανθασμένη θέση.
Και έχουμε ξεφύγει από το βρόχο και να έρθουν εδώ, όπου μπορούμε να επιστρέψουμε αλήθεια.
Όλα τα κεραμίδια ήταν στη σωστή θέση και αυτό σημαίνει ότι ο χρήστης έχει
κέρδισε το παιχνίδι.
Και αυτό είναι όλο.
Το όνομά μου είναι Rob Bowden, και αυτό ήταν 15.