>> ROB BOWDEN：你好。
我搶，我希望你 遊戲遊戲15。
現在，有你需要的四大功能 這項計劃實施 - 初始化，
繪製，移動，贏了。
那麼，讓我們來看看初始化。
>> 在這裡，我們看到我們的第一件事 要做的是聲明一個變量
所謂的計數器。
這將被初始化 至d次·d減1。
請記住，d為維 我們的董事會。
如何初始化是去工作的是它會 遍歷整個板
我們要開始 在左上角。
>> 並讓我們只說我們 有一個4×4板。
所以左上角我們 接下來要說的是15。
然後，我們只是要算 通過板，說15，14，13，
12，11，10，9,8，7， 6,5，4，等等。
所以左上方，我們預期將d次 ð減去1，這在4乘4
案件將是零下16 1，這是正確的15。
>> 現在這裡就是我們要去 遍歷整個董事會。
而我們要設定每個位置 董事會的當前值
我們的計數器，然後計數器是怎麼回事 遞減，從而使下一個
我們到達的位置，都將有 計數器大於1小於
以前的位置。
因此，我們最初有15和 遞減計數器。
這樣的話，我們要分配14到 下一個位置，遞減計數器，
而我們要指定 13，依此類推。
>> 最後，我們需要處理的那個角落 情況下，如果董事會有偶數
尺寸，那麼就做15，14，13， 12，一路下滑到3，2，1，是
要離開我們 一個無法解決的板。
我們必須交換1和2。
因此，當d MOD 2等於0，這是 我們要如何檢查
來看看它是否均勻。
若d模2等於0，則在D行減 1，這是最底行，並且
位置d減2或D列減 2，我們要設置為2，
d欄零下3我們 要設置為1。
所以，這只是其中倒車 在1和2目前是。
>> 最後，我們要設置很 右下等於空白，其中
空白已經被定義哈希 在頂部為0。
所以，這是不是絕對必要的， 因為這個for循環都將有
設置右下角為0，因為 反自然會達到0。
但是，這依賴於我們知道 空白被散列找到一個0。
如果我進入這個程序，後來 更改上方的空白為100，它
應該仍然工作。
>> 所以這只是在確保 右下實際上等於我們
空白值。
最後，我們有兩個全局變量， 所以我的空白和空白j和我們看到的
在上面這些聲明。
我們要使用這兩個全球 變量來跟踪的
空白的位置，使我們不 需要看整個
板找空白的每一個 一次我們試圖做出的舉動。
因此，坯件的位置始終是 將開始於右下方。
所以右下角由下式給出 指數Ð減1，D減1。
所以，這是初始化。
>> 現在，我們繼續繪製。
所以，拉伸將是類似 我們要去的地方進行迭代
在整個電路板。
我們只是要打印的值 這是在板的每個位置。
所以在這裡，我們要打印的值是 在棋盤的每個位置。
並請注意，我們正在做的 - 。
而這只是告訴printf的那 不論它是一個數字或
兩位數字，我們仍然希望它 佔用兩列在打印出來，
所以，如果我們有2位和1 在同一塊板上位數，我們的
板仍然會好看和廣場。
>> 所以我們想要做的，對於每一個值 中板，除空白。
所以，如果在電路板上的位置等於 空白的，那麼我們的專
想打印出只是一個下劃線 以表示為空白，而不是
的任何值 空白實際上是。
>> 最後，我們要打印 出一個新行。
請注意，這仍然是內 外循環，但外面
內循環。
由於這種外部for循環遍歷 在所有的行，所以這是printf的
將只打印一個新行，所以我們 移動到打印出的下一行。
這就是它的平局。
>> 所以，現在讓我們繼續前進移動。
現在，我們通過招，瓷磚的 用戶將被輸入到遊戲 - 它們
進入他們想要移動的瓷磚 - 和 你應該返回一個布爾值，所以
true或false，這取決於 這一舉動是否竟是
有效的 - 那瓦能否 搬進空白。
>> 所以在這裡，我們聲明一個局部變量， tile_1和tile_j，這要
類似blank_i和blank_j， 除了它要跟踪的
瓷磚的位置。
現在，在這裡，我們將使用blank_i 和blank_j說沒事，所以
這裡的電路板上的空白。
>> 現在，上面是空白的瓷磚？
是平鋪到空白的左？
是平鋪到空白的吧？
下面是空白的瓷磚？
所以，如果瓦片是在任何這些 位置，那麼我們知道，瓷磚
可以移動到空白點和 坯料可以被移動到那裡的
瓷磚目前是。
>> 所以在這裡，我們說，如果董事會在位置 blank_i減1 blank_j。
因此，這說的是瓷磚 高於目前的空白？
如果是這樣，我們要記住 即在瓷磚的位置。
瓷磚在位置blank_i 減1和blank_j。
現在開始，我們也有這個檢查 就在這裡，所以blank_i是
大於0。
>> 我們為什麼要那麼做？
那麼，如果是空白的最上面一行 董事會的，那麼我們不希望
看看上面因為空白的瓷磚 沒有什麼高於頂
排板。
這就是你可能最終得到 像段故障或
你的程序可能只是工作 以意想不到的方式。
所以，這是確保我們不 看在無效的地方。
>> 現在，我們要做同樣的事情 所有其它可能的組合。
所以在這裡，我們期待下面的空白 看看如果是這樣的瓷磚。
而且我們還必須確保我們 不是在最後一行，否則我們
不該看的瓷磚。
在這裡，我們將看向左邊 空白，看它是否是瓷磚。
我們不應該向左邊看 如果我們是在最左邊的列。
在這裡，我們要去看看的 右側的空白，我們不應該
向右邊看，如果我們 在最右邊的列中。
>> 所以，如果沒有這些東西都是真實的， 這意味著該瓦片不相鄰
到空白，我們可以返回false。
此舉是無效的。
但是，如果其中的一個是真的，那麼在 這一點，我們知道，tile_i和
tile_j是等於 瓷磚的位置。
因此，我們可以在更新主板 位置tile_i和tile_j。
我們知道，新的值將是空 並且，該位置blank_i
blank_j，這是原來的 空白 - 我們知道瓷磚是要
搬到那裡。
>> 請注意，我們實際上並不需要做一個 這裡真正的交換，因為我們知道
需要被插入的值 到這些位置。
我們不需要一個臨時 變量各地。
>> 最後，我們必須記住，我們 有我們的是全局變量
跟踪的位置的 空白的。
因此，我們要更新的位置 空白是平鋪在那裡
原來是。
最後，我們回到真正的自 此舉是成功的。
我們成功地交換 與瓷磚空白。
>> 好吧，所以最後我們 需要檢查韓元。
所以，同樣贏得了返回一個布爾值，其中 真正是要表明
贏得了用戶的遊戲。
和假的，表明 比賽仍在繼續。
該用戶還沒有贏得。
所以，這將是相當多 初始化的對面，這裡的init，
請記住，我們初始化板 15，14，13，12，等等。
雖然贏了，我們要檢查 板是1，2，3，4，5，等等。
>> 所以，我們要初始化我們 計數器為1，因為這頂一下
電路板的左邊應該是。
然後我們要循環 在整個電路板。
讓我們忽略這個條件 一秒鐘。
而這個情況也只是要 檢查董事會在此位置
等於當前的計數？
如果是這樣，遞增計數，以使 我們來看看下一個位置是高
比我們在現在的位置上。
>> 所以這就是我們如何獲得 左上角應為1。
遞增計數為2。
看看下一個位置。
這是2？
如果是這樣，遞增計數為3。
下一個位置，這是3？
如果是這樣，遞增計數 到4，等等。
所以，如果有在任何位置 板，不等於我們的數量，
然後我們要返回自認為假 意味著有一些瓷磚是
不是在正確的位置上。
>> 所以在這裡，這是什麼情況在做什麼？
好了，記住，是空白 應該去在右下角。
和空白的值可能不是 不一定等於的值
反駁說，將要達到 在右下角。
因此，我們特別要檢查，如果我 等於等於ð減1和j等於
等於Ð零下1 - 這是說，如果我們 在看的右下
主板 - 那麼我們就 要繼續。
我們想跳過這個特殊的 迭代的for循環。
>> 因此，如果我們能夠熬過這 嵌套的for循環中，這意味著
沒有瓷磚，這是在 不正確的位置。
我們跳出循環，來 在這裡，在這裡我們可以返回true。
所有切片都在正確的位置 這意味著用戶具有
贏得了比賽。
就是這樣。
我的名字是羅布·鮑登，這是15。