ROB BOWDEN: Hallo. Ich bin Rob, und ich hoffe, dass Ihr Spiel für Spiel von 15 Jahren. Jetzt gibt es vier Funktionen, die Sie brauchen in diesem Programm zu implementieren - init, ziehen, verschieben und gewann. Also, schauen wir uns init. Hier sehen wir das erste, was wir sind zu tun ist, deklarieren Sie eine Variable Gegen genannt. Es wird initialisiert werden d d minus 1 mal. Denken Sie daran, dass d ist die Dimension von unserem Vorstand. Wie init funktionieren wird ist, es wird über die gesamte Platine laufen und wir werden beginnen in der oberen linken. Und lassen Sie uns einfach sagen, dass wir eine 4 mal 4 Bord. Also die oben links, wir sind sagen 15 ist. Und dann sind wir gerade dabei, zählen durch die Bretter, sagen 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, und so weiter. Also die oben links, erwarten wir, d mal sein d minus 1, die in der 4 mal 4 Fall wird zu 16 minus sein 1, die vollständig 15 ist. Und jetzt ist hier, wo wir zu gehen durchlaufen das gesamte Board. Und wir werden um jede Position in eingestellt der Vorstand auf den aktuellen Wert von unsere Zähler, Zähler und dann wird zu verringern, so daß die nächste Position, die wir erreichen, ist zu haben, Zähler sein ein weniger als die vorherige Position. So hatten wir zunächst 15 und Zähler verringern. Also werden wir weisen Sie 14, um die nächste Position, Abnahme-Zähler, und wir gehen zugewiesen 13, und so weiter. Schließlich müssen wir diese Ecke hand Fall, wenn das Board hat eine noch Dimension, dann nur tun, 15, 14, 13, 12 den ganzen Weg hinunter bis 3, 2, 1, ist gehen, um uns verlassen ein unlösbares Bord. Und wir haben zu tauschen die 1 und die 2. Also, wenn d mod 2 gleich 0 ist, ist, dass wie wir gehen, um zu überprüfen, um zu sehen, ob es überhaupt. Wenn d mod 2 gleich 0 ist, dann in Reihe d minus 1, die die untere Reihe ist, und Position d minus 2 oder minus Spalte d 2, werden wir das auf 2 gesetzt, und Spalte d minus 3 wir sind werde auf 1 gesetzt. Also das ist nur, wo Umkehr die 1 und 2 gerade befinden. Schließlich werden wir die sehr gesetzt unten rechts gleich leer, wo Rohling wurde Hash definiert an der Spitze als 0 ist. So, das war nicht unbedingt notwendig, da dies für die Schleife ist zu haben, stellen Sie die unten rechts auf 0, da Zähler wird natürlich erreichen 0. Aber das beruht auf uns zu wissen, dass Rohling wurde gehasht, um eine 0 zu finden. Wenn ich in diesem Programm und später ändern blank an der Spitze bis 100, es sollte immer noch funktionieren. Das ist also nur sicher, dass die unten rechts ist eigentlich gleich unsere Blindwert. Schließlich haben wir zwei globale Variablen, so blank und leer i j, und wir sehen, die an der Spitze erklärt. Und wir werden diese beiden global zu bedienen Variablen zu verfolgen, die halten Position des leer, so dass wir nicht benötigen, um durch die gesamte Look Bord der Rohling jeder einzelne zu finden Zeit, die wir versuchen, einen Schritt zu machen. Also immer die Position des Rohlings gehen, um rechts unten starten. Also das rechts unten ist gegeben durch Indizes d minus 1, d minus 1. Also, das ist init. Jetzt bewegen wir uns auf zu zeichnen. Also, Unentschieden geht ähnlich zu sein wohin wir gehen, um laufen im gesamten Forum. Und wir, um den Wert zu drucken will nur das ist in jeder Position der Platine. Also hier, wir Druck den Wert, ist in jeder Position der Platine. Und feststellen, dass wir tun, -. Und das ist nur zu sagen, dass printf unabhängig davon, ob es eine Ziffer oder ein zweistellige Zahl, wir wollen, dass es noch nehmen zwei Spalten in dem Ausdruck, so dass, wenn wir zwei Ziffer und ein stellige Zahlen in der gleichen Platine, unsere Board wird noch schön Platz zu suchen. So zu, dass für jeden Wert wollen wir tun im Vorstand, mit Ausnahme der leer. Also, wenn die Position in der Platine gleich der Rohling, dann haben wir speziell ausdrucken wollen einfach nur einen Unterstrich um den Rohling dar, anstatt unabhängig vom Wert der blank tatsächlich ist. Schließlich drucken möchten wir aus einer neuen Zeile. Beachten Sie, dass es sich immer noch in die äußere for-Schleife, aber außerhalb die innere for-Schleife. Seit dieser äußere for-Schleife wird die Iteration über alle Zeilen, so dass diese printf werde nur eine neue Zeile zu drucken, so dass wir gehen Sie zum Ausdrucken der nächsten Zeile. Und das ist es Unentschieden. So, jetzt nun zu bewegen zu lassen. Jetzt kommen wir zu bewegen, die Fliesen, die die Benutzer im Spiel eingetragen - sie geben Sie die Fliese sie sich bewegen wollen - und sollen Sie einen bool zurück, so entweder wahr oder falsch, je nachdem, ob diese Bewegung war eigentlich gültig - ob Fliesen können zog in den leeren Raum. So, hier erklären wir, eine lokale Variable, tile_1 und tile_j, die gehen ähnlich sein blank_i und blank_j, außer es geht um den Überblick über die zu halten Position der Fliese. Jetzt ist hier, wir gehen zu bedienen blank_i und blank_j und sagen, alles in Ordnung, so hier ist der Rohling auf dem Brett. Jetzt ist die Fliese über der leer? Ist die Fliese auf der linken Seite des Rohlings? Ist die Fliese auf der rechten Seite des Zuschnitts? Ist die Platte unter der leer? Also, wenn die Fliese ist in jedem der genannten Positionen, dann wissen wir, dass die Fliese in die leere Stelle bewegt und der Rohling bewegt werden, wo der Fliesen derzeit. So, hier, sagen wir, wenn Karte an Position blank_i minus 1 blank_j. Also das sagt, ist die Fliese über dem aktuellen leer? Und wenn ja, werden wir daran erinnern, das ist die Position der Fliese. Die Fliese ist in Position blank_i minus 1 und blank_j. Jetzt erste, haben wir auch dieses Kontroll genau hier, so blank_i größer als 0 ist. Warum wollen wir das tun? Nun, wenn der Rohling in der oberen Reihe des Vorstandes, dann wollen wir nicht zu Blick über den Zuschnitt für die Fliesen seit Es ist nichts über die Oberseite Reihe der Platine. Dies ist, wie Sie vielleicht am Ende immer so etwas wie ein Segmentierungsfehler oder Ihr Programm könnte nur funktionieren auf unerwartete Weise. So, das ist, sicherzustellen, dass wir nicht schauen Sie in Orten, die nicht gültig sind. Jetzt werden wir das Gleiche zu tun für alle anderen Kombinationen möglich. So, hier sind wir unter dem leeren Blick um zu sehen, ob das die Fliese. Und wir müssen auch sicherstellen, dass wir nicht in der unteren Reihe, oder wir sollte nicht nach den Fliesen. Hier werden wir auf der linken Seite sehen der Rohling, um zu sehen, ob es die Fliese. Und wir sollten nicht nach links zu schauen wenn wir in der linken Spalte. Und hier werden wir auf der Suche rechts von der leer, und wir sollten nicht nach rechts zu schauen, wenn wir in der rechten Spalte. Also, wenn nichts von alledem wahr wäre, das bedeutet, dass die Fliese war nicht benachbart auf den Rohling und wir false zurück. Der Umzug war nicht gültig. Aber, wenn einer von denen wahr wäre, dann dieser Punkt, wissen wir, dass tile_i und tile_j gleich das sind Position der Fliese. Und so können wir das Board an aktualisieren Positionen tile_i und tile_j. Wir wissen, dass der neue Wert wird der leer sein und dass die Position blank_i blank_j, die das Original war blank - wir wissen die Fliese wird sich bewegen gibt. Beachten wir eigentlich nicht haben, zu tun, ein Echt Swap hier, da wir wissen, dass die Werte, die eingefügt werden müssen, in diesen Positionen. Wir haben nicht einen vorübergehenden Bedarf Variable um. Schließlich müssen wir, dass wir uns erinnern haben unsere globale Variablen, die sind Verfolgen der Position des Rohlings. Also, um die Position aktualisieren möchten wir der Rohling, wo die Fliese sein ursprünglich war. Schließlich kehren wir wahr, da der Umzug war erfolgreich. Wir tauschen die erfolgreich Rohling mit der Fliese. Na gut, so haben wir letzten müssen gewonnen zu überprüfen. Also, hat eine ähnlich bool zurück wo wahr wird, um anzuzeigen, dass die Benutzer hat das Spiel gewonnen. Und falsch ist, die anzeigt, dass das Spiel ist noch im Gange. Der Benutzer hat nicht gewonnen. Also, das wird ziemlich viel sein das Gegenteil von init, wo init, erinnern, initialisieren wir das Board 15, 14, 13, 12, usw.. Zu überprüfen Während gewonnen, wir wollen, wenn die Platte 1, 2, 3, 4, 5 und so weiter. Also, wir gehen zu initialisieren unsere Zähler auf 1 denn das ist, was die Top links von der Bord sein sollte. Und dann sind wir in einer Schleife gehen im gesamten Forum. Lassen Sie uns diesen Zustand zu ignorieren für eine Sekunde. Und dieser Zustand wird nur gehen, um Prüfung ist der Vorstand an dieser Stelle gleich den aktuellen Zählerstände? Wenn ja, inkrementiert die Zählung, so daß die nächste Position wir uns eins höher als die Position, die wir sind gerade jetzt. Also das ist, wie wir die Oben links sollte 1 sein. Erhöhen Sie die Anzahl auf zwei. Schauen Sie sich die nächste Position. Ist das 2? Wenn ja, inkrementiert den Zähler auf 3. Nächste Position, das ist 3? Wenn dem so ist, erhöhen Sie die Anzahl 4, und so weiter. Also, wenn es irgendeine Position auf der Brett, das unserer Zählung nicht gleich, dann false zurück, da wollen wir, dass bedeutet, es gibt einige, die Fliese ist nicht in der richtigen Position. So, hier, was ist diese Bedingung zu tun? Nun, daran erinnern, dass der Rohling soll unten rechts zu gehen. Und der Wert des Rohlings vielleicht nicht notwendigerweise den Wert der entgegen, dass wird zu erreichen unten rechts. Also haben wir speziell überprüfen wollen, ob i gleich gleich d minus 1 und j Gleichen gleich d minus 1 - das sagt, wenn wir sind am unteren rechten Betrachtungs der Vorstand - dann haben wir nur wollen weiter. Wir wollen diese besondere überspringen Iteration der for-Schleife. Und so, wenn wir es schaffen, durch diese zu bekommen for-Schleife verschachtelt ist, bedeutet das, dass es gab keine Fliese, die in war die falsche Position. Und wir aus der Schleife zu brechen und kommen hier, wo wir true zurück. Alle Fliesen waren in den richtigen Positionen und das bedeutet, der Benutzer gewann das Spiel. Und das ist es. Mein Name ist Rob Bowden, und das war 15.