用木兰语言编写冒险游戏,期待合作者一同重现catch语法
上周开了两个支线,一是在整理和消化至今用到的正则表达式时,调研用中文 API 让正则表达式更易读写;二是基于一本编程入门书籍开始检验木兰当前发布版本的实用性。正则表达式 API
如木兰中字符串插值部分用到的正则表达式 r"(")((?分段(双引号) .分段( 任一( 序列(反斜杠, 引用分段(1)).前面不是(反斜杠), 序列(非换行字符) ) ).若干().不贪() .引用分段(1)
现在仍在技术验证和文档完善中,另开了个 gitee 项目(文末),欢迎在 issue 中提意见建议。文字冒险游戏
刚到手了《Make Your Own Python Text Adventure: A Guide to Learning Programming》一书,将它的例程用木兰语言重写并改为中文标识符,一方面看看已重现的木兰功能是否足够编写新手入门教程,顺便对之前小结的木兰与 Python 的语法对比进行补充。下面代码在木兰发布版本 0.0.15.0 运行通过(由原书第八章例程改写):type 武器 { func $__str__ { return $名称 } } type 石块 : 武器 { func $石块 { $名称 = "石块" $描述 = "拳头大的岩石,砸起来很顺手。" $伤害 = 5 } } type 匕首 : 武器 { func $匕首 { $名称 = "匕首" $描述 = "带些锈的小匕首,比石块更危险。" $伤害 = 10 } } type 锈剑 : 武器 { func $锈剑 { $名称 = "锈剑" $描述 = "有点年头的宝剑,尚能一用。" $伤害 = 20 } } func 玩 { 库存 = [匕首(),"金币(5)","面包棍"] println("逃出生天!") loop { 输入 = 获取命令() if ["n", "N"].__contains__(输入) { println("往北!") } elif ["s", "S"].__contains__(输入) { println("往南!") } elif ["e", "E"].__contains__(输入) { println("往东!") } elif ["w", "W"].__contains__(输入) { println("往西!") } elif ["i", "I"].__contains__(输入) { println("库存:") for 家伙 in 库存 { println("* " + str(家伙)) } } else { println("不懂!") } } } func 获取命令 { return input("行动:") } 玩()
书中第九章「异常」的例程,需要木兰的 try...catch 语法,而此语法尚未在本项目重现。
特此召集有意了解木兰编程语言实现细节的同仁,一同研究重现。参考它的逆向工程,代码量在数十行,另需额外编写测试等。当然,这也在悬赏范围之内。