>> 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.