ROB BOWDEN Cześć. Jestem Rob, i mam nadzieję, że twój gry do gry 15. Teraz są cztery funkcje, które trzeba do wdrożenia w tym programie - init rysować, przesuwać i wygrał. Więc spójrzmy na init. Tutaj widzimy pierwszą rzeczą jesteśmy zamiar zrobić, to zadeklarować zmienną zwany licznik. To będzie być inicjowane do d razy d minus 1. Pamiętaj, że d jest wymiarem naszej rady. Jak startowych będzie działać to się dzieje iteracyjne nad całym forum i mamy zamiar rozpocząć w lewym górnym rogu. I powiedzmy, że posiada 4 przez 4 płytę. Więc lewy górny jesteśmy powiedzieć 15. A potem po prostu się liczyć przez rad, mówiąc: 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, i tak dalej. Tak, na górze po lewej, możemy spodziewać się d razy d minus 1, która w pozycji 4 przez 4 Sprawa będzie 16 minus 1, który jest prawidłowo 15. A teraz tutaj, gdzie my jedziemy iteracyjne nad całym forum. I mamy zamiar ustawić w każdej pozycji deska do aktualnej wartości nasz licznik, a następnie licznik będzie aby zmniejszyć tak, że następna Stanowisko docieramy będzie miał Licznik jest o jeden mniejsza poprzednie stanowisko. Więc początkowo miał 15 i zmniejsz licznik. Tak więc mamy zamiar przypisać 14 do następna pozycja, licznik ubytek, i będziemy przypisany 13, i tak dalej. Wreszcie, musimy obsłużyć tę ziemię przypadek, w którym, jeśli płyta ma nawet wymiar, to po prostu robi 15, 14, 13, 12, w dół do 3, 2, 1, jest zamiar zostawić nas nierozwiązywalny zarządu. I musimy zamienić 1 i 2. Tak więc, jeśli d mod 2 jest równa 0, to jak mamy zamiar sprawdzić aby sprawdzić, czy jest jeszcze. Jeśli d mod 2 jest równa 0, a następnie w wierszu d minus 1, który jest dolny rząd, i Stanowisko d minus 2, czy minus kolumna d 2, mamy zamiar ustawić, że do 2, a Kolumna D minus 3 jesteśmy będzie ustawiony na 1. Tak, że po prostu odwrócenie gdzie 1 i 2, obecnie są. Wreszcie, mamy zamiar ustawić bardzo na dole po prawej równa puste, gdzie hash puste został zdefiniowany na szczycie wynosi 0. Tak, że nie było absolutnie konieczne, ponieważ na pętli będzie miał ustawić dolny prawy na 0, ponieważ Licznik będzie naturalnie osiągnąć 0. Ale to zależy od nas, wiedząc, że blank był mieszany znaleźć 0. Jeśli pójdę do tego programu, a później zmienić puste na górze do 100, to powinny nadal pracować. Więc to jest po prostu upewnić się, że na dole po prawej jest faktycznie równa nasze wartości puste. Wreszcie, mamy dwie zmienne globalne, i tak puste i puste j, i widzimy, zadeklarowanym na szczycie. I będziemy używać tych dwóch globalnych zmienne, aby śledzić Stanowisko puste, tak, że nie mamy trzeba szukać w całym zarządu, aby znaleźć puste każdego czas staramy się wykonać ruch. Tak więc położenie półfabrykatu jest zawsze zamierza rozpocząć w prawym dolnym rogu. Tak, na dole po prawej jest przez Indeksy d minus 1, d minus 1. Tak, to jest startowych. Teraz przechodzimy do rysowania. Tak, losowanie będzie podobny gdzie jedziemy do iteracji nad całym forum. A my po prostu chcemy wydrukować wartości to w każdej pozycji płyty. Więc tutaj mamy drukowania wartość, która jest w każdej pozycji płyty. I zauważyć, że robimy -. A to tylko mówi, że printf niezależnie od tego, czy jest to jedna cyfra lub dwucyfrowy numer, wciąż ma się zajmują dwie kolumny w wydruku, tak, że jeśli mamy dwie cyfry oraz jedna cyfrowe numery z tej samej płyty, nasze Rada będzie nadal wyglądać dobrze i kwadratowe. Dlatego chcemy, aby to zrobić dla każdej wartości w płycie, z wyjątkiem półfabrykatu. Tak więc, jeśli pozycja w tablicy jest równa puste, to specjalnie Aby wydrukować tylko podkreślenia do reprezentowania puste, zamiast bez względu na wartość puste w rzeczywistości. Wreszcie, chcemy wydrukować z nowej linii. Zauważ, że jest to jeszcze w środku zewnętrznej pętli, ale poza wewnętrzna pętla for. Ponieważ ta zewnętrzna jest iteracji pętli na wszystkich wierszy, a więc jest to printf będzie po prostu wydrukować nową linię, tak więc przejść wydrukować następny wiersz. I to jest to na remis. Tak, teraz przejdźmy do poruszania się. Teraz mijamy ruch, że płytki Użytkownik jest wpisany do gry - są Wprowadź płytki chcą przenieść - i jesteś ma powrócić bool, więc true lub false, w zależności od czy ten ruch był rzeczywiście ważne - czy to może być płytka przeniósł się do pustego miejsca. Więc tutaj deklarujemy zmiennej lokalnej, tile_1 i tile_j, które będą być podobne do blank_i i blank_j, oprócz tego, że będzie śledzić Położenie płytki. Teraz tutaj, będziemy używać blank_i i blank_j i powiedzieć wszystko w porządku, więc tu jest puste na pokładzie. Teraz jest dachówka powyżej puste? Płytka jest na lewej stronie wykroju? Płytka jest na prawo wykroju? Czy płytki poniżej puste? Tak więc, jeśli płytka jest w każdym z tych pozycji, to wiemy, że płytki może być przeniesiony do pustego miejsca i puste mogą być przenoszone do miejsca, gdzie Dachówka jest obecnie. Więc tutaj mówimy, jeśli wyżywienie w pozycji blank_i minus 1 blank_j. Więc to mówi jest płytka powyżej obecnego puste? A jeśli tak, będziemy pamiętać to położenie płytki. Płytka jest w pozycji blank_i minus 1 i blank_j. teraz pierwsze, mamy również ten test tutaj, jest tak blank_i większy niż 0. Dlaczego chcesz to zrobić? Skoro pustego w górnym rzędzie rady, to nie chcemy, aby wyżej puste spojrzenie na płytki od nic powyżej górnej wiersz rady. Jest to, jak może skończyć się coraz coś jak segmentacji lub usterki Twój program może po prostu działa w nieoczekiwany sposób. Tak, to jest upewnienie się, że nie szukać w miejscach, które nie są ważne. Teraz mamy zamiar zrobić to samo dla wszystkie inne możliwe kombinacje. Więc szukamy poniżej puste aby sprawdzić, czy to jest płytka. I my również upewnić się, że jesteśmy nie ma na dolnym rzędzie, albo też, że Nie należy patrzeć na płytki. Tutaj mamy zamiar spojrzeć na lewo od puste, aby sprawdzić, czy jest płytki. I nie powinniśmy patrzeć na lewo jeśli jesteśmy w skrajnej lewej kolumnie. I tutaj będziemy patrzeć prawo puste, i nie powinniśmy spójrz w prawo, jeśli jesteśmy w prawej kolumnie. Tak więc, jeśli żadna z tych rzeczy są prawdziwe, co oznacza, że ​​nie był w sąsiedztwie płytki na puste i możemy powrócić fałszywe. Akcja nie była ważna. Ale, jeśli jeden z nich to prawda, to co ten punkt, wiemy, że tile_i i tile_j są równe Położenie płytki. I tak, możemy aktualizować na pokładzie Pozycje tile_i i tile_j. Wiemy, nowa wartość będzie puste i że blank_i pozycji blank_j, który był przy puste - wiemy, dachówka będzie przenieść tam. Zauważ, że w rzeczywistości nie ma to zrobić prawdziwe Swap tutaj, ponieważ wiemy, wartości, które muszą być wstawiane w tych pozycjach. Nie potrzebujemy tymczasowe Zmienna wokół. Wreszcie, musimy pamiętać, że mamy nasze zmienne globalne, które są śledzenie pozycji z pustą. Dlatego chcemy, aby zaktualizować pozycję puste, aby być tam, gdzie płytki pierwotnie był. Wreszcie wracamy prawda od Akcja zakończyła się powodzeniem. Udało nam się zamienić puste płyty. W porządku, więc ostatni raz trzeba sprawdzić wygrane. Tak, wygrałem podobnie zwraca bool, gdzie prawda będzie wskazywać, że Filmaster wygrał. I wskazuje, że jest fałszywe Gra jest nadal w toku. Użytkownik nie zdobył. Tak, to będzie dość dużo Przeciwieństwem init gdzie startowych, Pamiętam, że zainicjować płytę do 15, 14, 13, 12, tak dalej. Natomiast wygrał, chcemy sprawdzić, czy Płyta ma wartość 1, 2, 3, 4, 5, i tak dalej. Tak, mamy zamiar zainicjować nasze licznik na 1 ponieważ to, co góry lewa zarządu powinno być. A następnie jedziemy do pętli nad całym forum. Miejmy zignorować ten warunek na sekundę. I ten warunek jest po prostu będzie Sprawdzanie jest w tej pozycji zarządu równą bieżącej liczby? Jeżeli tak, to zwiększyć liczbę, tak aby następna pozycja przyjrzymy jest wyższa niż położenie jesteśmy w tej chwili. Tak to jest jak mamy u góry z lewej powinien być 1. Zwiększyć liczbę do 2. Spójrz na następną pozycję. Jest to 2? Jeśli tak, zwiększamy liczbę do 3. Następna pozycja, to jest 3? Jeśli tak, to zwiększyć liczbę 4, i tak dalej. Tak więc, jeśli istnieje jakakolwiek pozycja na Płyta, która nie równa nasz licznik, następnie chcemy return false ponieważ oznacza, że ​​nie jest pewne, że jest płytka nie jest w prawidłowym położeniu. Więc, co robi ten warunek? Cóż, pamiętaj, że jest pusty jechać w prawym dolnym rogu. I wartość ślepej nie może zawsze równa wartości licznik, który ma być osiągnięty w prawym dolnym rogu. Więc specjalnie chcą sprawdzić, czy i równa jest równa d minus 1 i J równych równa d minus 1 - który mówi, jeśli Poszukujemy w prawym dolnym rogu wyżywienie - to po prostu Aby kontynuować. Chcemy, aby pominąć ten konkretny iteracji pętli for. I tak, jeśli uda nam się przez to zagnieżdżonych pętli, co oznacza, że nie było płytki, że był w nieprawidłowe położenie. I wyjdziemy z pętli i przyjść tutaj, gdzie możemy wrócić prawda. Wszystkie płytki są w odpowiednich pozycjach i oznacza, że ​​użytkownik ma wygrał. I to jest to. Nazywam się Rob Bowden, i to było 15.