续前文,继续到第十一章,期间根据需要对些许木兰语言功能进行了重现,并发布了木兰版本 0.0.15.1 。游戏例程代码已经开源在 gitee,第十一章运行效果如下,欢迎提 issue。
注:由于 try...catch
语法仍然期待合作者一同完成(见此文末),因此例程中的异常处理部分暂且略过,不影响游戏功能。
下面是第十一章相比第八章新添加的主要部分,世界.ul
,用于设定玩家可走到的每格的状况,为之后的打怪等等做准备:
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 规则不同。