用木兰语言编写文字冒险游戏(十三、四章),又一个特性发现

来源: 投稿
作者: 吴烜2020
2021-01-05

继续改写 Python 文字冒险游戏,第十三章的主要添加了玩家在每格的行动限制:

func 选择命令(位置, 玩家) {
    行动 = nil
    while !行动 {
        可选行动 = 取可选行动(位置, 玩家)
        选择 = input("行动: ")
        行动 = 可选行动.get(选择)
        if 行动 {
            // 为避免如此特殊处理, 其他行动也需加"环境"参数
            if (行动 == 玩家.攻击) {
                行动(位置.敌人)
            } else {
                行动()
            }
        } else {
            println("选择无效!")
        }
    }
}

另外地图改成表示如下,连同对应解析方法:

地图描述 =
"|  |VT|  |\n" +
"|  |EN|  |\n" +
"|EN|ST|EN|\n" +
"|  |EN|  |\n"

十四章又添加了一个商贩角色,可以购买装备。另外,将地图解析方法改进为可以读取起始位置:

func 解析地图描述 {
    if !检查无误(地图描述) {
        throw SyntaxError("描述 is invalid!")
    }

    各行 = 地图描述.splitlines()
    各行 = list(filter(x -> x, 各行))

    for y, 行 in enumerate(各行) {
        行数据 = []
        各块 = 行.split("|")
        各块 = list(filter(c -> c, 各块))
        for x, 块 in enumerate(各块) {
            地块类型 = 地块类型表[块]
            if 地块类型 == 起始位置 {
                extern 起始点
                起始点 = tuple(x, y)
            }
            行数据.append(地块类型 ? 地块类型(x, y) : nil)
        }

        地图.append(行数据)
    }
}

木兰语言相关注意点

  1. ? : 是表达式,不能单独作为声明使用。因此 print( 2<4 ? 3 : 4) 这样可以,if 2>1{ 2<4 ? print(3) : print(4) } 就不可以。
  2. python 的 global 对应木兰的 extern,发现在引用时有个奇特之处。简化演示如下:

如下声明 x,函数 a 对其作修改:

x = 1

func a() {
    extern x
    x = x * 3
}

println("原值:`x`")

如果这样引用:

using * in 原值

a()
println("修改后:`x`")

输出如下,可见修改未果:

原值:1
修改后:1 

这样调用才修改有效:

using 原值

原值.a()
println("修改后:`原值.x`")

输出:

原值:1
修改后:3 

Python 行为也相同。待研究,不知是否与之前发现的 引用机制 有何关联。

展开阅读全文
0 收藏
分享
加载中
精彩评论
支持作者,希望下次关键词用文言词吧会很有惊喜的
2021-01-05 18:56
4
举报
支持
2021-01-06 08:06
1
举报
最新评论 (24)
单字单意,是人工智能编程语言的未来,26个字母平抣5个字母一个词,几种排练组合表达度自己算,汉字7000个单字,平均三个字表意,多少种表意组合,自己算,这是一个数学问题,别跟我谈性能,那完全是设计问题
2021-01-07 18:14
0
回复
举报
中英文切换烦不烦?
2021-01-06 15:49
0
回复
举报
看着爽最重要,毕竟读代码的时候比写多的多。另外还有中文代码快速补全 VS Code 插件。
2021-01-06 16:50
0
回复
举报
支持
2021-01-06 08:06
1
回复
举报
这框架有点好玩
2021-01-05 23:56
0
回复
举报
红薯出个屏蔽功能 求你了
2021-01-05 23:42
0
回复
举报
早就有大佬给过浏览器插件代码自行屏蔽了,咋还每次都来这一句,是这点手都不愿动么?
2021-01-06 00:38
0
回复
举报
app不支持啊。
2021-01-06 08:56
0
回复
举报
您这是过敏啊……看看吧
2021-01-06 09:55
0
回复
举报
没办法,有人侮辱木兰,就得抵制
2021-01-06 12:39
0
回复
举报
这个理由头回听说,那,加油吧。
2021-01-06 16:51
0
回复
举报
回复 @吴烜2020 : 给你说是第二次了,别用这种骗经费的项目来博人眼球
2021-01-06 19:56
0
回复
举报
这是我见过最不像文游的文字冒险游戏。。你到底懂不懂什么叫文游(另一个名字是交互式小说)
2021-01-05 22:55
0
回复
举报
例程改写自英文原著《Make your own python text adventure》。不知有何指教?
2021-01-06 00:31
0
回复
举报
我认为都不是文游,我就是喜欢玩文字推理冒险类的游戏,小爱同学有人收录了文游剧本,文字游戏,是一种基于语言cosplay发展而成的一种游戏,通过编写交互式剧本,通常在知乎,qq群发展而成的文字演绎活动,就和文游相似(每个文游都是有剧本的),每个文游都是有世界观的,玩家扮演其中某个角色,通过各种场景的选择,可以有各种不同的结局,又名交互式小说(可以认为是一种现代小说的载体方式)
2021-01-06 03:22
0
回复
举报
原书定位是python入门教程,改写为木兰语言实现而已。想改进完善游戏当然欢迎。
2021-01-06 11:38
0
回复
举报
我说的是,这不算文游
2021-01-06 12:05
0
回复
举报
😂本来对文游挺感兴趣的,都玩了好几个文游了,结果被你标题诱惑进来,发现根本不是文游
2021-01-06 03:26
0
回复
举报
哈哈
2021-01-05 22:25
0
回复
举报
感觉有点像go语言。除了汉字部份,结构控制基本脱胎于go
2021-01-05 19:23
0
回复
举报
不知是哪些方面和go相似?之前只在看到$语法时联想到了php。
2021-01-06 11:37
0
回复
举报
支持作者,希望下次关键词用文言词吧会很有惊喜的
2021-01-05 18:56
4
回复
举报
本项目旨在重现木兰的语法和功能,而木兰语法用的是英文关键词。有意对其语法进行中文化的话请自行fork后修改。
2021-01-06 00:35
0
回复
举报
你github
上搜,早有了,国人开发了好几年了
2021-01-06 21:24
0
回复
举报
更多评论
24 评论
0 收藏
分享
返回顶部
顶部