陳新龍
華容道這款益智游戲,以其變化多端、百玩不厭的特點與魔方、鉆石棋并稱為“智力游戲界的三個不可思議”。今天我們要做的數(shù)字華容道和傳統(tǒng)華容道有一些區(qū)別。在《最強大腦》中何猷君曾經(jīng)以21秒速度完成了4×4數(shù)字華容道挑戰(zhàn)。常見的數(shù)字華容道有3×3、4×4、5×5等三種大小。3×3的游戲界面一共9個格子,需要將1到8八個數(shù)字排好順序;4×4共16個格子,要排好1到15的數(shù)字,其實只要掌握基本解題技巧,數(shù)字多少對游戲的難度影響并不大(圖1)。
我們以最簡單的3×3數(shù)字華容道為例,游戲開始時數(shù)字會完全打亂,然后利用空格位每次移動一個數(shù)字,最后將所有數(shù)字按順序復(fù)原。玩這個游戲時打亂數(shù)字順序只能通過在盒子里移動數(shù)字的方式打亂,而不是將數(shù)字拿出來后再隨意放回去,那樣可能會出現(xiàn)無解的情況。網(wǎng)上有很多款數(shù)字華容道,我們可以參考它們的外觀和操作方式,用Scratch編程做一個。
添加自定義方塊角色,在方塊造型中填入8個數(shù)字,共9個造型。添加游戲勝利的背景(You Win),保留小貓角色。
我們用小貓的代碼完成界面排布。首先將方塊按順序放入預(yù)設(shè)位置,創(chuàng)建兩個列表分別保存“X坐標”和“Y坐標”,依次將9個方格對應(yīng)的坐標通過循環(huán)存入列表中(具體坐標軸如圖1),分別通過三次循環(huán)遍歷將數(shù)字103、0、-103分別添加入X坐標列表中,Y坐標列表的內(nèi)容通過三個數(shù)字分別循環(huán)遍歷添加入列表中(圖2)。
對方塊角色編程,通過克隆的方法將九塊方格移動到預(yù)設(shè)位置,默認初始克隆序號值為0,重復(fù)執(zhí)行9次。當(dāng)克隆體啟動時,根據(jù)需要顯示造型,造型編號等于序號,克隆體的位置由之前創(chuàng)建的X坐標列表和Y坐標列表中提?。▓D3)。
同時,將數(shù)字隨機填充入方格中,建立“位置號”列表,通過隨機數(shù)的方法將1-9數(shù)字填入列表中(圖4)。
還要創(chuàng)建兩個自制積木“使用位置號計算行列數(shù)”和“計算行列數(shù)差值”為完成數(shù)字華容道做最后準備。當(dāng)我們點擊數(shù)字方塊希望它移動時,這個方塊必須在空白方格旁邊才能交換位置。這就需要找到相鄰塊行列數(shù)之間的數(shù)學(xué)關(guān)系來判斷鼠標點擊的方塊和空白方格的位置關(guān)系。最后我們通過計算數(shù)字塊與空白塊的行列差來判斷空白塊是否相鄰,如果列數(shù)差加行數(shù)差的值等于1就說明點擊的數(shù)字塊和空白塊相鄰,可以移動。交換位置的方法我們已經(jīng)做了多次,用臨時項的方法來完成(圖5)。
根據(jù)勝利時華容道的位置號(1-8),我們可以確定每個數(shù)字的行列數(shù),比如數(shù)字1就是在第一行第一列,數(shù)字5就是在第二行第二列……列數(shù)比較容易確定,將位置號除以3的余數(shù),如果結(jié)果等于0那么就是第三行,其他為第一行和第二行。行數(shù)的確定比列數(shù)稍微復(fù)雜一點,小于數(shù)字4在第一行,否則小于7在第二行,其余在第三行(圖6)。
確定完行列值之后,我們可以依據(jù)行列值計算出行數(shù)差和列數(shù)差。當(dāng)點擊數(shù)字塊列數(shù)大于空白塊時,列數(shù)差為數(shù)字塊列數(shù)減空白塊列數(shù),否則的話列數(shù)差等于空白塊列數(shù)減數(shù)字塊列數(shù)。同樣行數(shù)差也是一樣的方法,根據(jù)數(shù)字塊和空白塊行數(shù)進行對比(圖7)。
檢驗是否復(fù)原的方法其實很簡單,當(dāng)“位置號”列表的數(shù)字從1到8順序排列時,就觸發(fā)成功的圖片(圖8)。
數(shù)字華容道制作難度雖然不低,但做好之后是可以玩很久的益智游戲,玩華容道要掌握統(tǒng)籌解決問題的方法,盡可能提前部署,爭取用最短的時間,將棋盤上的數(shù)字方塊回復(fù)原位。