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