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。