续前文,继续到第十一章,期间根据须要对些许木兰语言功能进行了重现,并发布了木兰版本 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 规则不一样。并发