續前文,繼續到第十一章,期間根據須要對些許木蘭語言功能進行了重現,併發布了木蘭版本 0.0.15.1 。遊戲例程代碼已經開源在 gitee,第十一章運行效果以下,歡迎提 issue。javascript
注:因爲 try...catch
語法仍然期待合做者一同完成(見此文末),所以例程中的異常處理部分暫且略過,不影響遊戲功能。java
下面是第十一章相比第八章新添加的主要部分,世界.ul
,用於設定玩家可走到的每格的情況,爲以後的打怪等等作準備:git
type 地塊 { func $地塊(x, y) { $x = x $y = y } func $介紹 { throw NotImplementedError("請建立子類") } } type 起始位置 : 地塊 { func $介紹 { return "\n " + "你發現身處山洞,壁上有根搖曳的火把。\n " + "能夠看到四條出路,每條都陰暗攝人。\n\n" } } type 日常位置 : 地塊 { func $介紹 { return "\n " + "此處平淡無奇\n\n" } } type 取勝位置 : 地塊 { func $介紹 { return "\n " + "遠處有道亮光……\n " + "……越近越亮!是陽光!\n\n\n " + "重見天日了!\n" } } 地圖 = [ [nil, 取勝位置(1,0), nil], [nil, 日常位置(1,1), nil], [日常位置(0,2), 起始位置(1,2), 日常位置(2,2)], [nil, 日常位置(1,3), nil] ] func 走到(x, y) { return nil if x < 0 or y < 0 //try: return 地圖[y][x] //except IndexError: // return nil }
原書第九到十一章基本在逐漸完善遊戲功能,涉及的語言語法並很少。所以木蘭 0.0.15.1 僅添加了 throw 語法和 isa 內置函數(與 Python 的 isinstance 對應)。但期間也發現尚待深究的問題,如引用模塊所用包路徑與 Python 規則不一樣。併發